2012-01-01 8 views
11

Quiero construir una lista de ~ 6 palabras clave (o incluso mejor: palabras clave de par de palabras) para cada mensaje en un foro de mensajes.Algoritmo (o biblioteca C#) para identificar 'palabras clave' en un conjunto de mensajes?

  • El uso principal de las palabras clave es reemplazar líneas de asunto en algunos casos. Por ejemplo: Mensaje Terry envió dic 5, palabras clave: norweigan azul, plumaje, no muerto
  • En un super ideal Palabras clave mundo identificaría ambas fases únicas, y frases que se agrupan la discusión en "temas", es decir, palabras que son muy relevantes para el mensaje en cuestión, y algunos otros mensajes en el foro, pero que no se encuentran con frecuencia en el foro como un todo.
  • Espero que aparezcan frases basura, no es gran cosa.
  • no puede ser demasiado costoso computacionalmente: Necesito algo que puede manejar varios cientos de mensajes en varios segundos, ya que voy a tener que volver a ejecutar este cada vez que un nuevo mensaje viene en

Alguien sabe. una buena biblioteca de C# para lograr esto? Tal vez hay una manera de doblar Lucene.NET en la prestación de este tipo de información?

O, en su defecto, ¿alguien puede sugerir un algoritmo (o conjunto de algos) para leer? Si me estoy implementando necesito algo que no sea terriblemente complejo, solo puedo abordarlo si es manejable en aproximadamente una semana. En este momento, lo mejor que he encontrado en términos de simple pero efectivo es TF-IDF.

ACTUALIZACIÓN: He subido los resultados del uso de TF-IDF para seleccionar los mejores 5 palabras clave de un conjunto de datos reales aquí: http://jsbin.com/oxanoc/2/edit#preview

Los resultados son mediocres, pero no totalmente inútil ... tal vez con Además de detectar frases de varias palabras, esto sería suficiente.

+0

Si desea que los errores tipográficos, como su ejemplo, sean atrapados también, necesitará un corrector ortográfico, ¡y su algoritmo será computacionalmente costoso! –

+0

Estoy de acuerdo con los errores tipográficos. Me centro más en "asegurarme de que al menos un par de palabras clave realmente útiles aparezcan en la lista" en lugar de "asegurarme de que no haya nada tonto en la lista de palabras clave". – Seth

+0

He puesto la salida de palabra clave de una implementación ingenua de TF-IDF ejecutada en mensajes reales aquí (mensaje mostrado al pasar el mouse): [TF-IDF seleccionó palabras clave de datos reales] (http://jsbin.com/oxanoc/2/edit) #avance). Los resultados están bien, pero no son estelares. Creo que revelan una necesidad real de frases de varias palabras. – Seth

Respuesta

2

he implementado un algoritmo de extracción de palabras clave en Java hace unas semanas para UNI. proyecto, y utilizó el modelo tf-idf.

Algoritmo:
En primer lugar, buscamos todo bigrams en el párrafo, y extrae los significativos. (*)
A continuación, tomamos el conjunto de unigrams y bigrams, y evaluamos cada uno con su respectiva puntuación tf-idf. El puntaje IDF de cada término fue el "conteo de documentos" obtenido por Bing API.

(*) Decidir cuál bi-gramo es significativa:
Se utilizó una heurística diferentes para encontrar qué bi-gramo puede ser considerado significativo. Al final, los mejores resultados se obtuvieron al "preguntar" a la wikipedia: buscamos el bi-gramo. Si hay un artículo que contiene este bi-gram, lo consideramos significativo.

Evaluación:
Se evaluó el algoritmo en un conjunto de 50 resúmenes de artículos al azar, y se extrajo la precision and recall de estos algoritmos.
El resultado fue ~ 40% de recuperación y ~ 35% de precisión, lo que no es tan malo.

Cuestiones relacionadas