Есть ли бесплатная библиотека для морфологического анализа немецкого языка?

Я ищу библиотеку, которая может выполнять морфологический анализ немецких слов, т. е. она преобразует любое слово в его корневую форму и предоставляет метаинформацию об анализируемом слове.

например:

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

мой список пожеланий:

  • он должен работать как с существительными, так и с глаголами.
  • Я знаю, что это очень сложная задача, учитывая сложность немецкого языка, поэтому я также ищу библиотеки, которые предоставляют только приближения или могут быть только 80% точными.
  • Я бы предпочел библиотеки, которые не работают со словарями, но снова я открыт для компромисса, учитывая cirumstances.
  • я также предпочел бы библиотеки Windows C / C++ / Delphi, потому что это облегчило бы их интеграцию, но .NET, Java,... тоже сделаю.
  • это должна быть бесплатная библиотека. L) GPL, MPL,...

EDIT: я знаю, что нет способа выполнить морфологическое анализ вообще без словаря, из-за неправильных слов. Когда я говорю, что предпочитаю библиотеку без словаря, я имею в виду те полномасштабные словари, которые отображают каждое слово:

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 ответов


Я думаю, вы ищете "алгоритм stemming".

подход Мартина Портера хорошо известен среди лингвистов. Стеммер Портера-это в основном алгоритм зачистки аффикса в сочетании с несколькими правилами подстановки для этих особых случаев.

большинство стеблей доставляют стебли, которые лингвистически "неверны". Например: и "красивый", и "красота" могут привести к стеблю "beauti", что, конечно, не является реальным словом. Это не имеет значения, если ты использование этих стеблей для улучшения результатов поиска в информационно-поисковых системах. введение поставляется с поддержкой Porter stemmer, например.

Портер также разработал простой язык программирования для разработки модули, называемый снежок.

есть также стеммеры для немецкого языка, доступные в Snowball. Версия C, сгенерированная из источника Snowball, также доступна на веб-сайте вместе с текстовым объяснением алгоритм.

вот немецкий стеммер в Снежке:http://snowball.tartarus.org/algorithms/german/stemmer.html

Если вы ищете соответствующий стержень слова, как вы нашли бы его в словаре, наряду с информацией о части речи, вы должны Google для "лемматизации".


(отказ от ответственности: я связываю свои собственные проекты с открытым исходным кодом здесь)

эти данные в виде списка слов доступна на http://www.danielnaber.de/morphologie/. Он может быть совмещен с библиотекой слово сплиттер (как jwordsplitter) для покрытия сложных существительных не в списке.

или просто использовать LanguageTool из Java, который имеет список слов, встроенный в виде компактной машины конечного состояния (плюс он также включает соединение расщепление.)


вы спросили это некоторое время назад, но вы все равно можете попробовать с morphisto.

вот пример того, как это сделать в Ubuntu:

  1. установите штутгартский конечный преобразователь tools

    $ sudo apt-get install sfst

  2. загрузите морфологию morphisto, например morphisto-02022011.а

  3. компактный он, например,

    $ FST-compact morphisto-02022011.ля morphisto-02022011.переменного тока

  4. использовать его! Вот несколько примеров:

    $ echo Hochzeit / fst-proc morphisto-02022011.ac ^Hochzeit/hohZeit/hohZeit/hohZeit/hohZeit/HochZeit/HochZeit/HochZeit/HochZeit/Hochzeit/Hochzeit/Hochzeit/Hochzeit$

    $ echo gearbeitet | FST-proc morphisto-02022011.ac ^gearbeitet / arbeiten / arbeiten / arbeiten$


посмотреть в LemmaGen (http://lemmatise.ijs.si/), который является проектом, который направлен на предоставление стандартизированных открытых мультиязычный платформа источником для lemmatisation. Он делает именно то, что вы хотите.


Я не думаю, что это можно сделать без словаря.

основанные на правилах подходы всегда будут спотыкаться о такие вещи, как

gegessen -> Эссен
gegangen - > angen

(обратите внимание на людей, которые не говорят по-немецки: правильное решение во втором случае - "gehen").


посмотреть Лев. Они предлагают данные, которые вы ищете, возможно, это дает вам некоторые идеи.


можно использовать morphisto С ParZu (https://github.com/rsennrich/parzu). ParZu-это синтаксический анализатор зависимостей для Германии.

Это означает, что ParZu также устраняет неоднозначность вывода из morphisto


есть некоторые инструменты, которые вы можете использовать, как морфинг. компонент в Matetools, Morphisto etc. Но боль в том, чтобы интегрировать их в цепочку инструментов. Очень хорошая обертка вокруг довольно многих из этих лингвистических инструментов-DKpro (https://dkpro.github.io/dkpro-core/), фреймворк с использованием UIMA. Это позволяет вам написать свой собственный конвейер предварительной обработки, используя различные лингвистические инструменты из разных ресурсов, которые автоматически загружаются на ваш компьютер и говорить друг с другом. Вы можете использовать Java или Groovy или даже Jython для его использования. DKPro обеспечивает легкий доступ к двум морфологическим анализаторам, MateMorphTagger и SfstAnnotator.

вы не хотите использовать стеммер, как Портер, он уменьшит форму слова таким образом, который не имеет никакого смысла лингвистически и не имеет поведения, которое вы описываете. Если вы только хотите найти основную форму, для глагола, который был бы инфинитивом, и для существительного именительного единственного числа, то вы следует использовать лемматизатор. Вы можете найти список немецких лемматизаторов здесь. Treetagger широко используется. Вы также можете использовать более сложные анализа морфологического анализатора, как SMORS. Это даст вам что-то вроде этого (пример из SMORS сайт):

и вот анализ "unübersetzbarstes", показывающий префикс, суффиксацию и > градацию: un übersetzen bar