我使用 lucene 雪球分析器来执行词干提取。结果是没有意义的话。我提到了这个question https://stackoverflow.com/questions/190775/stemming-algorithm-that-produces-real-words/190885#190885 .
解决方案之一是使用一个数据库,其中包含单词的词干版本与单词的一个稳定版本之间的映射。 (从社区到社区的示例,无论社区的基础是什么(社区/或其他词))
我想知道是否有一个数据库可以执行这样的功能。
理论上不可能从词干中恢复特定的单词,因为一个词干可以是许多单词所共有的。根据您的应用程序,一种可能性是构建一个词干数据库,每个词干映射到多个单词的数组。但是,您需要预测这些单词中哪一个适合给定要重新转换的词干。
作为这个问题的一个非常简单的解决方案,如果你知道单词标签,你可以尝试在数据库中存储带有标签的单词:
run:
NN: runner
VBG: running
VBZ: runs
然后,给定词干“run”和标签“NN”,您可以确定“runner”是该上下文中最可能的单词。当然,这个解决方案远非完美。值得注意的是,您需要处理这样一个事实:相同的单词形式在不同的上下文中可能有不同的标记。但请记住,解决这个问题的任何尝试充其量都只是一个近似值。
编辑:从下面的评论来看,您可能想使用词形还原而不是词干提取。以下是如何使用以下方法获取单词的引理斯坦福核心 NLP 工具 http://nlp.stanford.edu/software/corenlp.shtml:
import java.util.*;
import edu.stanford.nlp.pipeline.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.ling.CoreAnnotations.*;
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma");
pipeline = new StanfordCoreNLP(props, false);
String text = "Hello, world!";
Annotation document = pipeline.process(text);
for(CoreMap sentence: document.get(SentencesAnnotation.class)) {
for(CoreLabel token: sentence.get(TokensAnnotation.class)) {
String word = token.get(TextAnnotation.class);
String lemma = token.get(LemmaAnnotation.class);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)