English 中文(简体)
有免费的德语形态分析图书馆吗?
原标题:
  • 时间:2009-03-25 09:51:57
  •  标签:

我正在寻找一个可以对德语单词进行词形分析的图书馆,即将任何单词转换为其词根形式并提供有关分析单词的元信息。

例如:

gegessen -> essen
wurde [...] gefasst -> fassen
Häuser -> Haus
Hunde -> Hund

我的愿望清单:

  • It has to work with both nouns and verbs.
  • I m aware that this is a very hard task given the complexity of the German language, so I m also looking for libaries which provide only approximations or may only be 80% accurate.
  • I d prefer libraries which don t work with dictionaries, but again I m open to compromise given the cirumstances.
  • I d also prefer C/C++/Delphi Windows libraries, because that would make them easier to integrate but .NET, Java, ... will also do.
  • It has to be a free library. (L)GPL, MPL, ...

EDIT: I m aware that there is no way to perform a morphological analysis without any dictionary at all, because of the irregular words. When I say, I prefer a library without a dictionary I mean those full blown dictionaries which map each and every word:

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

我的脑袋现在转得飞快 :)

最佳回答

我认为您在寻找一种“词干提取算法”。

马丁·波特的方法在语言学家中非常著名。波特词干提取器基本上是一个去除词缀的算法,再加上一些针对特殊情况的替换规则。

大多数词干器提供的词干在语言上都是“不正确”的。例如,单词“beautiful”和“beauty”都可以变成词干“beauti”,当然,这不是真正的单词。然而,如果您使用这些词干来改进信息检索系统中的搜索结果,那么这就不重要了。例如,Lucene支持Porter词干器。

波特还设计了一种简单的编程语言Snowball,用于开发词干提取器。

在 Snowball 中也有德语的词干器。还有一个由 Snowball 源代码生成的 C 版本也可以在网站上找到,以及该算法的纯文本解释。

这是Snowball中的德语词干提取器: http://snowball.tartarus.org/algorithms/german/stemmer.html

如果您正在寻找与字典中相应的词干以及有关词性的信息,则应搜索“词形还原”。

问题回答

免责声明:我在此处链接了自己的开源项目。

这个以词汇表形式呈现的数据可在http://www.danielnaber.de/morphologie/上获取。结合词汇分离库(比如jwordsplitter)可覆盖未在列表中的复合名词。

或者只需使用Java中的LanguageTool,其中单词列表嵌入了一个紧凑的有限状态机形式(此外它还包括复合拆分)。

你之前问过这个问题,但你可以试试morphisto

这里有一个在Ubuntu上如何做的示例:

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

    $ sudo apt-get安装sfst

  2. 下载 Morphisto 形态学文件,例如 morphisto-02022011.a。

  3. 压缩它,例如

    $ fst-compact morphisto-02022011.a morphisto-02022011.ac $ fst-压缩 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>$

看一下LemmaGen(http://lemmatise.ijs.si/),它是一个旨在提供标准化开源多语言词形还原平台的项目。它正是你想要的。

我认为这不能在没有字典的情况下完成。

基于规则的方法往往会被事物所绊倒,例如:

gegessen -> essen
gegangen -> angen

(对不会讲德语的人们的注释:第二种情况的正确解决方案是“gehen”。)

Have a look at Leo. They offer the data which you are after, maybe it gives you some ideas.

可以使用morphisto与ParZu一起(https://github.com/rsennrich/parzu)。ParZu是一种用于德语的依存句法分析器。

这意味着ParZu也可以消除morphisto的输出歧义。

有一些工具可以使用,例如Matetools和Morphisto中的morph组件等。但疼点在于将它们集成到您的工具链中。一个非常好的封装这些语言工具的框架是DKpro(https://dkpro.github.io/dkpro-core/),它使用UIMA。它允许您编写自己的预处理管道,使用来自不同资源的不同语言工具,这些工具都将自动下载到您的计算机并相互交流。您可以使用Java、Groovy甚至Jython来使用它。DKPro为您提供了轻松访问两个形态分析器,MateMorphTagger和SfstAnnotator。

你不想使用Porter这样的词干提取器,因为它将以一种在语言上没有意义且不符合你所描述的行为方式来减少单词形式。如果你只想找到基本形式,对于一个动词来说就是不定式,对于一个名词来说就是主格单数,那么你应该使用词形归并器。你可以在这里找到德语词形归并器列表。Treetagger得到了广泛使用。你也可以使用形态分析器(例如SMORS)提供的更复杂的分析。它会给你类似于SMORS网站上的这个例子:

And here is the analysis of "unübersetzbarstes" showing prefixation, suffixation and >gradation: un<PREF>übersetzen<V>bar<SUFF><+ADJ><Sup><Neut><Nom><Sg><St>





相关问题
热门标签