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

(我的脑子现在在旋转:))

4

8 回答 8

7

我认为您正在寻找“词干算法”。

Martin Porter 的方法在语言学家中广为人知。Porter 词干分析器基本上是一种词缀剥离算法,结合了一些针对那些特殊情况的替换规则。

大多数词干分析器提供的词干在语言上是“不正确的”。例如:“beautiful”和“beauty”都可以产生词干“beauti”,当然,这不是一个真实的词。不过,如果您使用这些词干来改进信息检索系统中的搜索结果,这并不重要。例如, Lucene支持 Porter 词干分析器。

Porter 还设计了一种用于开发词干分析器的简单编程语言,称为 Snowball。

Snowball 中还提供德语词干分析器。从 Snowball 源生成的 AC 版本也可在网站上找到,并附有算法的纯文本说明。

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

如果您正在查找一个单词的相应词干,就像您在字典中找到的那样,以及有关词性的信息,您应该在 Google 上搜索“词形还原”。

于 2009-03-25T11:11:19.183 回答
5

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

可在http://www.danielnaber.de/morphologie/上以单词列表的形式获得此数据。它可以与分词器库(如 jwordsplitter)结合使用,以覆盖不在列表中的复合名词。

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

于 2012-11-28T22:57:04.953 回答
3

您前段时间问过这个问题,但您仍然可以尝试使用morphisto

这是一个关于如何在 Ubuntu 中执行此操作的示例:

  1. 安装 Stuttgart 有限状态传感器工具

    $ sudo apt-get install sfst

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

  3. 压缩它,例如

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

  4. 用它!这里有些例子:

    $ 回声 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>$

    $ 回声齿轮 | fst-proc morphisto-02022011.ac ^gearbeitet/arbeiten<+ADJ>/arbeiten<+ADJ>/arbeiten<+V>$

于 2011-06-25T23:26:58.877 回答
3

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

于 2014-02-21T12:50:51.303 回答
2

我认为没有字典就无法做到这一点。

基于规则的方法总是会遇到诸如

gegessen ->
埃森 gegangen -> angen

(注意不会说德语的人:第二种情况下的正确解决方案是“gehen”)。

于 2009-03-25T10:05:40.870 回答
1

看看狮子座。他们提供你所追求的数据,也许它会给你一些想法。

于 2009-03-25T10:19:57.467 回答
1

可以将morphisto与 ParZu ( https://github.com/rsennrich/parzu ) 一起使用。ParZu 是德语的依赖解析器。

这意味着 ParZu 也消除了 morphisto 的输出歧义

于 2012-02-13T14:36:27.180 回答
1

有一些工具可以像变形一样使用。Matetools、Morphisto 等中的组件。但痛苦是将它们集成到您的工具链中。DKpro ( https://dkpro.github.io/dkpro-core/ ) 是一个使用 UIMA 的框架,对很多这些语言工具进行了很好的封装。它允许您使用来自不同资源的不同语言工具编写自己的预处理管道,这些工具都会自动下载到您的计算机上并相互对话。您可以使用 Java 或 Groovy 甚至 Jython 来使用它。DKPro 让您可以轻松访问两个形态分析器,MateMorphTagger 和 SfstAnnotator。

你不想使用像 Porter 这样的词干分析器,它会以一种在语言上没有任何意义并且没有你描述的行为的方式来减少单词形式。如果你只想找到基本形式,动词是不定式,名词是单数主格,那么你应该使用词形还原器。您可以在此处找到德语词形还原器列表。Treetagger被广泛使用。您还可以使用 SMORS 等形态分析仪提供的更复杂的分析。它会给你这样的东西(来自SMORS网站的例子):

这里是对“unübersetzbarstes”的分析,显示前缀、后缀和>渐变:un<PREF>übersetzen<V>bar<SUFF><+ADJ><Sup><Neut><Nom><Sg><St>

于 2014-10-24T20:54:43.347 回答