【发布时间】:2016-09-26 09:27:54
【问题描述】:
我编写了代码来从通过斯坦福 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;
}
【问题讨论】:
标签: java nlp stanford-nlp