【问题标题】:How do I extract keywords used in text? [closed]如何提取文本中使用的关键字? [关闭]
【发布时间】:2010-12-07 05:02:42
【问题描述】:

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

是否已经有软件可以做到这一点?甚至是半自动的,如果它可以过滤掉“the”、“and”、“or”等简单的词,那么我可以更快地进入主题。

【问题讨论】:

    标签: text indexing keyword data-mining


    【解决方案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://en.wikipedia.org/wiki/Terminology_extraction
    • “CorePhrase:文档聚类的关键词提取”
    • 刘等人 2009 年来自 NAACL HLT
    • “非组成短语的自动识别”
    • “数据挖掘遇上搭配发现”
    • 以及许多其他参考资料,您可以深入了解该主题。

    【讨论】:

      【解决方案2】:

      一般算法是这样的:

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

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

      您还想查看Stemming。词干用于将单词简化为词根。例如going => go、cars => car等

      这样的算法将在垃圾邮件过滤器、关键字索引等中很常见。

      【讨论】:

      【解决方案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 并取得了一些成功。它特别擅长识别人员和组织的名称。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-05-11
            • 1970-01-01
            • 2012-12-29
            • 2020-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多