Java HTML页面比较-Levenshtein距离

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距离,代码如下 /**

我的任务是比较两个html页面的内容,比如它们之间的差异有多大。我所说的差异是指两者有多大的不同/相同w.r.t.
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代码进行比较。