如何从很多页面获取类似的文本?

时间:2009-10-19 04:51:29

标签: algorithm data-mining text-processing similarity

从大量文本中获取x个最相似的文本到一个文本。

可能会将页面更改为文本更好。

您不应该将文本与每个文本进行比较,因为它太慢了。

5 个答案:

答案 0 :(得分:4)

识别类似文档/页面的能力,无论是网页还是更一般的文本形式甚至是代码,都具有许多实际应用。这个主题在学术论文和不太专业的论坛中得到很好的体现。尽管文档相对丰富,但很难找到与特定案例相关的信息和技术。

通过描述手头的具体问题和相关要求,可以为您提供更多指导。与此同时,以下提供了一些一般性的想法。

可以使用许多不同的功能来衡量,以某种方式,页面的相似性。选择这些功能中的一个(或可能是几个)取决于各种因素,包括可以分配问题的时间和/或空间量以及噪声所需的容差水平。

一些较简单的指标是:

  • 最常见的单词序列的长度
  • 常用词数
  • 超过n个单词的常用单词序列数
  • 每个文档中前n个最常用单词的常用单词数。
  • 文件的长度

上面的一些指标在规范化时效果更好(例如,为了避免使用长页面,通过它们的大小有更多机会与其他页面具有相似的单词)

更复杂和/或计算成本更高的测量是:

  • 编辑距离(实际上是一个通用术语,因为有很多方法可以测量编辑距离。一般来说,这个想法是测量将一个文本转换为另一个文本需要多少[编辑]操作。)
  • 从Ratcliff / Obershelp算法派生的算法(但计算单词而不是字母)
  • 基于线性代数的测量
  • 贝叶斯拟合等统计方法

一般来说,我们可以区分测量/算法,其中大部分计算可以针对每个文档进行一次,然后是额外的传递,旨在比较或组合这些测量(相对较少的额外计算),而不是算法需要处理要成对比较的文件。

在选择一个(或实际上几个这样的测量,以及一些加权系数)之前,除了相似性测量本身之外,考虑其他因素是很重要的。例如,......可能是有益的。

  • 以某种方式规范化文本(在网页的情况下,特别是类似的页面内容,或类似的段落看起来不太相似,因为与页面相关的所有“礼仪”:页眉,页脚,广告面板,不同的标记等。)
  • 利用标记(例如:对标题或表格中的相似性给予更多权重,而不是纯文本中的相似之处。
  • 识别并消除与域相关(甚至通常已知)的表达式。例如,两个完全不同的文件可能看起来相似,它们共有两个“锅炉板”段落,与某些法律免责声明或某些通用描述相关,并不真正与每个文件内容的本质相关联。

答案 1 :(得分:1)

标记文本,删除停用词并排列术语向量。计算tf-idf。将所有向量排列在矩阵中并计算它们之间的距离以找到类似的文档,例如使用Jaccard索引。

答案 2 :(得分:1)

一切取决于“相似”的含义。如果你的意思是“关于同一主题”,寻找匹配N-grams通常效果很好。例如,只需将三元组中的地图制作成包含它们的文本,然后将所有文本中的所有三元组放入该地图中。然后当你得到你的文本匹配时,在你的地图中查找它的所有三元组并选择最常回复的文本(可能有一些长度标准化)。

答案 3 :(得分:0)

您必须定义一个函数来衡量两个页面之间的“差异”。我可以想象各种这样的功能,其中一个必须为您的域选择:

  • 关键字集的差异 - 您可以修剪字典中最常用字词的文档,然后以每个文档的唯一关键字列表结束。然后差异函数将差异计算为每个文档的关键字集的差异。

  • 文字差异 - 根据使用文字差异算法将一个文档转换为另一个文档所需的编辑次数计算每个距离(请参阅Text Difference Algorithm

一旦你有差异功能,只需计算当前doc与其他所有doc的差异,然后返回最接近的另一个doc。

如果你需要做很多事情而且你有很多文件,那么问题会变得有点困难。

答案 4 :(得分:0)

我不知道你的意思是类似的,但也许你应该把你的文本加载到像Lucene这样的搜索系统中,并将它作为查询提出“一个文本”。 Lucene会对文本进行预索引,以便在查询时可以快速找到最相似的文本(通过它的灯光),如您所知。