了解两种不同的pdf是否是相同的研究论文

时间:2012-10-06 17:23:07

标签: java pdf hash

我正在考虑写一个简单的研究论文管理员。 我们的想法是拥有一个存储库,其中包含每篇论文的元数据

paper_id -> [title, authors, journal, comments...]

因为很有可能导入朋友的纸质转储, 我正在考虑如何生成论文的paper_id:应该制作恕我直言 通过pdf的文本,保证两个不同的集合仅对相同的论文具有相同的ID。 目前,我使用iText库提取第一页的文本(删除可能的注释),并从文本中计算simhash足迹。 主要问题是有时文本略有不同(是的,它发生了!例如thisthis)所以我想要宽容。 使用simhash,我可以计算与原始文档的相似程度,因此如果足迹不在repo中,我将不得不迭代搜索集合 '靠近'脚印。

我不相信这种方法,你能否提出一些更好的方法来制作签名 (这些文件的简称,数字或字母数字)?

更新我有这样的想法:将第一页划分为8个(或多或少)不重叠的正方形,覆盖所有页面,然后考虑每个正方形中的文本 并生成一个simhash签名。最后,我将有一个8x64 = 512bit签名,我可以考虑 如果他们的simhash签名集之间的差异总和低于某个阈值,则两篇论文相同。

1 个答案:

答案 0 :(得分:1)

如果您实际上有一个输入两个文本并返回其相似性度量的函数,则不必迭代整个存储库。 鉴于文章不在存储库中,您只能迭代具有大致相同长度的文章。例如,如果文章有1000个字符,您将把它与950到1050个字符的文章进行比较。为此,您需要具有将范围映射到文章的数据结构,并且您必须微调范围的大小。范围太大 - 每个范围内的项目太多。范围太小 - 错过了更高的潜力。

当然,在某些边缘情况下会失败。例如,如果你有两个文件,第二个只是第一个被复制粘贴两次的文件:你可能希望它们被认为是相同的,但你甚至不会比较它们,因为它们的长度相隔太远。还有一些方法可以处理,但你可能“不需要它”。