Алгоритм (или библиотека С#) для идентификации "ключевых слов" в наборе сообщений?

Я хочу создать список из ~ 6 ключевых слов (или даже лучше: пару словосочетаний) для каждого сообщения в форуме сообщений.

  • Основное использование ключевых слов заключается в замене сюжетных строк в некоторых случаях. Например: Сообщение от Терри отправлено 5 декабря, ключевые слова: norweigan blue, оперение, не мертвое
  • В супер идеальном мире ключевые слова будут идентифицировать как уникальные фазы, так и фразы, которые группируют дискуссию в "темы", то есть слова, которые очень важны для рассматриваемого сообщения, и несколько других сообщений на форуме, но не найдены часто на форуме в целом.
  • Я ожидаю появления нежелательных фраз, без особых проблем.
  • Не может быть слишком дорогостоящим вычислительным: мне нужно что-то, что может обрабатывать несколько сотен сообщений за несколько секунд, так как мне нужно будет повторно запускать это каждый раз при появлении нового сообщения.

Кто-нибудь знает хорошую библиотеку С# для этого? Может быть, есть способ согнуть Lucene.NET в предоставлении такого рода информации?

Или, если это не так, может ли кто-нибудь предложить алгоритм (или набор algos) для чтения? Если я реализую себя, мне нужно что-то не очень сложное, я могу только решить это, если его можно сработать примерно через неделю. Прямо сейчас, лучшее, что я нашел с точки зрения простого, но эффективного, TF-IDF.

ОБНОВЛЕНИЕ: Я загрузил результаты использования TF-IDF, чтобы выбрать лучшие 5 ключевых слов из реального набора данных здесь: http://jsbin.com/oxanoc/2/edit#preview

Результаты являются посредственными, но не совсем бесполезными... возможно, с добавлением детектирования многословных фраз, это было бы достаточно хорошо.

Ответ 1

Я реализовал алгоритм извлечения ключевых слов в Java несколько недель назад для uni. и использовала модель tf-idf.

Алгоритм:
Во-первых, мы искали все bigrams в абзаце и извлекли значимые. (*)
Затем мы взяли набор униграмм и биграмм, и каждый из них оценил соответствующий балл tf-idf. Счет idf каждого термина был "количеством документов", полученным Bing API.

(*) Определение того, какая биграмма имеет смысл:
Мы использовали различные эвристики, чтобы найти, какой биграмм можно считать значимым. В конце концов, лучшие результаты были достигнуты путем "запроса" википедии: мы искали биграмму. Если есть статья, содержащая эту биграмму, мы считаем ее значимой.

Оценка:
Мы оценили алгоритм на множестве из 50 тезисов из случайных статей и извлекли точность и отзыв этих алгоритмов.
Результат - ошибка 40% и точность ~ 35%, что не так уж плохо.

Ответ 3

Хммм, я думаю, что вам может понадобиться следующее: проект TAGME