如何通过数据挖掘一堆文本来获取关键字? (“雅各布史密斯”或“围栏”)
是否有软件可以执行此操作?甚至是半自动的,如果它可以过滤出简单的单词,如“the”,“and”,“或”,那么我可以更快地找到主题。
答案 0 :(得分:119)
这是NLP的一个悬而未决的问题,所以没有简单的答案。
我对快速而肮脏的“为我工作”的建议是topia.termextract。
雅虎有一个关键字提取服务(http://developer.yahoo.com/search/content/V1/termExtraction.html),它具有低召回率但高精度。换句话说,它为您提供了少量高质量的术语,但遗漏了文档中的许多术语。
在Python中,有topia.termextract(http://pypi.python.org/pypi/topia.termextract/)。它相对嘈杂,并提出了许多虚假的关键字,但它很容易使用。
Termine(http://www.nactem.ac.uk/software/termine/)是一个英国的网络服务,也相对嘈杂,并提出了许多虚假的关键字。但是,在我看来,它比topia.termextract稍微准确一些。 YMMV。
使用太多关键字(例如topia.termextract和termine)对结果进行去噪的一种方法是创建频繁出现的术语词汇表,然后抛弃不在词汇表中的提议术语。换句话说,对你的语料库进行两次传递:第一次传递,计算每个关键词的频率。在第二轮中,丢弃过于罕见的关键字。
如果你想自己编写,也许最好的介绍是由现在在IBM的Park编写的:
如果您想了解更多信息,请参阅以下参考资料:
答案 1 :(得分:39)
通用算法将如下所示:
- Obtain Text - Strip punctuation, special characters, etc. - Strip "simple" words - Split on Spaces - Loop Over Split Text - Add word to Array/HashTable/Etc if it doesn't exist; if it does, increment counter for that word
最终结果是文本中所有单词的频率计数。然后,您可以获取这些值并除以总字数以获得频率的百分比。任何进一步的处理都取决于您。
你也想要调查Stemming。词干用于减少词根。例如going => go
,cars => car
等
这样的算法在垃圾邮件过滤器,关键字索引等中很常见。
答案 2 :(得分:9)
还有一项名为Alchemy的服务可以进行术语提取,概念标记,情感分析等。
这是有效的,我测试了它,但我不知道他们的商业政策(如果有的话)。 它们为任何类型的语言提供API(非常)。
我读到某处(对不起,我不记得哪里了)Alchemy给出的输出与Joseph提出的输出相比噪音更小。
答案 3 :(得分:5)
你没有指定你正在使用的技术,所以我猜一个shell脚本也是可能的。
Advanced Bash-Scripting Guide(12-11)
中的频率分析示例一直给我留下了深刻印象以下例如从Gutenburg项目中取出一本书并写出一个词频率分析'报告':
wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- |
sed -e 's/\.//g' -e 's/\,//g' -e 's/ /\
/g' | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr > output.txt
应该是可扩展的,以排除“公共”列表中的单词(the,and,a ...)等。
答案 4 :(得分:1)
我个人推荐Maui(http://code.google.com/p/maui-indexer/):它依赖于KeA,但以各种方式扩展它。它是可训练的,可以使用RDF格式的术语。
答案 5 :(得分:0)
我之前使用NTLK recognize named entities取得了一些成功。它特别擅长识别人员和组织的名称。