我正在寻找一个可以对德语单词进行形态分析的库,即它将任何单词转换为其根形式并提供有关所分析单词的元信息。
例如:
gegessen -> essen
wurde [...] gefasst -> fassen
Häuser -> Haus
Hunde -> Hund
我的愿望清单:
编辑:我知道没有任何字典就无法进行形态分析,因为字数不规则。 当我说,我更喜欢没有字典的图书馆,我的意思是那些完整的字典,它们映射每一个字:
arbeite -> arbeiten
arbeitest -> arbeiten
arbeitet -> arbeiten
arbeitete -> arbeiten
arbeitetest -> arbeiten
arbeiteten -> arbeiten
arbeitetet -> arbeiten
gearbeitet -> arbeiten
arbeite -> arbeiten
...
这些词典有几个缺点,包括巨大的尺寸和无法处理未知单词。
当然,所有例外只能用字典处理:
esse -> essen
isst -> essen
eßt -> essen
aß -> essen
aßt -> essen
aßen -> essen
...
(我的思绪现在正在旋转:))
答案 0 :(得分:7)
我认为你正在寻找一种“干扰算法”。
Martin Porter的方法在语言学家中是众所周知的。 Porter词干分析器基本上是一个词缀剥离算法,结合了一些特殊情况的替换规则。
大多数词干分析者提供语言上“不正确”的词根。例如:“美丽”和“美丽”都会导致词干“美化”,当然,这不是一个真正的词。但是,如果您使用这些词干来改进信息检索系统中的搜索结果,则无关紧要。例如,Lucene支持Porter词干分析器。
Porter还设计了一种用于开发词干分析器的简单编程语言,称为Snowball。
Snowball还提供德语词干分析器。网站上还提供了从Snowball源生成的C版本,以及该算法的纯文本说明。
以下是Snowball中的德国词干分析师:http://snowball.tartarus.org/algorithms/german/stemmer.html
如果你正在寻找一个词的相应词干,就像你在词典中找到的那样,以及词性的信息,你应该谷歌“词典化”。
答案 1 :(得分:5)
(免责声明:我在这里链接我自己的开源项目)
http://www.danielnaber.de/morphologie/提供了以单词列表形式提供的数据。它可以与分词器库(如jwordsplitter)结合使用,以涵盖列表中不存在的复合名词。
或者只使用LanguageTool from Java,其中单词列表以紧凑型有限状态机的形式嵌入(加上它还包括复合分割)。
答案 2 :(得分:3)
你刚才问过这个问题,但你仍然可以试一试morphisto。
以下是如何在Ubuntu中执行此操作的示例:
安装斯图加特有限状态传感器工具
$ sudo apt-get install sfst
下载morphisto形态,例如: morphisto-02022011.a
压缩它,例如
$ fst-compact morphisto-02022011.a morphisto-02022011.ac
使用它!以下是一些例子:
$ echo Hochzeit | fst-proc morphisto-02022011.ac ^ Hochzeit / hohZeit 1 + NN> / hohZeit 1 + NN> / hohZeit 1 + NN> / hohZeit 1 + NN> / HochZeit 1 + NN> / HochZeit 1 + NN> / HochZeit 1 + NN> / HochZeit 1 + NN> / Hochzeit 1 + NN> / Hochzeit 1 + NN> / Hochzeit 1 + NN> / Hochzeit 1 + NN> $
$ echo gearbeitet | fst-proc morphisto-02022011.ac ^ gearbeitet / arbeiten 1 + ADJ> / arbeiten 1 + ADJ> / arbeiten 1 + V> $
答案 3 :(得分:3)
了解LemmaGen(http://lemmatise.ijs.si/),这是一个旨在为lemmatisation提供标准化开源多语言平台的项目。它正在做你想要的。
答案 4 :(得分:2)
我认为没有字典就可以做到这一点。
基于规则的方法总会绊倒像
这样的事情gegessen - >埃森
gegangen - > angen
(请注意不会说德语的人:第二种情况下的正确解决方案是“gehen”)。
答案 5 :(得分:1)
看看Leo。 他们提供您所追求的数据,也许它会为您提供一些想法。
答案 6 :(得分:1)
可以使用morphisto与ParZu(https://github.com/rsennrich/parzu)。 ParZu是德语的依赖解析器。
这意味着ParZu也消除了morphisto输出的歧义
答案 7 :(得分:1)
你可以使用一些工具,如变形。 Matetools,Morphisto等中的组件。但痛苦在于将它们集成到您的工具链中。围绕这些语言工具的一个非常好的包装是DKpro(https://dkpro.github.io/dkpro-core/),一个使用UIMA的框架。它允许您使用来自不同资源的不同语言工具编写自己的预处理管道,这些工具都会自动下载到您的计算机上并相互通信。您可以使用Java或Groovy甚至Jython来使用它。 DKPro使您可以轻松访问两个形态分析仪,MateMorphTagger和SfstAnnotator。
你不想使用像Porter这样的词干分析器,它会以一种语言上没有任何意义并且没有你描述的行为的方式减少单词形式。如果你只想找到基本形式,对于一个动词是不定式,对于一个名词是主格单数,那么你应该使用一个词形变换器。你可以找到德国引理词here的列表。 Treetagger被广泛使用。您还可以使用由SMORS等形态分析器提供的更复杂的分析。它会给你这样的东西(来自SMORS网站的例子):
以下是对“unübersetzbarstes”的分析,显示前缀,后缀和>渐变: 未< PREF>übersetzen< V>巴≤; SUFF> 1 + ADJ><燮>< NEUT><喃>< SG><映异构体: