Есть ли инструмент для разделения немецких составных слов в java?

Я успешно разбиваю предложения на слова с помощью StringTokenizer.

Есть ли инструмент, который может разбивать составные слова, такие как Projektüberwachung, на их части Projekt и überwachung или даже более длинные?

Причина разделения составных слов заключается в том, что я хочу сделать извлечение текста. Я хочу преобразовать такие фразы, как эти Projektplanung und -überwachung, в две части Projektplanung и Projektüberwachung. И разбиение сложного слова — мой первый шаг.


person Martin Schlagnitweit    schedule 27.08.2011    source источник
comment
Это кажется довольно сложной задачей, потому что нужно знать, что Projekt и planung — это два допустимых слова, которые объединены в одно слово. Без словаря невозможно узнать, что проектное планирование можно разделить и что оно должно быть разделено на проект и планирование. Это вполне может быть Proj-ekt-plan-ung. И даже со словарем, я думаю, можно найти некоторые слова, которые являются конкатенацией двух других слов, но не могут быть разделены. В английском языке, например, я бы не считал воскресенье составным словом, образованным от солнца и дня.   -  person JB Nizet    schedule 27.08.2011


Ответы (3)


JWordSplitter

Случайно увидел это на Synaptic этим утром. Вот описание с сайта:

«jWordSplitter — это небольшая библиотека Java, которая разбивает составные слова на их части. Это особенно полезно для таких языков, как немецкий, где можно образовать бесконечное количество новых слов, просто добавляя существительные («Donaudampfschifffahrtskapitän»)».

Использование так же просто, как это:

String word = "Donaudampfschifffahrtskapitän";
AbstractWordSplitter splitter = new GermanWordSplitter();
Collection<String> splittedWords = splitter.splitWord(word);

К сожалению, в разделе загрузок нет готовой библиотеки, но ее легко собрать. Вот краткое описание того, как это сделать за три простых шага.

  1. Проверьте исходники через SVN:

    svn co https://jwordsplitter.svn.sourceforge.net/svnroot/jwordsplitter/trunk jwordsplitter

  2. Откройте проект Maven, например. в Netbeans

  3. Соберите библиотеку, включающую словарь (jwordsplitter-3.2.jar, 300 КБ)

person DBoroujerdi    schedule 27.08.2011

Мне всегда очень не нравился тип переноса в вашем примере: Projektplanung und -überwachung. :-( Итак, хотя я согласен с Дж. Б. Низе, что без списка или словаря простых несоставных существительных невозможно узнать, может быть, есть способ сделать разумное предположение, в По крайней мере немецкий. Давайте воссоединим Projekt и -überwachung!

Вы можете создать список кластеров согласных и отметить, где эти кластеры делятся. например ктпл в первом слове пары будет делиться так: кт-пл. Geschwindigkeitsbegrenzung имеет tsb, которое делит ts-b. Я не продумал это до конца - и могут потребоваться дополнительные метаданные.

Алгоритм найдет наиболее «центрально расположенный» кластер согласных в слове. Например. он будет игнорировать «schw», «nd», «gr» и «nz» и искать «tsb» в Geschwindigkeitsbegrenzung.

person Tim    schedule 27.08.2011

Lucene имеет фильтр токенов , который может разлагать сложные слова. Возможно, это может удовлетворить ваши потребности?

person Kai Sternad    schedule 27.08.2011