我正在做一个使用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;}
它像预期的那样工作,但对于某些单词来说,词汇化并不起作用。我观察到一些作为句子中第一个单词的名词存在这个问题。例如:“质子和电子都带电荷。”在这里,在应用引理时,“质子”一词没有转换为“质子”。和其他一些名词也一样。
你能告诉我这个问题的解决方案吗?
发布于 2018-06-17 12:19:20
不幸的是,这是一个词性标注错误。“Proton”被标记为"NNP“而不是"NNS",因此不会对其执行词汇化。
你可以尝试在文本的小写版本上运行,我注意到在这种情况下它做了正确的事情。
https://stackoverflow.com/questions/50862687
复制相似问题