Estoy construyendo un lematizador en python. Como necesito ejecutar en tiempo real/procesar una cantidad bastante grande de datos, la velocidad de procesamiento es esencial. Datos: Tengo todos los sufijos posibles que están vinculados a todos los tipos de palabras con los que se pueden combinar. Además, tengo lemas formales que están vinculados tanto a su (s) tipo (s) de palabra (s) como a su (s) lema (s). El programa toma una palabra como entrada y saca su lema. palabra = lemmafrom + sufijoConstruyendo un lemmatizador: optimización de velocidad
Por ejemplo (Nota: Aunque el ejemplo se da en Inglés No estoy construyendo un lematizador de Inglés):
palabra: prohibiendo
lemmaform: Forbidd
sufijo: ing
lema: prohibir
Mi solución:
que se han convertido los datos a dicts (anidados):
suffixdict : {suffix1:[type1,type2, ... , type(n)], suffix2:[type1,type2, ... ,
type(n)]}
lemmaformdict : {lemmaform:{type1:lemma}}
1) Buscar Todos los sufijos posibles y tipos de palabras que están vinculados a. Si el sufijo más largo posible tiene 3 caracteres, el programa intenta hacer coincidir 'ing', 'ng', 'n' con las claves en sufijodecifrado. Si la clave existe, devuelve un valor (un conjunto de tipos de palabras).
2) Para cada búsqueda de sufijo coincidente, el lemaform del dict. Si existe el lemaform, devuelve los tipos de palabras.
3) Finalmente, el programa intenta interceptar los tipos de palabras producidos en los pasos 1) ans 2) y si la intersección es exitosa, devuelve el lema de la palabra.
Mi pregunta: ¿podría haber una mejor solución a mi problema desde la perspectiva de la velocidad? (Sin tener en cuenta la opción de mantener palabras y lemas frecuentes en el diccionario) Ayuda muy solicitada.
(Forgiv, e) mí la mala calidad de la imagen ... ¿Hay alguna manera de mejorarla? – jena
+1: Gracias por la idea. No tengo ninguna experiencia previa con FST, pero definitivamente voy a intentarlo. – root