如何提取文本中使用的关键字?
如何通过使用数据挖掘一堆文本来获取关键字? (“雅各布·史密斯”或“围栏”)
有没有一个软件可以做到这一点? 甚至是半自动的,如果能过滤出“the”,“and”,“or”这样的简单单词,那么我就可以更快地进入话题。
一般的algorithm是这样的:
- 获取文本 - 标点符号,特殊字符等 - 去掉“简单”的话 - 在空间上分割 - 在分割文本上循环 - 如果不存在,则将数组添加到Array / HashTable / Etc; 如果是这样,则增加该字的计数器
最终结果是文本中所有单词的频率计数。 然后,您可以取这些值,并除以总词数得到一个百分比的频率。 任何进一步的处理是由你决定的。
你也想看看Stemming 。 词干是用来减less词根的。 例如going => go
, cars => 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://portal.acm.org/citation.cfm?id=1072370
- “IBM技术支持信息search和交付系统中的词汇提取和利用”
这里有更多的参考资料,如果你想了解更多:
- 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来识别命名实体 ,并取得了一些成功。 特别擅长识别人员和组织的名称。