2009-03-25 9 views
8

Estoy buscando una biblioteca que pueda realizar un análisis morfológico en palabras alemanas, es decir, convierte cualquier palabra en su forma raíz y proporciona meta información sobre la palabra analizada.¿Existe una biblioteca gratuita para el análisis morfológico de la lengua alemana?

Por ejemplo:

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

Mi lista de deseos:

  • Tiene que funcionar con ambos nombres y verbos.
  • Soy consciente de que esta es una tarea muy difícil dada la complejidad del idioma alemán, por lo que también estoy buscando libraries que proporcionen solo aproximaciones o que solo sean 80% precisas.
  • Preferiría bibliotecas que no funcionan con diccionarios, pero de nuevo estoy abierto a un compromiso dadas las circunstancias.
  • También preferiría las bibliotecas de C/C++/Delphi Windows, porque eso haría que fueran más fáciles de integrar pero .NET, Java, ... también funcionarán.
  • Tiene que ser una biblioteca gratuita. (L) GPL, MPL, ...

EDIT: Soy consciente de que no hay manera de realizar un análisis morfológico y sin ningún diccionario en absoluto, debido a las palabras irregulares. Cuando digo, prefiero una biblioteca sin un diccionario esos diccionarios completo soplado, que se asignan a cada palabra que quiero decir:

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

Esos diccionarios tienen varios inconvenientes, entre ellos el enorme tamaño y la incapacidad para procesar palabras desconocidas.

Por supuesto, todas las excepciones sólo pueden ser manejados con un diccionario:

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

(Mi mente está haciendo girar ahora :))

Respuesta

7

Creo que está buscando un "algoritmo de tallo".

El enfoque de Martin Porter es bien conocido entre los lingüistas. El stemmer de Porter es básicamente un algoritmo de eliminación de afijos, combinado con unas pocas reglas de sustitución para esos casos especiales.

La mayoría de los talladores ofrecen tallos que son lingüísticamente "incorrectos". Por ejemplo: tanto "bella" como "belleza" pueden dar como resultado el tallo "beauti", que, por supuesto, no es una palabra real.Sin embargo, esto no importa si está usando esos troncos para mejorar los resultados de búsqueda en los sistemas de recuperación de información. Lucene viene con soporte para el stemmer Porter, por ejemplo.

Porter también ideó un lenguaje de programación simple para el desarrollo de stemmers, llamado Snowball.

También hay láminas para alemán disponibles en Snowball. Una versión C, generada a partir de la fuente Snowball, también está disponible en el sitio web, junto con una explicación en texto plano del algoritmo.

Aquí está la despalilladora alemana en la bola de nieve: http://snowball.tartarus.org/algorithms/german/stemmer.html

Si usted está buscando para el vástago correspondiente de una palabra que puedes encontrar en un diccionario, junto con información sobre la parte del discurso, que debiera Google para "lematización".

2

no creo que esto se puede hacer sin un diccionario . Los enfoques basados ​​en reglas

invariablemente tropezar con cosas como

gegessen -> Essen
gegangen -> Angen

(tenga en cuenta a las personas que no hablan alemán: la solución correcta en el segundo caso es "gehen").

+0

Usted es parte de razón, he actualizado mi pregunta. –

1

Echa un vistazo a Leo. Ofrecen los datos que buscas, tal vez te da algunas ideas.

3

Usted pidió esto hace un tiempo, pero aún puede intentarlo con morphisto.

He aquí un ejemplo de cómo hacerlo en Ubuntu:

  1. Instalar las herramientas de transductores de estados finitos Stuttgart

    $ sudo apt-get install SFST

  2. Descargar la morfología morphisto , p.ej morphisto-02022011.a

  3. Compacto, p. ej.

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

  4. Úsalo! Aquí hay algunos ejemplos:

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

    $ eco gearbeitet | FST-proc morphisto-02022011.ac ^ gearbeitet/arbeiten < + ADJ>/arbeiten < + ADJ>/arbeiten < + V> $

5

(Negación: Estoy vinculación de mis propios proyectos de código abierto aquí)

estos datos en forma de una lista de palabras está disponible en http://www.danielnaber.de/morphologie/. Podría combinarse con una biblioteca de separadores de palabras (como jwordsplitter) para cubrir sustantivos compuestos que no están en la lista.

O simplemente use LanguageTool from Java, que tiene la lista de palabras incrustada en forma de una máquina de estado finito compacta (además de que también incluye división de compuestos).

+2

¡Gracias por publicar tu respuesta! Asegúrese de leer detenidamente [Preguntas frecuentes sobre autopromoción] (http://stackoverflow.com/faq#promotion). También tenga en cuenta que * se requiere * que publique un descargo de responsabilidad cada vez que se vincula a su propio sitio/producto. –

3

Eche un vistazo a LemmaGen (http://lemmatise.ijs.si/) que es un proyecto que tiene como objetivo proporcionar una plataforma multilingüe de fuente abierta estandarizada para la lematización. Está haciendo exactamente lo que quieres.

1

Hay algunas herramientas que puedes usar como el morph. componente en los Matetools, Morphisto etc. Pero el dolor es integrarlos en su cadena de herramientas. Una muy buena envoltura de muchas de estas herramientas lingüísticas es DKpro (https://dkpro.github.io/dkpro-core/), un framework que usa UIMA. Le permite escribir su propio pipeline de preprocesamiento utilizando diferentes herramientas lingüísticas de diferentes recursos que se descargan automáticamente en su computadora y se comunican entre sí. Puede usar Java o Groovy o incluso Jython para usarlo. DKPro le proporciona acceso fácil a dos analizadores morfológicos, MateMorphTagger y SfstAnnotator.

No desea utilizar una lectora como Porter, reducirá la forma de la palabra de una manera que no tiene ningún sentido lingüístico y no tiene el comportamiento que describe. Si solo quieres encontrar la forma básica, para un verbo que sería el infinitivo y para un sustantivo el nominativo singular, entonces debes usar un lematizador. Puede encontrar una lista de lemmatizadores alemanes here. Treetagger es ampliamente utilizado. También puede usar un análisis más complejo proporcionado por un analizador morfológico como SMORS. Se le dará algo como esto (ejemplo desde el sitio web SMORS):

Y aquí es el análisis de "unübersetzbarstes" que muestran la prefijación, sufijación y> gradación: ONU < PREF> übersetzen < V> barra de < SUFF > < + ADJ> < sup> < Neut> < Nom> < Sg> < St>

Cuestiones relacionadas