如何提取文本中使用的关键字? [关闭]
Posted
技术标签:
【中文标题】如何提取文本中使用的关键字? [关闭]【英文标题】:How do I extract keywords used in text? [closed] 【发布时间】:2010-12-07 05:02:42 【问题描述】:如何通过数据挖掘一堆文本以获取关键字? (“雅各布·史密斯”或“栅栏”)
是否已经有软件可以做到这一点?甚至是半自动的,如果它可以过滤掉“the”、“and”、“or”等简单的词,那么我可以更快地进入主题。
【问题讨论】:
【参考方案1】:这是 NLP 中的一个开放式问题,因此没有简单的答案。
我对快速而肮脏的“为我工作”的推荐是topia.termextract。
Yahoo 有一个关键字提取服务 (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/) 是英国的 Web 服务,也比较嘈杂,并且提出了许多虚假关键字。但是,在我看来,它比topia.termextract 稍微准确一些。 YMMV。
对包含过多关键字(例如,topia.termextract 和 termine)的结果进行去噪的一种方法是创建一个包含频繁出现的术语的词汇表,然后丢弃不在词汇表中的建议术语。换句话说,对你的语料库做两次遍历:第一次遍历,计算每个关键字的频率。在第二遍中,丢弃太稀有的关键字。
如果你想自己写,也许最好的介绍是由现在在 IBM 工作的 Park 写的:
http://portal.acm.org/citation.cfm?id=1072370 上提供“自动词汇表提取:超越术语识别” “IBM 技术支持信息搜索和交付系统中的词汇提取和利用”如果您想了解更多信息,这里还有一些参考资料:
http://en.wikipedia.org/wiki/Terminology_extraction “CorePhrase:文档聚类的关键词提取” 刘等人 2009 年来自 NAACL HLT “非组成短语的自动识别” “数据挖掘遇上搭配发现” 以及许多其他参考资料,您可以深入了解该主题。【讨论】:
【参考方案2】:一般算法是这样的:
- 获取文本 - 去除标点符号、特殊字符等。 - 去掉“简单”的词 - 分割空间 - 循环分割文本 - 如果单词不存在,则将单词添加到 Array/HashTable/Etc; 如果是,则增加该单词的计数器最终结果是文本中所有单词的频率计数。然后,您可以取这些值并除以总词数以获得频率百分比。任何进一步的处理都取决于您。
您还想查看Stemming。词干用于将单词简化为词根。例如going => go
、cars => car
等
这样的算法将在垃圾邮件过滤器、关键字索引等中很常见。
【讨论】:
你能提供一些来源 -> 去除“简单”单词列表。我找不到他们 在自然语言中,“简单”词最常被称为停用词。 en.wikipedia.org/wiki/Stop_words。周围有很多 stopwords.txt 文件......例如。 ir.dcs.gla.ac.uk/resources/linguistic_utils/stop_words 英文停用词列表:xpo6.com/list-of-english-stop-words【参考方案3】:还有一个服务叫Alchemy,可以做词条提取、概念标注、情感分析等。
它是有效的,我测试过,但我不知道他们的商业政策(如果有的话)。 它们为任何类型的语言(几乎)提供 API。
我在某处读到(对不起,我不记得在哪里了)Alchemy 给出的输出与 Joseph 提出的输出相比噪音要小。
【讨论】:
Alchemy
看起来非常有效。但是有离线等价物吗? Coz,在处理大量数据时,基于云的解决方案似乎效率较低。
有一个看起来很有前途的 Python 工具包(来自我之前做过的一些经验评估):nltk.org【参考方案4】:
你没有指定你正在使用的技术,所以我猜一个 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...)等中排除单词。
【讨论】:
【参考方案5】:我个人推荐 Maui (http://code.google.com/p/maui-indexer/):它依赖于 KeA,但以多种方式扩展它。它是可训练的并且可以使用 RDF 格式的术语。
【讨论】:
【参考方案6】:我之前使用 NTLK 到 recognize named entities 并取得了一些成功。它特别擅长识别人员和组织的名称。
【讨论】:
以上是关于如何提取文本中使用的关键字? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章