检测同根词

detect words with the same root

我目前正在为 Java 中的 pdf 文件开发一个自动化的 索引生成器 。这个概念非常简单(现在):我遍历 pdf 中的每个单词,与忽略列表(类似于该语言中 10000 个最常见的单词)进行比较,然后将其添加到 com.google.common.collect.HashMultimap 中作为 String 和页面的 HashSet,单词出现在。

这工作得很好,但我仍然在索引中将所有不同的 declination/conjugation 形式的单词作为单独的项目。我正在考虑只比较这些词的相对子字符串,但是例如在德语(该程序旨在用于)及其所有不规则性中,这种方法的好处非常小。

还有其他想法、库、正则表达式吗? 提前致谢

您可以从 http://danielnaber.de/morphologie/. This is also what e.g. LanguageTool uses internally for its analysis 获取德语的词形变化数据。 (披露:在此处链接我自己的项目)

将单词简化为其共同词根的过程称为词形还原。词形还原器会将 eateneatsate 之类的词映射到 eat

我没有使用德语的经验,但是执行此任务的不同库可用于英语,例如 Stanford CoreNLP,它是一个成熟的 NLP 库,还提供许多其他功能。它可能也支持德语,但我不确定。

否则,Google 搜索 "German lemmatizer" 将提供足够的结果,我认为。

您还可以使用词干分析器,它是词形还原的更简单版本。词干提取器通常是一个基于规则的组件,能够将单词缩减为它们的共同词根,但输出单词并不总是有效:例如,单词 engine 可能会被提取为 engin。如果您要求单词在此操作后仍然有效,词形还原将是更好的解决方案,否则词干提取可能会更好,因为它执行起来更快。