繁体   English   中英

如何从很多页面上获得相似的文本?

[英]how to get the similar texts from a lot of pages?

将x个最相似的文本从很多文本转换为一个文本。

也许将页面更改为文本更好。

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

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

通过描述眼前的具体问题和相关要求,可能会为您提供更多指导。 同时,以下内容提供了一些总体思路。

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

一些简单的指标是:

  • 最长共同词序列的长度
  • 常用字数
  • 大于n个单词的常见单词序列数
  • 每个文档中前n个最常用单词的常用单词数。
  • 文件长度

上面的某些指标在归一化后效果更好(例如,避免偏爱长页面,因为长页面的绝对大小有更多机会与其他页面使用相似的单词)

更复杂和/或计算量大的测量是:

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

通常,我们可以区分度量/算法,其中每个文档的大部分计算都可以完成一次,然后进行一次额外的遍历,以比较或组合这些度量(相对较少的额外计算),而不是需要成对处理要比较的文件。

在选择一种(或者实际上是几种这样的度量,再加上一些权重系数)之前,重要的是要考虑其他因素,除了本身的相似性度量。 例如,可能对...有利

  • 以某种方式规范化文本(特别是在网页的情况下,由于与页面相关联的所有“装饰”,使得相似的页面内容或相似的段落看起来不太相似:页眉,页脚,广告面板,不同标记等)
  • 漏洞利用标记(例如:比纯文本中的相似性更重视标题或表格中的相似性。
  • 识别并消除与域相关(甚至是众所周知)的表达式。 例如,两个完全不同的文件可能看起来很相似,因为它们有两个“样板”段落,它们属于某个法律免责声明或一些通用描述,与每个文件内容的实质并不真正相关。

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

一切都取决于您所说的“相似”。 如果您的意思是“关于同一主题”,那么寻找匹配的N-gram通常效果很好。 例如,只需将三元组映射到包含它们的文本,然后将所有文本中的所有三元组放入该映射即可。 然后,当您要使文本匹配时,在地图中查找所有三元组,并选择返回的最频繁的文本(可能经过一定长度的归一化处理)。

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

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

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

拥有差异函数后,只需简单地计算当前文档与其他文档之间的差异,然后返回最接近的其他文档即可。

如果您需要大量执行此操作并且文档很多,那么问题就会变得更加棘手。

我不知道类似的意思,但是也许您应该将文本加载到Lucene这样的搜索系统中,然后将“一个文本”作为查询来呈现。 Lucene确实对文本进行了预索引,因此可以根据您的要求在查询时快速找到最相似的文本(根据其灯光)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM