德语词形分析的免费库是否存在?

8
我希望您能够为我推荐一款能够对德语单词进行形态分析的库,即将任何单词转换为其根形式,并提供有关分析单词的元信息。
例如:
gegessen -> essen
wurde [...] gefasst -> fassen
Häuser -> Haus
Hunde -> Hund

我的愿望清单:

  • 它必须适用于名词和动词。
  • 我知道这是一个非常困难的任务,考虑到德语的复杂性,因此我也在寻找提供近似或可能只有80%准确性的库。
  • 我更喜欢不使用字典的库,但考虑到情况,我也可以做出妥协。
  • 我也更喜欢C/C++/Delphi Windows库,因为这样更容易集成,但.NET、Java等也可以。
  • 它必须是免费的库。 (L)GPL, MPL, ...

编辑:我知道没有办法在没有任何字典的情况下进行形态分析,因为存在不规则单词。 当我说我更喜欢没有字典的库时,我指的是那些完整的字典,它们映射每个单词:

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
...

(我现在头脑转得飞快 :))

8个回答

7
我认为您正在寻找“词干算法”。
在语言学家中,马丁·波特的方法很有名。波特词干提取器基本上是一个削减前缀和一些特殊情况下的替换规则的算法。
大多数词干提取器生成的词干在语言上是“不正确”的。例如:“beautiful”和“beauty”都可以得到词干“beauti”,当然这不是一个真正的单词。但是,如果您使用这些词干来改善信息检索系统中的搜索结果,则无关紧要。例如Lucene就支持波特词干提取器。
波特还发明了一种简单的编程语言Snowball用于开发词干提取器。
Snowball也提供了德语词干提取器。该网站上还提供了从Snowball源代码生成的C版本,以及该算法的纯文本说明。
以下是Snowball中的德语词干提取器:http://snowball.tartarus.org/algorithms/german/stemmer.html

如果您正在寻找与字典中相应的词干以及该词性的信息,那么您应该搜索"词形归并"。


5

(免责声明:我在这里链接了自己的开源项目)

这个单词列表数据可以在 http://www.danielnaber.de/morphologie/ 上获得。它可以与一个词分割库(比如jwordsplitter)结合使用,以覆盖列表中没有的复合名词。

或者直接使用Java的LanguageTool,它嵌入了单词列表形式的紧凑有限状态机(还包括复合词拆分)。


2
感谢您发布答案!请务必仔细阅读有关自我推广的FAQ。还请注意,每次链接到您自己的网站/产品时,必须发布免责声明。 - Andrew Barber

3

虽然你之前问过这个问题,但你可以尝试使用morphisto

以下是在Ubuntu中使用的示例:

  1. 安装斯图加特有限状态转换器工具

    $ sudo apt-get install sfst

  2. 下载morphisto形态学,例如morphisto-02022011.a

  3. 压缩它,例如

    $ fst-compact morphisto-02022011.a morphisto-02022011.ac

  4. 使用它!以下是一些示例:

    $ echo Hochzeit | fst-proc morphisto-02022011.ac ^Hochzeit/hohZeit<+NN>/hohZeit<+NN>/hohZeit<+NN>/hohZeit<+NN>/HochZeit<+NN>/HochZeit<+NN>/HochZeit<+NN>/HochZeit<+NN>/Hochzeit<+NN>/Hochzeit<+NN>/Hochzeit<+NN>/Hochzeit<+NN>$

    $ echo gearbeitet | fst-proc morphisto-02022011.ac ^gearbeitet/arbeiten<+ADJ>/arbeiten<+ADJ>/arbeiten<+V>$


3
请查看LemmaGen项目 (http://lemmatise.ijs.si/),它旨在提供标准化的开源多语种词形还原平台。它恰好符合您的需求。

2

我认为没有字典是无法完成这个任务的。

基于规则的方法总会在类似以下情况下出现问题:

gegessen -> essen
gegangen -> angen

(注:对于不会德语的人来说,第二种情况的正确解决方案是 "gehen")。


1

有一些类似于Matetools、Morphisto等的工具可供使用,如morph.组件。但是将它们集成到您的工具链中是非常繁琐的。一个非常好的包装器可以囊括大量这些语言工具,即DKpro(https://dkpro.github.io/dkpro-core/),这是一个使用UIMA框架的工具。它允许您编写自己的预处理流水线,使用来自不同资源的不同语言工具,这些工具都会自动下载到计算机并互相通信。您可以使用Java或Groovy甚至Jython来使用它。DKPro为您提供了方便的访问两个形态分析器:MateMorphTagger和SfstAnnotator。

你不想使用像Porter这样的词干提取器,它会以一种在语言学上没有任何意义且不具有所描述行为的方式减少单词形式。如果你只想找到基本形式,对于动词来说是不定式,对于名词来说是主格单数,那么你应该使用一个词形还原器。你可以在这里找到德语词形还原器列表here。Treetagger被广泛使用。你也可以使用由形态分析器(如SMORS)提供的更复杂的分析。它将给出类似于以下内容的结果(来自SMORS网站的示例):

1

看一下Leo。 他们提供了你需要的数据,也许能给你一些想法。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接