如何在大量文本中找到常用短语

Posted

技术标签:

【中文标题】如何在大量文本中找到常用短语【英文标题】:How to find common phrases in a large body of text 【发布时间】:2010-12-28 02:11:33 【问题描述】:

我目前正在做一个项目,我需要从大量文本中挑选出最常用的短语。例如,假设我们有如下三个句子

狗从女人身上跳了下来狗跳进了车里狗跳了上了楼梯。

从上面的示例中,我想提取“the dog jumped”,因为它是文本中最常见的短语。起初我想,“哦,让我们使用有向图[带有重复节点]”:

directed graph http://img.skitch.com/20091218-81ii2femnfgfipd9jtdg32m74f.png

编辑:抱歉,我犯了一个错误,让这个图表“over”、“into”和“up”都应该链接回“the”。

我打算统计每个节点对象中单词出现的次数(“the”是 6;“dog”和“jumped”是 3;等等),但尽管有许多其他问题,但主要的问题当我们添加更多示例时出现(请忽略错误的语法:-)):

狗跳上跳下。 狗像以前没有狗一样跳跃。 狗高兴地跳了起来。

我们现在遇到了一个问题,因为“dog”会启动一个新的根节点(与“the”处于同一级别)并且我们无法识别“dog jumped “现在是最常见的短语。所以现在我在想也许我可以使用无向图来映射所有单词之间的关系并最终挑选出常用短语,但我不确定这将如何工作,因为你失去了重要的顺序关系的话。

那么对于如何识别大量文本中的常用短语以及我将使用什么数据结构,是否有人有任何一般的想法。

谢谢, 本

【问题讨论】:

我无法提供任何关于要使用的算法的具体信息。但是,您是否注意到用于表示和操作图形的 igraph 的到来?我使用 Python 和它的绑定使底层产品看起来非常漂亮。 igraph.sourceforge.net 只是链接回后面的帖子***.com/questions/8898521/… 【参考方案1】:

查看这个相关问题:What techniques/tools are there for discovering common phrases in chunks of text? 也与the longest common substring problem 相关。

我以前发布过这个,但我使用R 来完成我所有的数据挖掘任务,它非常适合这种分析。特别是查看tm 包。以下是一些相关链接:

Journal of Statistical Computing 关于包的论文:http://www.jstatsoft.org/v25/i05/paper。这篇论文包括一个很好的例子来分析 R-devel 2006 年的邮件列表 (https://stat.ethz.ch/pipermail/r-devel/) 新闻组帖子。 包首页:http://cran.r-project.org/web/packages/tm/index.html 看介绍性的小插曲:http://cran.r-project.org/web/packages/tm/vignettes/tm.pdf

更一般地说,有大量的文本挖掘包on the Natural Language Processing view on CRAN。

【讨论】:

我不相信最长的公共子串问题可以解决这个问题,因为从我所读的内容来看,LCS 算法会偏爱更长的不太受欢迎的公共字符串,而不是较短的更受欢迎的公共字符串,正确如果我错了。 R 看起来很有趣,我之前只看过它,一定会再看一遍。谢谢。 从上面的链接中,Norman Ramsey 建议使用 n-gram 应该会有所帮助。 原来我是无知的,这导致我解决了我的问题。 :)

以上是关于如何在大量文本中找到常用短语的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:如何从输入的表单中找到相似的短语或文本?

在两段文本之间寻找匹配的短语?

文本分类 - 如何找到对决策影响最大的特征

返回全文搜索中找到的短语的周围文本,SQL 2005

文本分类,如何将文本字符串转换为向量表示

使用 R TM 包查找 2 和 3 词短语