我正在开发一个使用StanfordNLP的项目。项目中的一个功能是从一段文本中提取所有名词并将每个名词解释。我正在使用以下代码提取名词
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, parse, natlog, openie");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation(text);
pipeline.annotate(document);
List<CoreMap> sentences = document.get(SentencesAnnotation.class);
for(CoreMap sentence: sentences) {
SemanticGraph dependencies = sentence.get(BasicDependenciesAnnotation.class);
List<String> Nouns = Extractnouns(dependencies.typedDependencies(), sentence);
}
private List<String> Extractnouns(Collection<TypedDependency> tdl, CoreMap sentence) {
List<String> concepts=new ArrayList<String>();
for (TypedDependency td : tdl)
{
String govlemma = td.gov().lemma();
String deplemma = td.dep().lemma();
String deptag=td.dep().tag();
String govtag=td.gov().tag();
if(deptag!=null && deptag.contains("NN") )
{
concepts.add(deplemma);
}
if(govtag!=null && govtag.contains("NN") )
{
concepts.add(govlemma);
}
}
return concepts;
}
它正如预期的那样工作但是对于某些词来说,词形还原不起作用。我发现一些作为句子中第一个单词出现的名词有这个问题。例如:&#34;质子和电子都携带电荷。&#34;这里的单词&#34; Protons&#34;没有被转换为&#34;质子&#34;关于应用引理。与其他一些名词一样。
你能告诉我这个问题的解决方案吗?
答案 0 :(得分:0)
不幸的是,这是一段语音标记错误。 &#34;质子&#34;标有&#34; NNP&#34;不是&#34; NNS&#34;,所以没有对其进行词形还原。
您可以尝试在文本的低版本上运行,我注意到它会做正确的事情。