我使用lucene雪球分析仪执行词干分析。结果是没有意义的话。我提到了这个question

解决方案之一是使用数据库,该数据库包含单词的词干版本与单词的一个稳定版本之间的映射。 (从社区到社区的示例,无论社区的基础是什么(社区/或其他字眼))

我想知道是否有执行此功能的数据库。

最佳答案

从理论上讲不可能从一个词干中恢复一个特定的词,因为一个词干可能是许多词所共有的。根据您的应用程序,一种可能性是建立一个词干数据库,每个词干映射到几个单词的数组。但是,您将需要根据给定的词干来预测这些词中的哪一个是合适的,以进行重新转换。

作为解决此问题的一种非常幼稚的解决方案,如果您知道单词标签,则可以尝试将带有标签的单词存储在数据库中:

run:
   NN:  runner
   VBG: running
   VBZ: runs

然后,给定词干“run”和标签“NN”,您可以确定“runner”是该上下文中最可能出现的单词。当然,该解决方案远非完美。值得注意的是,您需要处理一个事实,即在不同的上下文中相同的单词形式可能会被不同地标记。但是请记住,解决这个问题的任何尝试最多只能是一个近似值。

编辑:从下面的评论中,您似乎可能想使用lemmatization而不是词干。这是使用Stanford Core NLP tools获取单词词缀的方法:
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);
    }
}

关于java - 阻止词干的反向过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9481081/

10-11 23:02
查看更多