2009-03-25 12 views
8

Sto cercando una libreria in grado di eseguire un'analisi morfologica su parole tedesche, cioè converte qualsiasi parola nella sua forma radice e fornendo meta informazioni sulla parola analizzata.Esiste una biblioteca gratuita per l'analisi morfologica della lingua tedesca?

Ad esempio:

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

La mia lista dei desideri:

  • Si deve lavorare con entrambi i sostantivi e verbi.
  • Sono consapevole che questo è un compito molto difficile data la complessità della lingua tedesca, quindi sono anche alla ricerca di librerie che forniscono solo approssimazioni o potrebbero essere solo accurate all'80%.
  • Preferisco le librerie che non funzionano con i dizionari, ma di nuovo sono aperto al compromesso date le circostanze.
  • Preferirei anche le librerie di Windows C/C++/Delphi, perché ciò li renderebbe più facili da integrare ma anche .NET, Java, ....
  • Deve essere una libreria libera. (L) GPL, MPL, ...

EDIT: Sono consapevole del fatto che non v'è alcun modo per eseguire un'analisi morfologica senza alcun dizionario a tutti, a causa delle parole irregolari. Quando dico, io preferisco una biblioteca senza un dizionario mi riferisco a quelle piene dizionari soffiati che mappano ogni parola:

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

Quei dizionari hanno diversi inconvenienti, tra cui la dimensione enorme e l'incapacità di elaborare parole sconosciute.

Naturalmente tutte le eccezioni possono essere gestite solo con un dizionario:

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

(La mia mente sta girando in questo momento :))

risposta

7

Penso che stiate cercando un "algoritmo di derivazione".

L'approccio di Martin Porter è ben noto tra i linguisti. Lo stemmer Porter è fondamentalmente un algoritmo di stripping affix, combinato con alcune regole di sostituzione per quei casi speciali.

La maggior parte degli steli forniscono gambi che sono linguisticamente "errati". Ad esempio: sia "bella" che "bellezza" possono risultare nella radice "beauti", che, ovviamente, non è una parola reale.Questo non importa, però, se stai usando quelle radici per migliorare i risultati di ricerca nei sistemi di recupero delle informazioni. Lucene viene fornito con supporto per lo stelo Porter, ad esempio.

Porter ha anche ideato un linguaggio di programmazione semplice per lo sviluppo di stemmer, chiamato Snowball.

Ci sono anche stemmer per il tedesco disponibili in Snowball. Una versione C, generata dal sorgente Snowball, è anche disponibile sul sito Web, insieme a una spiegazione in chiaro dell'algoritmo.

Ecco lo Stemmer tedesco in Snowball: http://snowball.tartarus.org/algorithms/german/stemmer.html

Se stai cercando per il corrispondente stelo di una parola come si farebbe trovare in un dizionario, insieme alle informazioni sulla parte del discorso, si dovrebbe Google per "lemmatizzazione".

2

Non credo che questo può essere fatto senza un dizionario . approcci basati su regole

invariabilmente inciampare cose come

gegessen -> Essen
gegangen -> Angen

(nota per le persone che non parlano tedesco: la soluzione giusta nel secondo caso è "gehen").

+0

sei in parte ragione, ho aggiornato la mia domanda. –

1

Dai un'occhiata allo Leo. Offrono i dati che stai cercando, forse ti dà qualche idea.

3

L'hai chiesto qualche tempo fa, ma potresti comunque provarlo con morphisto.

Ecco un esempio su come farlo in Ubuntu:

  1. Installare gli stati finiti strumenti trasduttore Stoccarda

    $ sudo apt-get install SFST

  2. Scarica la morfologia morphisto , per esempio morphisto-02022011.a

  3. Compattarlo, ad es.

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

  4. Usalo! Ecco alcuni esempi:

    $ echo Hochzeit | FST-proc morphisto-02022011.ac ^ Hochzeit/hohZeit < + NN>/hohZeit < + NN>/hohZeit < + NN>/hohZeit < + NN>/Nozze < + NN>/Nozze < + NN>/Hochzeit < + NN>/Nozze < + NN>/Hochzeit < + NN>/Hochzeit < + NN>/Hochzeit < + NN>/Hochzeit < + NN> $

    $ echo gearbeitet | FST-proc morphisto-02022011.ac ^ gearbeitet/Arbeiten < + AGG>/Arbeiten < + AGG>/Arbeiten < + V> $

5

(Disclaimer: io sto collegando le progetti Open Source qui)

Questi dati sotto forma di un elenco di parole è disponibile presso http://www.danielnaber.de/morphologie/. Potrebbe essere combinato con una libreria splitter di parole (come jwordsplitter) per coprire nomi composti non presenti nell'elenco.

O semplicemente utilizzare LanguageTool from Java, che ha l'elenco di parole incorporato in forma di una macchina a stati finiti compatta (in più include anche la suddivisione composta).

+2

Grazie per aver postato la tua risposta! Si prega di leggere attentamente le [FAQ sulla promozione di sé] (http://stackoverflow.com/faq#promotion) attentamente. Si noti inoltre che * è * richiesto * di pubblicare un disclaimer ogni volta che si collega al proprio sito/prodotto. –

3

Dai un'occhiata a LemmaGen (http://lemmatise.ijs.si/) che è un progetto che mira a fornire una piattaforma multilingue standardizzata open source per la lemmatisation. Sta facendo esattamente quello che vuoi.

1

Ci sono alcuni strumenti che è possibile utilizzare come il morph. componente in Matetools, Morphisto ecc. Ma il dolore è integrarli nella catena degli strumenti. Un ottimo wrapper attorno a molti di questi strumenti linguistici è DKpro (https://dkpro.github.io/dkpro-core/), un framework che utilizza UIMA. Ti consente di scrivere la tua pipeline di pre-elaborazione utilizzando diversi strumenti linguistici da diverse risorse che vengono scaricate automaticamente sul tuo computer e parlano tra loro. Puoi usare Java o Groovy o anche Jython per usarlo. DKPro ti offre un facile accesso a due analizzatori morfologici, MateMorphTagger e SfstAnnotator.

Non si desidera utilizzare uno stemmer come Porter, ridurrà la forma della parola in un modo che non ha alcun senso linguisticamente e non ha il comportamento che si descrive. Se vuoi solo trovare la forma base, per un verbo che sarebbe l'infinito e per un nome il nominativo singolare, allora dovresti usare un lemmatizer. È possibile trovare un elenco di lemmatizers tedeschi here. Treetagger è ampiamente usato. È inoltre possibile utilizzare un'analisi più complessa fornita da un analizzatore morfologico come SMORS. Essa vi darà qualcosa di simile (ad esempio dal sito SMORS):

E qui è l'analisi di "unübersetzbarstes" che mostrano prefissazione, suffissazione e> gradazione: un < PREF> übersetzen < V> bar < SUFF > < + AGG> < Sup> < Neut> < Nom> < Sg> < St>