读书人

得出两个文件的相似度解决思路

发布时间: 2012-02-07 17:45:36 作者: rapoo

得出两个文件的相似度
想写一个程序,程序的功能是检测出一些电子论文中那些是互相COPY的。由此,我首先想要得出两个文件的相似度。相似度是0和1之间的数,两个相同的文件的的相似度为1。程序设定一个相似度值(如0.9),当两个文件的相似度达到这个值时就认为这两个文件中有一个是COPY的。
现在要解决的问题是如何确定两个文件的相似度。
我起初的做法是把这两个文件当做字符序列,然后求出这两个字符序列的最长公共子序列(不必连续)。那么这个最长公共子序列的长度除以两个文件中长度较小的文件的长度就是相似度。

文件A内容:
abcdefghij
文件B内容:
dacfhk
则这两个文件的最长公共子序列是acfh,长度为4。文件B的长度较小,长度为6。所以文件A和B的相似度就为4/6=0.6667。

但是当两个文件较大时我这个算法太慢了(处理的文件一般在100k到2M间),我用的求最长公共子序列的算法是O(n^2)的,当文件为100k时时间复杂度就不能忍受了。

请高手指点:有没有更好的得出两个文件相似度的想法;或者改进我上述的算法!
我这个程序主要是检测电子论文和实验报告中那些是COPY的!


[解决办法]
推荐采用以词为单位来计算两篇文章在语义上的相似度。
将一篇文章表示为由文章中的词组成的一个向量,通过计算可以获得两篇文章所代表的向量的夹角,夹角的余玄即是相似度。

读书人网 >软件架构设计

热点推荐