python - stopwords - Encontrar el sujeto en oración incompleta con NLTK
nltk tokenize spanish (2)
Crearía una lista de sustantivos, ya sea manualmente, con todos los sustantivos que está buscando, o analizaré un diccionario como este . Al filtrar todos los nombres, menos los sustantivos, al menos te llevarían a "State Drive", "Drive Cable" o "Drive", haciendo caso omiso de todo después del primer signo de puntuación.
Tengo una lista de productos que estoy tratando de clasificar en categorías. Se describirán con oraciones incompletas como:
"Vivienda de unidad de estado sólido"
"Cable de disco duro"
"Disco duro de 1TB"
"Disco duro de 500GB, restaurado del fabricante"
¿Cómo puedo usar Python y NLP para obtener un resultado como "Vivienda, cable, unidad, unidad" o un árbol que describa qué palabra está modificando cuál? Gracias de antemano
Las técnicas de PNL están relativamente mal equipadas para tratar este tipo de texto.
Fraseada de forma diferente: es bastante posible construir una solución que incluya procesos NLP para implementar el clasificador deseado, pero la complejidad añadida no necesariamente vale la pena en términos de velocidad de desarrollo ni mejoras de precisión del clasificador.
Si uno realmente insiste en usar técnicas NLP, el etiquetado POS y su capacidad para identificar sustantivos es la idea más obvia, pero la fragmentación y el acceso a WordNet u otras fuentes léxicas son otros usos plausibles de NLTK.
En cambio, una solución ad-hoc basada en expresiones regulares simples y algunas heurísticas sugeridas por NoBugs es probablemente un enfoque apropiado para el problema. Ciertamente, tales soluciones tienen dos riesgos principales:
- ajuste excesivo a la parte del texto revisado / considerado en la construcción de las reglas
- posible desorden / complejidad de la solución si se introducen demasiadas reglas y sub-reglas.
Ejecutar un análisis estadístico simple sobre la muestra completa (o muy grande) de los textos que se deben considerar debería ayudar a guiar la selección de algunas heurísticas y también evitar las preocupaciones excesivas. Estoy bastante seguro de que un número relativamente pequeño de reglas, asociadas con un diccionario personalizado, debería ser suficiente para producir un clasificador con la precisión adecuada, así como el rendimiento de velocidad / recursos.
Algunas ideas:
- cuente todas las palabras (y posiblemente todos los bi-gramos y tri-gramos) en una parte considerable del corpus de una mano. Esta información puede impulsar el diseño del clasificador al permitir asignar el mayor esfuerzo y las reglas más rígidas a los patrones más comunes.
- introduzca manualmente un diccionario corto que asocie las palabras más populares con:
- su función POS (principalmente una cuestión binaria aquí: es decir, sustantivos vs. modificadores y otros no sustantivos).
- su raíz de sinónimo [si corresponde]
- su clase [si corresponde]
- Si el patrón se mantiene para la mayoría del texto de entrada, considere usar la última palabra antes del final del texto o antes de la primera coma como la clave principal para la selección de clase. Si el patrón no se mantiene, solo da más peso a la primera y a la última palabra.
- considere un primer paso donde el texto se reescribe con los bigram más comunes reemplazados por una sola palabra (incluso una palabra de código artificial) que estaría en el diccionario
- considere también reemplazar los errores tipográficos o sinónimos más comunes con su raíz de sinónimos correspondiente. Agregar regularidad en la entrada ayuda a mejorar la precisión y también ayuda a crear algunas reglas / algunas entradas en el diccionario tienen un gran retorno de precisión.
- para palabras que no se encuentran en el diccionario, suponga que las palabras que están mezcladas con números y / o precedidas por números son modificadores, no sustantivos. Suponer que el
- considere una clasificación de dos niveles por la cual los insumos a los que no se les puede asignar una clase plausible se colocan en el "montón manual" para solicitar una revisión adicional que resulte en reglas y / o entradas de diccionario adicionales. Después de algunas iteraciones, el clasificador debería requerir cada vez menos mejoras y ajustes.
- busca características no obvias Por ejemplo, algunos corpus están hechos de una combinación de fuentes, pero algunas de las fuentes pueden incluir regularidades particulares que ayudan a identificar la fuente y / o pueden aplicarse como sugerencias de clasificación. Por ejemplo, algunas fuentes solo pueden contener texto en mayúsculas (o texto de más de 50 caracteres, o palabras truncadas al final, etc.)
Me temo que esta respuesta no es suficiente para proporcionar fragmentos de Python / NLTK como introducción a una solución, pero, francamente, esos enfoques simples basados en NLTK pueden ser decepcionantes en el mejor de los casos. Además, deberíamos tener un conjunto de muestras mucho más grande del texto de entrada para guiar la selección de enfoques plausibles, incluidos los que se basan en las técnicas NLTK o NLP en general.