algorithm - son - programa para cambiar palabras de un texto
Algoritmos para detectar frases y palabras clave del texto (5)
Antes de nada, intente conservar la información sobre "límites" que viene en el texto de entrada.
(Si tal información no se pierde fácilmente, su pregunta implica que tal vez la tokenización se haya realizado fácilmente)
Durante el proceso de tokenización (análisis de palabras, en este caso), busque patrones que puedan definir límites de expresión (como la puntuación, particularmente los períodos, y también la separación múltiple de LF / CR, utilícelos. También palabras como "el", a menudo pueden ser se usan como límites. Tales límites de expresión son típicamente "negativos", en el sentido de que separan dos instancias de token que seguramente no se incluirán en la misma expresión. Algunos límites positivos son comillas, particularmente comillas dobles. Este tipo de información puede ser útil para filtrar algunos de los n-grams (ver el siguiente párrafo). También las secuencias de palabras como "por ejemplo" o "en lugar de" o "necesitar" también se pueden usar como límites de expresión (pero usando tales la información está disminuyendo en el uso de "priores" que discutiré más adelante).
Sin utilizar datos externos (que no sean el texto de entrada), puede tener un éxito relativo al ejecutar estadísticas en los digramas y trigramas del texto (secuencia de 2 y 3 palabras consecutivas). Entonces [la mayoría] de las secuencias con un número significativo (*) de instancias probablemente será el tipo de "expresión / frases" que está buscando.
Este método algo crudo dará algunos falsos positivos, pero en general puede ser viable. Habiendo filtrado los n-grams conocidos para cruzar "límites" como se insinuaba en el primer párrafo, puede ayudar significativamente porque en los lenguajes naturales la oración finalizada y el comienzo de la oración tienden a dibujarse desde un subconjunto limitado del espacio del mensaje y por lo tanto producen combinaciones de token que pueden parecen estar estadísticamente bien representados, pero que típicamente no están semánticamente relacionados.
Mejores métodos (posiblemente más caros, procesamiento y diseño / inversión) harán que el uso de "prioridades" adicionales sea relevante para el dominio y / o los idiomas nacionales del texto de entrada.
- El etiquetado POS (Part-of-Speech) es bastante útil, de varias maneras (proporciona límites de expresión adicionales y más objetivos, y también clases de palabras "de ruido"; por ejemplo, todos los artículos, incluso cuando se usan en el contexto de entidades suelen ser poco en nubes de etiquetas tales que OP quiere producir.
- Diccionarios, léxicos y similares también pueden ser muy útiles. En particular, estos que identifican "entidades" (también conocidas como instancias en la jerga de WordNet ) y sus formas alternativas. Las entidades son muy importantes para las nubes de etiquetas (aunque no son la única clase de palabras que se encuentran en ellas), y al identificarlas, también es posible normalizarlas (las muchas expresiones diferentes que se pueden usar para decir, "Senador T. Kennedy "), elimina los duplicados, pero también aumenta la frecuencia de las entidades subyacentes.
- si el corpus está estructurado como una colección de documentos, puede ser útil usar varios trucos relacionados con el TF (Frecuencia de Término) y la IDF (Frecuencia Inversa del Documento)
[Perdón, tengo que irme, por ahora (además me gustaría obtener más detalles de tus objetivos específicos, etc.). Trataré de proporcionar más detalles y puntos más adelante]
[Por cierto, quiero conectar aquí las respuestas de Jonathan Feinberg y Dervin Thunk de esta publicación, ya que proporcionan excelentes consejos, en términos de métodos y herramientas para el tipo de tarea en cuestión. En particular, NTLK y Python-at-large proporcionan un marco excelente para experimentar]
Tengo alrededor de 100 megabytes de texto, sin ningún marcado, dividido en aproximadamente 10.000 entradas. Me gustaría generar automáticamente una lista de ''etiquetas''. El problema es que hay grupos de palabras (es decir, frases) que solo tienen sentido cuando se agrupan.
Si solo cuento las palabras, obtengo una gran cantidad de palabras realmente comunes (es decir, the, for, in, am, etc.). He contado las palabras y el número de otras palabras que están antes y después, pero ahora realmente no puedo entender qué hacer a continuación. La información relacionada con las frases de 2 y 3 palabras está presente, pero ¿cómo puedo extraer esta información?
Comenzaría con un capítulo maravilloso, de Peter Norvig , en el libro O''Reilly Beautiful Data . Proporciona los datos de ngram que necesitará, junto con el precioso código Python (que puede resolver sus problemas tal como están o con alguna modificación) en su sitio web personal .
Haz una matriz de palabras. Luego, si hay dos palabras consecutivas, agregue una a esa celda apropiada.
For example you have this sentence.
mat[''for''][''example''] ++;
mat[''example''][''you''] ++;
mat[''you''][''have''] ++;
mat[''have''][''this''] ++;
mat[''this''][''sentence''] ++;
Esto le dará valores para dos palabras consecutivas. Usted puede hacer esta palabra tres palabras también. Tenga cuidado con esto requiere O (n ^ 3) memoria.
También puede usar un montón para almacenar datos como:
heap[''for example'']++;
heap[''example you'']++;
Parece que estás buscando la extracción de la ubicación . Manning y Schütze dedican un chapter al tema, explicando y evaluando las "fórmulas propuestas" mencionadas en el artículo de Wikipedia al que me he vinculado.
No puedo adaptar todo el capítulo a esta respuesta; con suerte, algunos de sus enlaces ayudarán. ( NSP suena particularmente apropiado.) Nltk también tiene un módulo de colocaciones , no mencionado por Manning y Schütze ya que su libro es anterior a él.
Las otras respuestas publicadas hasta ahora tratan el procesamiento del lenguaje estadístico y n-grams de manera más general; las colocaciones son un subtema específico.
Una forma sería construir un autómata. muy probablemente un autómata finito no determinista (NFA). NFA
Otra manera más simple sería crear un archivo que tenga las palabras y / o grupos de palabras que desea ignorar, buscar, comparar, etc. y almacenarlos en la memoria cuando se inicie el programa y luego puede comparar el archivo que está analizando con los grupos palabra / palabra que están contenidos en el archivo.