2010-01-03 12 views
7

Actualmente estoy analizar un montón de correos y desea obtener palabras y otros símbolos interesantes de correos (incluso con errores de ortografía o combinación de caracteres y letras, como "zebra21" o "customer242"). Pero, ¿cómo puedo saber que "0013lCnUieIquYjSuIA" y "anr5Brru2lLngOiEAVk1BTjN" no son palabras y no son relevantes? ¿Cómo extraer palabras y descartar tokens que son errores de codificación o partes de la firma de pgp o cualquier otra cosa que recibamos en los correos electrónicos y saber que nunca nos interesarán?¿Cómo se reconocen las palabras en el texto con tokens sin palabras?

Respuesta

3

que necesita para decidir en un buen criterio suficiente para una palabra y escribir una expresión regular o un manual para hacerlo cumplir.
algunas reglas que se pueden extrapolar de sus ejemplos:

  • palabras pueden comenzar con una letra captial o estar en letras mayúsculas, pero si usted tiene más de decir, 2 letras mayúsculas y más de 2 letras minúsculas dentro de una palabra, no es una palabra
  • Si tiene números dentro de la palabra, no es una palabra
  • si es más largo que decir, 20 caracteres

no hay truco de magia. debe decidir qué quiere que sean las reglas y hacer que sucedan.

Al manera alternativa es la formación de algún tipo de sistema de Markov modelos ocultos de reconocer las cosas que suenan como palabras pero creo que esto es una exageración para lo que quiere hacer.

+0

gracias por el consejo, empecé como este, que calculé NrLetterToDigitChanges y NrLowerToUpperChnages y que creé diferen s "nivel" de las palabras actualmente para NrLowerToUpperChnages <= 1 y NrLetterToDigitChanges <= 1 es el primer nivel y si la suma de esta dos es más de 8, no es una palabra, entonces definiré algunos niveles más y veré qué me funciona mejor, gracias – zebra

+1

. Asegúrese de escribir documentación decente porque estos nombres no significan mucho para un lector casual. – shoosh

1

A pesar de que en general, de acuerdo con la respuesta de shoosh, su enfoque hace que sea fácil de lograr alta recordación pero también baja precisión, es decir, obtendría casi todas las palabras reales, pero también muchas palabras sin palabras. Si su definición de la palabra es demasiado restrictiva, es al revés, pero tampoco es lo que quiere, ya que entonces echaría de menos casos como 'zebra123'. Así que aquí están algunas ideas sobre cómo mejorar la precisión:

  1. Se puede pensar que merezca sobre si se puede determinar qué partes de un correo electrónico pertenecen al texto principal y cuáles son los pies de página, como las firmas PGP. Estoy seguro de que es posible encontrar heurísticas simples que coincidan con la mayoría de los casos, p. corte de todo debajo de una línea que consta únicamente de caracteres '-'-.

  2. En función de los criterios de rendimiento que puede que desee comprobar si una palabra es una palabra real o contiene una palabra real, haciendo coincidir contra una sencilla lista de palabras. Es fácil encontrar listas bastante exhaustivas de palabras en inglés en la web, y también puedes compilar una tú mismo extrayendo palabras de un corpus de texto grande y limpio.

  3. El uso de un analizador léxico, puede filtrar cada ficha que está marcado como desconocido.

  4. Algunas estadísticas simples le pueden indicar qué tan probable es que algo es una palabra. Los tokens que ocurren con alta frecuencia muy probablemente sean palabras. Los tokens que aparecen solo una vez o cuyo número está por debajo de un cierto umbral muy probablemente no sean palabras. Los errores comunes de ortografía deberían aparecer más de una vez y los más comunes pueden ignorarse.

Algunas de estas sugerencias claramente no funcionan para casos como 'zebra123'. De nuevo, simplemente cortar o dividir en números en la palabra puede hacer el truco.

Mi enfoque general sería identificar tokens que ciertamente son palabras (usando las sugerencias anteriores), identificar tokens que ciertamente no son palabras (usando una expresión regular), y luego mirar (con los ojos) a los pocos cientos o miles de tokens restantes para encontrar características comunes para manejarlos por separado.

Cuestiones relacionadas