Има ли инструмент за разделяне на немски сложни думи в java?

Успешно разделям изречения на думи с StringTokenizer.

Има ли инструмент, който може да разделя сложни думи като Projektüberwachung на техните части Projekt и überwachung или дори някои по-дълги?

Причината за разделянето на сложните думи е, че искам да направя извличане на текст. Искам да конвертирам фрази като тези Projektplanung und -überwachung в двете части Projektplanung и Projektüberwachung. И разделянето на сложната дума е първата ми стъпка.


person Martin Schlagnitweit    schedule 27.08.2011    source източник
comment
Това изглежда като доста трудно нещо за правене, защото трябва да се знае, че Projekt и planung са две валидни думи, които са свързани, за да образуват една дума. Без речник няма начин да разберете, че projektplanung може да бъде разделен и че трябва да бъде разделен на 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, 300kB)

person DBoroujerdi    schedule 27.08.2011

Винаги съм изпитвал голяма неприязън към типа сричкопренасяне във вашия пример: Projektplanung und -überwachung. :-( Въпреки че съм съгласен с JB Nizet, че без списък или речник на прости несъставни съществителни няма начин да се знае, може би има начин да направите интелигентно предположение, в Поне немски. Нека обединим отново Projekt и -überwachung!

Можете да създадете списък с групи съгласни и да отбележите къде се разделят тези групи. напр. ktpl в първата дума на двойката ще се раздели така: kt-pl. Geschwindigkeitsbegrenzung има tsb, което разделя ts-b. Не съм го обмислил докрай - и може да са необходими допълнителни метаданни.

Алгоритъмът ще намери най-"централно разположения" съгласен съгласен в думата. напр. ще игнорира 'schw' и 'nd' и 'gr' и 'nz' и ще търси 'tsb' в Geschwindigkeitsbegrenzung.

person Tim    schedule 27.08.2011

Lucene има филтър за токени, които могат да разлагат сложни думи. Може би това може да отговаря на вашите нужди?

person Kai Sternad    schedule 27.08.2011