我在考虑写一个简单的研究论文经理。这样做的目的是为每一篇论文建立一个包含其元数据的存储库。
paper_id -> [title, authors, journal, comments...]既然有可能导入朋友的转储文件,我正在考虑如何生成论文的paper_id : IMHO应该由pdf文本生成,以保证两个不同的集合只有相同的文件才有相同的ids。目前,我使用iText库(删除可能的注释)提取第一个页面的文本,并从文本中计算出一个simhash足迹。主要的问题是,有时文本略有不同(是的,它发生了!)例如,这和这),所以我想要宽容。使用simhash,我可以计算出原始文档有多相似,因此,如果没有在回购中留下足迹,我将不得不在集合中进行迭代,寻找“接近”的足迹。
我不相信这种方法,你能提出一些更好的方法来为这类文件制作签名(简称、数字或字母数字)吗?
UPDATE I有这样的想法:将第一页划分为8个(或多或少)不重叠的方块,覆盖整个页面,然后考虑每个方块中的文本并生成一个简单的签名。最后,我将有一个8x64=512bit签名,如果它们的simhash签名集之间的差异之和在一定时间内,我可以考虑两个文档相同。
发布于 2012-10-07 17:46:44
如果您实际上有一个输入两个文本并返回其相似性度量的函数,则不必迭代整个存储库。给定一个不在存储库中的项目,您只能迭代长度大致相同的文章。例如,给定一篇具有1000个字符的文章,您将将其与950到1050字符之间的文章进行比较。为此,您将需要一个将范围映射到文章的数据结构,并且您必须微调范围的大小。范围太大-太多的项目在每个范围内。范围太小-更高的潜力的失误。
当然,在某些边缘情况下,这将失败。例如,如果您有两个文档,第二个只是粘贴了两次的第一个文档:您可能希望它们被认为是相等的,但是由于它们的长度相距太远,所以甚至不会比较它们。也有一些方法可以解决这个问题,但是你可能不会需要它。
https://stackoverflow.com/questions/12762045
复制相似问题