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

Set*_*eth 11 c# algorithm search nlp text-mining

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

  • 关键字的主要用途是在某些情况下替换主题行.例如:来自Terry的消息发送给12月5日,关键字:norweigan blue,plumage,not dead
  • 在超理想世界中,关键字将识别两个独特的阶段,以及将讨论聚类为"主题"的短语,即与所讨论的消息高度相关的单词,以及论坛中的一些其他消息,但在论坛作为一个整体.
  • 我希望垃圾短语出现,没什么大不了的.
  • 计算成本太高:我需要能在几秒钟内处理几百条消息的东西,因为每次有新消息进入时我都需要重新运行它.

有谁知道一个很好的C#库来完成这个?也许有办法让Lucene.NET提供这种信息?

或者,如果不这样做,任何人都可以建议一个算法(或一组算法)来阅读?如果我正在实施自己,我需要的东西不是非常复杂,我只能解决这个问题,如果它在大约一个星期内易于处理.现在,我发现最简单但有效的是TF-IDF.

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

结果是平庸的,但并非完全无用......也许通过添加检测多词短语,这将是足够好的.

ami*_*mit 2

几周前,我用 Java 为大学实现了一个关键字提取算法。项目,并使用了tf-idf模型。

算法:
首先,我们查找段落中的所有二元组,并提取有意义的二元组。(*)
接下来,我们采用一元语法和二元语法的集合,并使用各自的 tf-idf 分数来评估每个语法。每个术语的 idf 分数是Bing API检索到的“文档数” 。

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

评估:
我们对随机文章中的 50 篇摘要进行了评估,并提取了这些算法的精确度和召回率
结果是约 40% 的召回率和约 35% 的准确率,这还不错。