2009-03-25 12 views
8

Szukam biblioteki, która może wykonać analizę morfologiczną słów niemieckich, tzn. Przekształca dowolne słowo w jego formę podstawową i dostarcza meta informacji o analizowanym słowie.Czy istnieje bezpłatna biblioteka do analizy morfologicznej języka niemieckiego?

Na przykład:

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

Moja lista życzeń:

  • To musi działać z obu rzeczowników i czasowników.
  • Jestem świadomy, że jest to bardzo trudne zadanie ze względu na złożoność języka niemieckiego, więc szukam również bibliotek, które zapewniają tylko przybliżenia lub mogą być tylko w 80% dokładne.
  • Wolałbym biblioteki, które nie działają ze słownikami, ale znowu jestem otwarty na kompromis, biorąc pod uwagę okoliczności.
  • Wolałabym także biblioteki C/C++/Delphi dla systemu Windows, ponieważ to ułatwiłoby integrację, ale także .NET, Java, ....
  • To musi być bezpłatna biblioteka. (L) GPL, MPL, ...

EDIT: Zdaję sobie sprawę, że nie ma sposobu, aby przeprowadzić analizę morfologiczną bez słownika w ogóle, z powodu nieregularnych słów. Kiedy mówię, wolę bibliotekę bez słownika mam na myśli te pełnowartościowy słowniki który mapować każdy i każde słowo:

arbeite -> arbeiten 
arbeitest -> arbeiten 
arbeitet -> arbeiten 
arbeitete -> arbeiten 
arbeitetest -> arbeiten 
arbeiteten -> arbeiten 
arbeitetet -> arbeiten 
gearbeitet -> arbeiten 
arbeite -> arbeiten 
... 

słowniki te mają kilka wad, w tym ogromnych rozmiarów i niezdolność do przetworzenia nieznanych słów.

Oczywiście wszystkie wyjątki mogą być obsługiwane tylko ze słownikiem:

esse -> essen 
isst -> essen 
eßt -> essen 
aß -> essen 
aßt -> essen 
aßen -> essen 
... 

(Mój umysł wiruje teraz :))

Odpowiedz

7

Myślę, że szukasz "algorytmu wynikowego".

Podejście Martina Portera jest dobrze znane wśród językoznawców. Łamacz porterów jest w zasadzie algorytmem usuwania pasków, połączonym z kilkoma regułami zastępowania tych specjalnych przypadków.

Większość hederów dostarcza łodygi, które są językowo "niepoprawne". Na przykład: zarówno "piękne", jak i "piękno" mogą doprowadzić do łodygi "beauti", co oczywiście nie jest prawdziwym słowem.Nie ma to jednak znaczenia, jeśli używasz tych rdzeni do poprawy wyników wyszukiwania w systemach wyszukiwania informacji. Lucene jest dostarczany z obsługą trzpienia Porter, na przykład.

Porter opracował również prosty język programowania do opracowywania produktów macierzystych, zwany Snowball.

W Snowball dostępne są również programy do nauki języka niemieckiego. Wersja C, wygenerowana ze źródła Snowball, jest również dostępna na stronie internetowej wraz z wyjaśnieniem algorytmu w postaci zwykłego tekstu.

Oto niemiecki stemmer w Snowball: http://snowball.tartarus.org/algorithms/german/stemmer.html

Jeśli szukasz odpowiedniego trzpienia wyrazu jak można go znaleźć w słowniku, wraz z informacjami na temat części mowy, należy Google dla "lematyzacja".

2

nie sądzę, że można to zrobić bez słownika . Podejścia

Zasady oparte będzie niezmiennie potknąć rzeczy jak

gegessen -> Essen
gegangen -> angen

(uwaga dla ludzi, którzy nie mówią po niemiecku: właściwe rozwiązanie w drugim przypadku jest "gehen").

+0

Jesteś częściowo rację, aktualizowane na moje pytanie. –

1

Spójrz na Leo. Oferują dane, o które prosisz, może dają pewne pomysły.

3

Pytałeś to jakiś czas temu, ale możesz spróbować jeszcze raz z morphisto.

Oto przykład, w jaki sposób to zrobić w Ubuntu:

  1. zainstalować Stuttgart skończenie stanowych narzędzia przetwornik

    $ sudo apt-get install sfst

  2. Pobierz morfologię morphisto np morfisto-02022011.a

  3. Kompaktuj, np.

    $ FST-kompaktowy morphisto-02022011.a morphisto-02022011.ac

  4. Użyj go! Oto kilka przykładów:

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

5

(Zastrzeżenie: jestem łącząc własne projekty Open Source tutaj)

tych danych w formie listy słów jest dostępny na http://www.danielnaber.de/morphologie/. Można go połączyć z biblioteką spliterów słów (np. Jwordsplitter), aby objąć rzeczowniki złożone niewymienione na liście.

Lub po prostu użyj LanguageTool from Java, który ma listę słów osadzoną w postaci zwartej skończonej maszyny stanowej (plus obejmuje również dzielenie złożone).

+2

Dziękujemy za zamieszczenie odpowiedzi! Pamiętaj, aby uważnie przeczytać [FAQ na temat autopromocji] (http://stackoverflow.com/faq#promotion). Należy również pamiętać, że * wymagane * jest to, że publikujesz zrzeczenie się za każdym razem, gdy łączysz się z własną witryną/produktem. –

3

Spójrz na LemmaGen (http://lemmatise.ijs.si/), który jest projektem, który ma na celu zapewnienie ustandaryzowanej wielojęzycznej platformy o otwartym kodzie źródłowym do lemmatyzacji. Robi dokładnie to, co chcesz.

1

Istnieje kilka narzędzi, które można użyć, jak morph. składnik w Matetools, Morphisto itp. Ale ból polega na zintegrowaniu ich w łańcuchu narzędzi. Bardzo dobrym sposobem na ominięcie wielu narzędzi językowych jest DKpro (https://dkpro.github.io/dkpro-core/), framework wykorzystujący UIMA. Pozwala na tworzenie własnych preprocesorów przy użyciu różnych narzędzi lingwistycznych z różnych zasobów, które są automatycznie pobierane na komputer i komunikują się ze sobą. Możesz użyć Javy lub Groovy, a nawet Jython, aby z niego korzystać. DKPro zapewnia łatwy dostęp do dwóch analizatorów morfologicznych, MateMorphTagger i SfstAnnotator.

Nie chcesz używać łopatki, takiej jak Porter, zredukuje to słowo w sposób, który nie ma żadnego sensu językowego i nie ma zachowania, które opisujesz. Jeśli chcesz tylko znaleźć podstawową formę, dla czasownika, który byłby bezokolicznikiem, a dla rzeczownika mianownika liczby pojedynczej, powinieneś użyć lematyzatora. Możesz znaleźć listę niemieckich lemmatizers here. Treetagger jest szeroko stosowany. Możesz także użyć bardziej złożonej analizy dostarczonej przez analizator morfologiczny, taki jak SMORS. To daje coś takiego (przykład ze strony internetowej SMORS):

I tu jest analiza "unübersetzbarstes" Pokazywanie prefixation, suffixation oraz> gradacji: un < PFRN> übersetzen < V> bar < SUFF > < + ADJ> < sup> < Neut> < Nom> < Sg> < St>

Powiązane problemy