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

Java 了解两个不同的pdf是否是相同的研究论文,java,pdf,hash,Java,Pdf,Hash,我想写一篇简单的研究论文。 其想法是为每篇论文建立一个包含元数据的存储库 paper_id -> [title, authors, journal, comments...] 既然有可能进口朋友的废纸堆就好了, 我正在考虑如何生成纸张的纸张id:IMHO应该生成 通过pdf的文本,保证两个不同的收藏只有在相同的论文中才有相同的ID。 目前,我使用iText库提取第一页的文本(删除可能的注释),并从文本中计算simhash示意图。 主要的问题是,有时文本会略有不同(是的,确实如此!例如和)

我想写一篇简单的研究论文。 其想法是为每篇论文建立一个包含元数据的存储库

paper_id -> [title, authors, journal, comments...]
既然有可能进口朋友的废纸堆就好了, 我正在考虑如何生成纸张的纸张id:IMHO应该生成 通过pdf的文本,保证两个不同的收藏只有在相同的论文中才有相同的ID。 目前,我使用iText库提取第一页的文本(删除可能的注释),并从文本中计算simhash示意图。 主要的问题是,有时文本会略有不同(是的,确实如此!例如和),所以我想宽容一些。 使用simhash,我可以计算出与原始文档有多少相似之处,因此,如果封装外形不在repo中,我必须遍历集合以查找 “近”脚印

我不相信这种方法,你能建议一些更好的方法来生成签名吗 (缩写、数字或字母数字)用于此类文档

我有这个想法:把第一个页面分成8个(或多或少)不重叠的方块,覆盖所有的页面,然后考虑每个方块中的文本。 并生成一个simhash签名。最后,我将有一个8x64=512-位签名,我可以考虑。
如果两张纸的simhash签名集之间的差异之和在某个treshold下,则两张纸是相同的

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


当然,在某些边缘情况下,这将失败。例如,如果您有两个文档,其中第二个文档只是第一个文档,并且复制粘贴了两次:您可能希望它们被视为相等,但您甚至不会比较它们,因为它们的长度相差太远。也有一些方法可以解决这个问题,但您可能“不需要它”。

如果您有一个函数可以输入两个文本并返回它们的相似性度量,那么您不必迭代整个存储库。 给定一篇不在存储库中的文章,您只能迭代长度大致相同的文章。例如,给定一篇包含1000个字符的文章,您将其与包含950到1050个字符的文章进行比较。为此,您需要有一个将范围映射到文章的数据结构,并且必须微调范围的大小。范围太大-每个范围内的项目太多。范围太小-未命中的可能性更高


当然,在某些边缘情况下,这将失败。例如,如果您有两个文档,其中第二个文档只是第一个文档,并且复制粘贴了两次:您可能希望它们被视为相等,但您甚至不会比较它们,因为它们的长度相差太远。也有一些方法可以解决这个问题,但你可能“不需要它”。

要比较两个文档,你可能需要使用信号处理概念,类似于对文本进行傅里叶变换。但出于您的目的,您可能会使用一些方案来识别和提取关键字,并以某种方式对它们进行排序,这可能会非常有效。当然,一个问题是同一篇基础论文可能会在不同的期刊上重复3-4次——它们是相同的还是不同的?是的,这是另一个问题。。它们应该是不同的,但是人们应该在每篇论文中添加额外的内容,这样就不会发生这种情况,这个工具也可以用于审查;)显然,另一件事是提取作者的姓名,并将其作为第一项资格(假设你无意发现剽窃)。这很复杂,因为从pdf中提取作者很难,因此我应该用标题查询谷歌或其他外部服务。。而且通常作者的名字是以不同的方式写的,所以mmm你应该做的另一件事是检查出版信息的底边,例如“CIKM'08,2008年10月26-30日,美国加利福尼亚州纳帕谷。版权所有2008 ACM 978-1-59593-991-3/08/10…$5.00。”它通常不会帮助你识别重复,但是你可以将它用于其他交叉引用的目的。好吧,要比较两个文档,你可能需要使用信号处理的概念,类似于对文本进行傅里叶变换。但出于您的目的,您可能会使用一些方案来识别和提取关键字,并以某种方式对它们进行排序,这可能会非常有效。当然,一个问题是同一篇基础论文可能会在不同的期刊上重复3-4次——它们是相同的还是不同的?是的,这是另一个问题。。它们应该是不同的,但是人们应该在每篇论文中添加额外的内容,这样就不会发生这种情况,这个工具也可以用于审查;)显然,另一件事是提取作者的姓名,并将其作为第一项资格(假设你无意发现剽窃)。这很复杂,因为从pdf中提取作者很难,因此我应该用标题查询谷歌或其他外部服务。。而且通常作者的名字是以不同的方式写的,所以mmm你应该做的另一件事是检查出版信息的底边,例如“CIKM'08,2008年10月26-30日,美国加利福尼亚州纳帕谷。版权所有2008 ACM 978-1-59593-991-3/08/10…$5.00。”它通常不会帮助你识别重复,但是你可以把它用于其他交叉引用的目的