【问题标题】:Extracting multiple strings from a sentence that has been passed through the Stanford NER tagger从通过斯坦福 NER 标记器的句子中提取多个字符串
【发布时间】: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


    【解决方案1】:

    没关系。我没有初始化我的列表,因此得到了空指针异常。这是我必须做的:

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

    代替:

     List<String> list = null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多