Java 检测具有相同词根的单词
我目前正在为Java中的pdf文件开发一个自动化的索引生成器。这个概念非常简单(现在):我迭代pdf中的每个单词,与忽略列表(类似于该语言中最常见的10000个单词)进行比较,然后将其添加到Java 检测具有相同词根的单词,java,regex,nlp,similarity,linguistics,Java,Regex,Nlp,Similarity,Linguistics,我目前正在为Java中的pdf文件开发一个自动化的索引生成器。这个概念非常简单(现在):我迭代pdf中的每个单词,与忽略列表(类似于该语言中最常见的10000个单词)进行比较,然后将其添加到com.google.common.collect.HashMultimap中,单词作为字符串和一组页面哈希集出现在 这是相当好的工作,但我仍然得到了所有不同的倾斜/共轭形式的单词作为索引中的单独项目。我只是想比较这些单词的相对子字符串,但例如,在德语(该程序的目的是)中,它的所有不规则性,这种方法的好处非常
com.google.common.collect.HashMultimap
中,单词作为字符串和一组页面哈希集出现在
这是相当好的工作,但我仍然得到了所有不同的倾斜/共轭形式的单词作为索引中的单独项目。我只是想比较这些单词的相对子字符串,但例如,在德语(该程序的目的是)中,它的所有不规则性,这种方法的好处非常少
还有其他想法,图书馆,正则表达式吗?
提前感谢您可以从中获取德语的拐点数据。这也是LanguageTool内部使用的功能。(披露:在这里链接我自己的项目)将单词简化为其共同词根的过程称为柠檬化。lemmatizer会将
eat
、eats
和ate
等单词映射到eat
我没有德语方面的经验,但可以使用不同的库来执行此任务,例如英语,这是一个成熟的NLP库,还提供了许多其他功能。它可能也支持德语,但我不确定
否则,我认为谷歌搜索“德国柠檬虫”将提供足够的结果
您还可以使用词干分析器,这是一个简单的柠檬化版本。词干分析器通常是一个基于规则的组件,能够将单词减少到其公共根,但输出单词并不总是有效的:例如,单词
engine
可能作为engine
词干。如果您要求单词在此操作后仍然有效,那么柠檬化将是更好的解决方案,否则词干分析可能会更好,因为它执行起来更快。Lucene,在不同的变体中:和。使用轻词干分析器,后跟德国化的雪球。对于NLP任务,您应该搜索NLP库,其中包含该语言的数据和规则。要求人们为此构建一个正则表达式就像要求人们重新发明轮子并为你做研究。我不是要求一个正则表达式或任何预构建的解决方案,只是为了得到一个正确方向的提示。也许这在我的问题中还不清楚,对不起。但多亏了其他的回复,我会在今晚查看它们。我和斯坦福大学的CoreNLP一起玩过,至少在英文文本中,它还可以正常工作