算法(或C#库)用于识别一组消息中的“关键字”?

时间:2012-01-01 21:08:58

标签: c# algorithm search nlp text-mining

我想在消息论坛中为每条消息构建一个包含约6个关键字(甚至更好:几个字关键短语)的列表。

  • 关键字的主要用途是在某些情况下替换主题行。例如:来自Terry的消息发送至12月5日,关键字: norweigan blue,羽毛,未死>
  • 在一个超级理想的世界中,关键字将识别两个独特的阶段,以及将讨论聚为“主题”的短语,即与相关消息高度相关的单词,以及论坛中的一些其他消息,但未找到经常在论坛中作为一个整体。
  • 我希望垃圾短语出现,没什么大不了的。
  • 计算成本太高:我需要能在几秒钟内处理数百条消息的内容,因为每次收到新消息时我都需要重新运行这些消息。

任何人都知道一个好的C#库来实现这个目标吗?也许有办法让Lucene.NET屈服于提供这种信息?

或者,如果没有,那么有人可以建议一个算法(或一组算法)来阅读吗?如果我正在实施自己,我需要的东西不是非常复杂,我只能解决这个问题,如果它在大约一个星期内易于处理。现在,我在简单但有效的方面找到的最好的是TF-IDF

更新:我上传了使用TF-IDF的结果,从真实数据集中选择前5个关键字:http://jsbin.com/oxanoc/2/edit#preview

结果平庸,但并非完全没用......也许加上检测多字短语,这就足够了。

1 个答案:

答案 0 :(得分:2)

几周前我用Java实现了Java中的关键字提取算法。项目,并使用tf-idf模型。

<强>算法:
首先,我们在段落中查找了所有bigrams,并提取了有意义的段落。 (*)
接下来,我们采取了一组unigrams和bigrams,并分别评估各自的tf-idf得分。每个术语的idf分数是Bing API检索到的“文件数”。

(*)确定哪个二元组有意义:
我们使用各种启发式方法来找出哪些二元组被认为是有意义的。最后,通过“询问”维基百科获得了最好的结果:我们搜索了二元组。如果有一篇文章包含这个二元组,我们认为它有意义。

<强>评价为: 我们在随机文章的一组50个摘要中评估了算法,并提取了这些算法的precision and recall
结果是约40%的召回率和~35%的精度,这也不算太差。