识别2个HTML页面是否相似
我正在尝试确定基本案例和提供的案例之间的差异。寻找一个图书馆,以告诉我相似的百分比或者类似的东西。
例如:
我有10个不同的HTML页面。
*它们都是404响应,只有一两行随机代码(例如时间或者一天中的报价)。
现在,当我提供一个新的404页面时,我希望返回类似"%80"的结果,但是,如果我提供另一个页面完全不同或者相同的网站,但内容却完全不同,我应该得到一些"%20类似"的东西。
基本上,我想做的是,当我收到新回复时,我想确定新回复是否类似于我之前提供的这10页。
我正在尝试在.NET中解决此问题,一个库或者一个算法推荐会很棒。
解决方案
一种快速而肮脏的方法是计算标记的Levenshtein距离。
http://en.wikipedia.org/wiki/Levenstein_distance
对于任务,运行命令行diff实用程序并分析结果就足够了。
另外,我们需要实现一个LCS算法,但对我而言,这太过分了。
for your task it would be enough to run a command line diff utility and analyze the results.
确实这不是一次工作,我需要一个集成到应用程序中的解决方案。
而diff在这里有它自己的问题,因为我不能告诉diff处理5页并忽略那些不断变化的位。
这些部分可能很大,它可以2kb的标准文本不断变化。而且我认为从diff的角度来看这是一个很大的更改,但是从我的角度来看,这只是一个部分的更改(已知在所有其他9个文件中都已更改,因此应完全忽略)。
也许差异库可以做到这一点,但我不知道这样的库。
可以使用复制/粘贴检测器(cpd)而不是使用差异工具。然后,我们可以配置一个阈值,确定我们希望文件的相似程度。
顺便说一句,我过去曾用这些来追踪学校的作弊者。
山姆
我将使用的基本算法:
解析页面的文本内容,包括新旧页面。解析时,请跟踪已处理的字节数,以供以后确定已更改的百分比。既然我们已经全面了解了情况,那么就建立起相同的锚点。对于我们已获得的每个相同点,请尝试向前和向后扩展。找出相同点之间的差距作为区别。循环遍历我们发现的每个差异差距,并对它们的字节计数求和。通过使用总数量差异字节数和故事的总字节(我们之前计算出的总字节数)来计算差异百分比。