Java HTML页面比较-Levenshtein距离
我的任务是比较两个html页面的内容,比如它们之间的差异有多大。我所说的差异是指两者有多大的不同/相同w.r.t.Java HTML页面比较-Levenshtein距离,java,html,algorithm,tomcat,levenshtein-distance,Java,Html,Algorithm,Tomcat,Levenshtein Distance,我的任务是比较两个html页面的内容,比如它们之间的差异有多大。我所说的差异是指两者有多大的不同/相同w.r.t.divs、imgs、内容和其他标签(用户可以直观地解释所有差异。假设您正在比较购买产品的两个html页面,那么购买过程有3个步骤。如果我比较第2步(信用卡信息)和第3步(结帐/确认页面)然后,两个页面的购买面板外的几乎所有内容都是相同的,但内部的所有内容都是不同的。因此用户可以直观地解释这两个页面是不同的) 为此,我使用了Levenshtein距离,代码如下 /**
div
s、img
s、内容和其他标签(用户可以直观地解释所有差异。假设您正在比较购买产品的两个html页面,那么购买过程有3个步骤。如果我比较第2步(信用卡信息)和第3步(结帐/确认页面)然后,两个页面的购买面板外的几乎所有内容都是相同的,但内部的所有内容都是不同的。因此用户可以直观地解释这两个页面是不同的)
为此,我使用了Levenshtein距离,代码如下
/**
* The method levenshteinDistance() is use to calculate the distance between
* two strings
*
* @param lhs
* first string
* @param rhs
* secont sreing
* @return distance
*/
public static int levenshteinDistance(CharSequence lhs, CharSequence rhs) {
int len0 = lhs.length() + 1;
int len1 = rhs.length() + 1;
// the array of distances
int[] cost = new int[len0];
int[] newcost = new int[len0];
// initial cost of skipping prefix in String s0
for (int i = 0; i < len0; i++)
cost[i] = i;
// dynamically computing the array of distances
// transformation cost for each letter in s1
for (int j = 1; j < len1; j++) {
// initial cost of skipping prefix in String s1
newcost[0] = j;
// transformation cost for each letter in s0
for (int i = 1; i < len0; i++) {
// matching current letters in both strings
int match = (lhs.charAt(i - 1) == rhs.charAt(j - 1)) ? 0 : 1;
// computing cost for each transformation
int cost_replace = cost[i - 1] + match;
int cost_insert = cost[i] + 1;
int cost_delete = newcost[i - 1] + 1;
// keep minimum cost
newcost[i] = Math.min(Math.min(cost_insert, cost_delete), cost_replace);
}
// swap cost/newcost arrays
int[] swap = cost;
cost = newcost;
newcost = swap;
}
// the distance is the cost for transforming all letters in both strings
return cost[len0 - 1];
}
/**
*方法levenshteinDistance()用于计算
*两条线
*
*@param-lhs
*第一串
*@param-rhs
*塞康特斯林
*@返回距离
*/
公共静态int-levenshteindication(字符序列lhs、字符序列rhs){
int len0=lhs.length()+1;
int len1=rhs.length()+1;
//距离数组
int[]成本=新int[len0];
int[]newcost=newint[len0];
//跳过字符串s0中前缀的初始成本
对于(int i=0;i
问题
1) Levenshtein距离是比较两个大html页面的正确方法吗
1.1)如果是,则有时字符串长度大于120000个字符。此时,Levenshtein距离消耗了太多的资源,有时它会暂停其他进程/tomcat服务器几分钟。同样,Levenshtein距离是比较两个大html页面的正确方法吗
1.2)如果没有,那么建议我一个好的/高效的算法来比较如此大的html页面
注:我使用Java 8和tomcat 8作为服务器。如果您想知道“用户可以直观地解释所有差异”方面的差异,我认为比较代码(html)以提取差异是不合乎逻辑的。因为视觉上相同的部件可能由不同的代码生成,所以对您来说这将是误报
我可以通过截图比较页面来查看视觉上的差异。也许运行分析器会有所帮助?可能你可以试试这里提到的这个解决方案:很难给出建议,因为你没有提到你为什么要比较这些差异。例如,是否要检查其他所有内容是否相同?或者你想在评论过程中专注于差异吗?@iBiber我想检查有多少html页面是相同的。对于downvoter,请让我知道downvote的原因。我同意某些部分是由javascript操纵的。但大部分内容还是一样的。我的限制不是比较屏幕截图,而是通过html代码进行比较。