如何提取文本中使用的关键字?

如何通过使用数据挖掘一堆文本来获取关键字? (“雅各布·史密斯”或“围栏”)

有没有一个软件可以做到这一点? 甚至是半自动的,如果能过滤出“the”,“and”,“or”这样的简单单词,那么我就可以更快地进入话题。

一般的algorithm是这样的:

 - 获取文本
 - 标点符号,特殊字符等
 - 去掉“简单”的话
 - 在空间上分割
 - 在分割文本上循环
     - 如果不存在,则将数组添加到Array / HashTable / Etc;
       如果是这样,则增加该字的计数器

最终结果是文本中所有单词的频率计数。 然后,您可以取这些值,并除以总词数得到一个百分比的频率。 任何进一步的处理是由你决定的。

你也想看看Stemming 。 词干是用来减less词根的。 例如going => gocars => car

像这样的algorithm在垃圾邮件filter,关键字索引等中将是常见的。

这是NLP中的一个悬而未决的问题,所以没有简单的答案。

我的build议,快速和肮脏的“为我工作”是topia.termextract 。

雅虎有一个关键字提取服务( http://developer.yahoo.com/search/content/V1/termExtraction.html ),这是召回率低,但高精度。 换句话说,它提供了less量高质量的术语,但是却遗漏了文档中的许多术语。

在Python中,有topia.termextract( http://pypi.python.org/pypi/topia.termextract/ )。 这是相对嘈杂,并提出了许多虚假的关键字,但使用起来很简单。

Termine( http://www.nactem.ac.uk/software/termine/ )是一个英国的networking服务,也是比较嘈杂,并提出了许多虚假的关键字。 但是,在我看来,比topia.termextract稍微准确些。 因人而异。

一种用太多关键字(例如,topia.termextract和termine)去除结果的方法是创build经常出现的术语词汇表,然后丢弃不在词汇表中的提议术语。 换句话说,做两遍你的语料库:第一遍,计算每个关键字的频率。 在第二遍中,丢弃太less的关键字。

如果你想自己写,也许最好的介绍是由Park现在在IBM写的:

这里有更多的参考资料,如果你想了解更多:

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • “CorePhrase:文档聚类的关键词提取”
  • Liu等人,2009年,来自NAACL HLT
  • “非组成性短语的自动识别”
  • “数据挖掘符合搭配发现”
  • 以及许多其他的参考资料,你可以挖掘主题。

还有一个名为炼金术的服务,可以进行术语抽取,概念标记,情感分析等等。

这是有效的,我testing了它,但我不知道他们的商业政策(如果有的话)。 他们提供任何语言的API(非常多)。

我读了某处(对不起,我不记得在哪里了),炼金术的结果与约瑟夫所提出的结果相比不那么吵闹。

你没有指定你正在使用的技术,所以我猜一个shell脚本也是一种可能性。

我一直对“ 高级Bash脚本指南” (12-11)中的频率分析例子一词印象深刻,

例如下面的例子从古腾堡项目中拿出一本书,并写出一个词频分析“报告”:

 wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- | sed -e 's/\.//g' -e 's/\,//g' -e 's/ /\ /g' | tr 'AZ' 'az' | sort | uniq -c | sort -nr > output.txt 

应该是可扩展的,以排除“普通”列表中的字词(the,and,a …)等

我个人推荐毛伊( http://code.google.com/p/maui-indexer/ ):它依赖于KeA,但以各种方式扩展它。 它是可训练的,可以使用RDF格式的术语。

我已经使用NTLK来识别命名实体 ,并取得了一些成功。 特别擅长识别人员和组织的名称。