2016-09-26 44 views
2

我寫的代碼來提取我的字符串,它已經經歷了斯坦福NER解析器傳遞和多模式的判刑抽取多個字符串給輸出,如:從已經通過斯坦福NER惡搞

Input Sentence - Goldman profit at risk under Volcker rule 
Output Sentence - Goldman profit at risk under <PERSON>Volcker</PERSON> rule 

我需要提取單詞Volker,並將其放在後面在代碼中打印的personTag地圖中。下面的代碼給了我list.add(m.group(1))上的空指針異常;

我無法弄清楚爲什麼。請幫助。

.............. 

    HashMap<String, String> regs = new HashMap<String, String>(); 

    regs.put("PERSON", "<PERSON>(.+?)</PERSON>"); 
    regs.put("LOCATION", "<LOCATION>(.+?)</LOCATION>"); 
    regs.put("TIME", "<TIME>(.+?)</TIME>"); 
    regs.put("PERCENT", "<PERCENT>(.+?)</PERCENT>"); 
    regs.put("MONEY", "<MONEY>(.+?)</MONEY>"); 
    regs.put("DATE", "<DATE>(.+?)</DATE>"); 


for (Entry<String, String> entry : regs.entrySet()) 
{ 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    Matcher m = Pattern.compile(value).matcher(NER); 
    ArrayList<String> list = null; 

    while (m.find()) 
    { 
     if (key.contains("PERSON")){ 

      list.add(m.group(1)); 
      personTag.put(key, list); 
      //System.out.println("Person Tag:" + personTag); 
      roleStrings.put(SemanticRole.PERSON, personTag.toString()); 
     } 
     else if (key.contains("LOCATION")){ 
      list.add(m.group()); 
      locationTag.put(key, list); 
      roleStrings.put(SemanticRole.LOCATION, locationTag.toString()); 
     } 
     else if (key.contains("TIME")){ 
      list.add(m.group(1)); 
      timeTag.put(key, list); 
      roleStrings.put(SemanticRole.TIME, timeTag.toString()); 
     } 
     else if (key.contains("DATE")){ 
      list.add(m.group(1)); 
      timeTag.put(key, list); 
      roleStrings.put(SemanticRole.TIME, timeTag.toString()); 
     } 
    } 
} 
return roleStrings; 
} 

回答

0

沒關係。我沒有初始化我的列表,因此得到了空指針異常。這是我必須做的:

List<String> list = new ArrayList<String>(); 

相反的:

List<String> list = null;