2

我想检测文件之间的相似之处。这样做的一种方法是对文件进行编码,以减少相似性算法的输入空间,然后为结果提供更准确的结果。这是通过仅考虑文档的信息特征来完成的。这样做的一种方法是将文件转换为遵循 tf-idf 频率的向量空间转换,这会放大信息量很大的术语并缩小频繁的术语。我的问题是这是否可以在不保留其文本表示的文档中完成。例如,假设首先将文档转换为一个大整数数组,其中其字符表示为其 ASCII 值。

4

3 回答 3

3

正如@Ivan Koblik 指出的那样,字节数组中的文档编码不是问题,因为文本总是用数字数据编码。你的任务是一个标准的文档相似性检测问题。我建议以下步骤:

预处理

  • 解码
  • 标记化;
  • 外壳折叠;
  • 删除停用词;
  • 词干。

生成特征

  • 正如您所指出的, tf-idf 可能是一个不错的选择。
  • 一组加权特征构成一个高维向量。

指纹识别

使用simhash,您可以将高维向量转换为f-bit指纹,例如f=64。这正是 Google 用于检测近似重复网页的技术。

我们维护一个 f 维向量 V ,其每个维度都初始化为零。一个特征被散列成一个 f 位的散列值。这些 f 位(该特征独有)通过该特征的权重递增/递减向量的 f 个分量,如下所示:如果哈希值的第 i 位为 1,则 V 的第 i 个分量递增该特征的权重;如果哈希值的第 i 位为 0,则 V 的第 i 个分量按该特征的权重递减。处理完所有特征后,V 的某些分量为正,而其他分量为负。分量的符号决定了最终指纹的对应位。

但是,在您的情况下,您可能会发现余弦距离或欧几里德距离等其他相似性函数表现更好。simhash如果不适合您,请尝试为您的问题找到最佳相似度函数。

查询类似文件

为每个文档生成指纹后,相似的文档应该具有相似的指纹(相似意味着它们的指纹汉明距离小)。更多详情请参考 近重复网页检测

编辑

如果你不能做第一步,即解码,简单地计算每个唯一整数的出现仍然是可行的。您可以将 tf-idf 应用于这些唯一整数并遵循子序列步骤。

于 2013-01-18T20:15:44.450 回答
1

嗯有趣的问题。AFAIK 的答案是

文本文档意味着单词 ei 同义词、搭配、后缀、前缀(词干)......

大整数字节数组 无法涵盖所有​​这些内容。因此,比较转换为字节数组的文件不会告诉您是否有相似的文本。

将此答案作为标题的答案。您的问题的主体相当复杂,似乎您将更多的东西混合在一起(很难理解) - 也许提出更简单的问题会有所帮助......

于 2013-01-18T12:00:29.943 回答
1

如果您不介意 TF-IDF 方法,布隆过滤器适合您的情况:http
://research.microsoft.com/en-us/um/people/navendu/mypapers/webdb-167.pdf 这样您就可以制作矢量任意小或大取决于您对误报的容忍度。

无论如何,看看 NLP 工具包,大多数算法都可以适应任务,问题是你如何指定相似度?

如果您可以指定不同类别的文档,那么值得研究朴素贝叶斯,或者如果您想以不同方式定义相似性 MaxEnt 模型可能适合您: http ://www.kamalnigam.com/papers/maxent-ijcaiws99.pdf

于 2013-01-18T13:34:24.997 回答