gpt4 book ai didi

java - StanleyCoreNLP 不按照我的方式工作

转载 作者:行者123 更新时间:2023-12-01 18:33:29 25 4
gpt4 key购买 nike

我使用下面的代码。然而,结果并不是我所期望的。结果是[机器,学习]但我想得到[机器,学习]。我怎样才能做到这一点?另外,当我的输入是 "biggeSTLarger" 时,我想得到像 [big, big] 这样的结果,但结果只是 [biggeSTLarger]

(PS:我只是在 eclipse 中添加这四个 jar:joda-time.jar、stanford-corenlp-3.3.1-models.jar、stanford-corenlp-3.3.1.jar、xom.jar 我还需要添加一些吗?)

import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import edu.stanford.nlp.ling.CoreAnnotations.LemmaAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation;
import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;

public class StanfordLemmatizer {

protected StanfordCoreNLP pipeline;

public StanfordLemmatizer() {
// Create StanfordCoreNLP object properties, with POS tagging
// (required for lemmatization), and lemmatization
Properties props;
props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma");


this.pipeline = new StanfordCoreNLP(props);
}

public List<String> lemmatize(String documentText)
{
List<String> lemmas = new LinkedList<String>();
// Create an empty Annotation just with the given text
Annotation document = new Annotation(documentText);
// run all Annotators on this text
this.pipeline.annotate(document);
// Iterate over all of the sentences found
List<CoreMap> sentences = document.get(SentencesAnnotation.class);
for(CoreMap sentence: sentences) {
// Iterate over all tokens in a sentence
for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
// Retrieve and add the lemma for each word into the
// list of lemmas
lemmas.add(token.get(LemmaAnnotation.class));
}
}
return lemmas;
}


// Test
public static void main(String[] args) {
System.out.println("Starting Stanford Lemmatizer");
String text = "Machine Learning\n";
StanfordLemmatizer slem = new StanfordLemmatizer();
System.out.println(slem.lemmatize(text));
}

}

最佳答案

理想情况下,词形还原应返回一组单词的规范形式(称为“引理”或“中心词”)。然而,这种规范形式并不总是我们直观所期望的。例如,您期望“学习”产生引理“学习”。但是名词“learning”具有引理“learning”,而只有现在进行时动词“learning”具有引理“learn”。如果出现歧义,词形还原器应依赖于词性标记中的信息。

嗯,这解释了机器学习,但是大、更大、最大呢?

词形还原取决于词法分析。斯坦福形态学类(class)通过仅删除词形变化(而不是派生形态)来计算英语单词的基本形式。也就是说,它只处理名词复数、代词格和动词结尾,而不处理形容词比较级或派生名词之类的内容。它基于 John Carroll 等人用 flex 编写的有限状态传感器。我找不到原始版本,但Java版本似乎是available here .

这就是为什么最大不会产生

不过,WordNet 词汇数据库解析为正确的引理。我通常使用 WordNet 进行词形还原任务,到目前为止还没有发现重大问题。正确处理您的示例的另外两个众所周知的工具是

  1. CST Lemmatizer
  2. MorphAdorner

关于java - StanleyCoreNLP 不按照我的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com