Pregunta

Estoy buscando una biblioteca que puede realizar un análisis morfológico de palabras en alemán, es decir,convierte cualquier palabra en su forma de la raíz y proporcionar información de metadatos sobre los analizados palabra.

Por ejemplo:

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

Mi lista de deseos:

  • Se ha de trabajar con ambos sustantivos y verbos.
  • Soy consciente de que esta es una tarea muy dura, dada la complejidad de la lengua alemana, por lo que también estoy buscando bibliotecas que proporcionan sólo aproximaciones o sólo puede ser un 80% de precisión.
  • Prefiero las bibliotecas, las cuales no funcionan con los diccionarios, pero de nuevo estoy abierto a comprometer dado los casos.
  • También me gustaría, prefiero C/C++/Delphi de las bibliotecas de Windows, debido a que los haría más fácil de integrar, pero .NET, Java, ...también lo hará.
  • Tiene que ser una biblioteca libre.(L)GPL, MPL, ...

EDITAR: Soy consciente de que no hay ninguna manera de llevar a cabo un análisis morfológico sin ningún diccionario, porque de las palabras irregulares.Cuando digo, yo prefiero una biblioteca sin un diccionario me refiero a aquellos completo de diccionarios que mapa de cada palabra:

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

Los diccionarios tienen varias desventajas, incluyendo el enorme tamaño y la incapacidad para procesar las 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á girando ahora mismo :) )

¿Fue útil?

Solución

Creo que busca un "algoritmo de división".

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

La mayoría de los analizadores lingüísticos entregan tallos que son lingüísticamente "incorrecto". Por ejemplo: tanto "bello" y "belleza" puede dar lugar a la raíz "beauti", que, por supuesto, no es una palabra real. Esto no importa, sin embargo, si usted está utilizando los tallos para mejorar los resultados de búsqueda en los sistemas de recuperación de información. Lucene viene con soporte para la Stemmer Porter, por ejemplo.

Porter también ideó un lenguaje de programación sencillo para lematizadores en desarrollo, llamado bola de nieve.

También hay lematizadores de German disponible en la bola de nieve. Una versión C, generado a partir de la fuente de la bola de nieve, también está disponible en la página web, junto con una explicación de texto sin formato 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 de "lematización".

Otros consejos

(Negación: Estoy vincular 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 ser combinada con una biblioteca de palabra divisor (como jwordsplitter) para cubrir los nombres compuestos no en la lista.

O simplemente usar LanguageTool de Java, que tiene la lista de palabras incrustado en forma de una máquina de estados finitos compacto ( además de que también incluye la división compuesto).

Se pedirá esto hace un tiempo, pero es posible que aún probarlo con morphisto .

Este es 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, por ejemplo morphisto-02022011.a

  3. compacto que, por ejemplo.

    morphisto-02022011.a

    $ FST-compacto morphisto-02022011.ac

  4. Se usa! He aquí algunos ejemplos:

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

Tener un vistazo a LemmaGen ( http://lemmatise.ijs.si/ ), que es un proyecto que tiene por objeto proporcionar plataforma multilingüe de código abierto estandarizado para la lematización. Se está haciendo exactamente lo que quiere.

No creo que esto se puede hacer sin un diccionario.

Las reglas de los enfoques basados en invariablemente va a tropezar con cosas como

gegessen -> essen
gegangen -> angen

(nota para la gente que no habla alemán:la solución correcta en el segundo caso es "gehen").

Tener un vistazo a Leo . Ofrecen los datos que usted está buscando, tal vez le da algunas ideas.

Uno puede usar morphisto con ParZu ( https://github.com/rsennrich/parzu). ParZu es un analizador de dependencias para el alemán.

Esto significa que el ParZu también desambiguar la salida de morphisto

Hay algunas herramientas por ahí que usted podría utilizar como la metamorfosis. componente en el Matetools etc., Morphisto Pero el dolor es integrarlos en su cadena de herramientas. Una muy buena envoltura alrededor de un buen montón de estas herramientas lingüísticas es DKpro ( https://dkpro.github.io / dkpro-core / ), un marco usando UIMA. Se le permite escribir su propia línea de pre-procesamiento usando diferentes herramientas lingüísticas de diferentes recursos que son todos descargan automáticamente en el ordenador y hablan entre sí. Puede usar Java o Groovy o incluso Jython para usarlo. DKPro que proporciona un fácil acceso a dos analizadores morfológicos, MateMorphTagger y SfstAnnotator.

Usted no desea utilizar un analizador lingüístico como Porter, se reducirá la forma de la palabra de una manera que no tiene ningún sentido lingüístico y no tiene el comportamiento que usted describe. Si sólo desea encontrar la forma básica, por un verbo que sería el infinitivo y por un sustantivo nominativo singular, entonces se debe utilizar un lematizador. Puede encontrar una lista de lematizadores alemán aquí . Treetagger es ampliamente utilizado. También puede utilizar un análisis más complejo proporcionado por un analizador morfológico como smors. Se le dará algo como esto (ejemplo desde el smors sitio web):

  

Y aquí es el análisis de "unübersetzbarstes" que muestran la prefijación, sufijación y> gradación:   UN übersetzen bar <+ ADJ>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top