• 大小: 4.8MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-19
  • 语言: 其他
  • 标签: JAVA  相似度  

资源简介

采用动态规划思想,根据最优子结构性质,求出对比代码的最长公共子序列,从而判断对比代码的相似度。本系统把分词技术和最长公共子序列有机的结合,将对比代码分割成单词或标点符号,以单词和符号为检测单元,有效的提高了检测的精准度

资源截图

代码片段和文件信息

package check;

import java.util.ArrayList;

public class check_sim {
public static void main(String[] args) {
// 要比较的两个字符串
String str1 = “System out 1 1“;
String str2 = “System ou t 1 1“;
String[] str3 = str1.split(“ “);
String[] str4 = str2.split(“ “);

ArrayList str5 =cut_word(str1);
ArrayList str6 =cut_word(str2);
//levenshtein1(str5str6);
System.out.println(LSS1(str1str2));;
System.out.println(getDistance(str1str2));


}

// 最长子序列集合为参数
public static void levenshtein1(ArrayList str1  ArrayList str2) {
// 计算两个字符串的长度。
int len1 = str1.size();
int len2 = str2.size();
// System.out.println(str2.length);
// 建立上面说的数组,比字符长度大一个空间
int[][] dif = new int[len1 + 1][len2 + 1];
// 赋初值,步骤B。
for (int a = 0; a <= len1; a++) {
dif[a][0] = a;
}
for (int a = 0; a <= len2; a++) {
dif[0][a] = a;
}
// 计算两个字符是否一样,计算左上的值
int temp;
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1.get(i-1).equals(str2.get(j-1))) {
temp = 0; // System.out.println(str1[i-1]+“ “+str2[j-1]);
} else {
temp = 1; // System.out.println(str1[i-1]+“ t “+str2[j-1]);
}
// 取三个值中最小的
dif[i][j] = min(dif[i - 1][j - 1] + temp dif[i][j - 1] + 1 dif[i - 1][j] + 1);
}
}
// System.out.println(“字符串“+str1+“与“+str2+“的比较“);
// 取数组右下角的值,同样不同位置代表不同字符串的比较
System.out.println(“差异步骤:“ + dif[len1][len2]);
// 计算相似度
float similarity = 1 - (float) dif[len1][len2] / Math.max(str1.size() str2.size());
System.out.println(“相似度:“ + similarity);
}

// 最长子序列,字符串为参数
public static void levenshtein(String[] str1 String[] str2) {
// 计算两个字符串的长度。
int len1 = str1.length;
int len2 = str2.length;
// System.out.println(str2.length);
// 建立上面说的数组,比字符长度大一个空间
int[][] dif = new int[len1 + 1][len2 + 1];
// 赋初值,步骤B。
for (int a = 0; a <= len1; a++) {
dif[a][0] = a;
}
for (int a = 0; a <= len2; a++) {
dif[0][a] = a;
}
// 计算两个字符是否一样,计算左上的值
int temp;
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1[i - 1].equals(str2[j - 1])) {
temp = 0; // System.out.println(str1[i-1]+“ “+str2[j-1]);
} else {
temp = 1; // System.out.println(str1[i-1]+“ t “+str2[j-1]);
}
// 取三个值中最小的
dif[i][j] = min(dif[i - 1][j - 1] + temp dif[i][j - 1] + 1 dif[i - 1][j] + 1);
System.out.println(dif[i][j] + “ “);
}
}
// System.out.println(“字符串“+str1+“与“+str2+“的比较“);
// 取数组右下角的值,同样不同位置代表不同字符串的比较
System.out.println(“差异步骤:“ + dif[len1][len2]);
// 计算相似度
float similarity = 1 - (float) dif[len1][len2] / Math.max(str1.length str2.length);
System.out.println(“相似度:“ + similarity);
}

// 得到最小值
private static int min(int one int two int three) {
return (one = one < two ? one : two) < three ? one : three;
}

// 最长字串,字符串参数,分割单词,采用
public static int LSS1(String str1 String str2) {
ArrayList s1 =cut_word(str1);
Arr

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-02-12 21:29  源程序文件重复率检测系统\
     文件         821  2017-02-12 13:02  源程序文件重复率检测系统\.classpath
     文件         412  2017-02-03 11:20  源程序文件重复率检测系统\.project
     目录           0  2017-02-03 11:20  源程序文件重复率检测系统\.settings\
     文件         598  2017-02-03 11:20  源程序文件重复率检测系统\.settings\org.eclipse.jdt.core.prefs
     文件     1289806  2013-04-12 16:38  源程序文件重复率检测系统\ant.jar
     目录           0  2017-03-05 15:34  源程序文件重复率检测系统\bin\
     目录           0  2017-03-05 15:34  源程序文件重复率检测系统\bin\check\
     文件        6741  2017-03-19 11:48  源程序文件重复率检测系统\bin\check\check_sim.class
     文件        3050  2017-03-22 20:19  源程序文件重复率检测系统\bin\check\MainCode.class
     文件        3294  2017-03-05 15:34  源程序文件重复率检测系统\bin\check\Pdf_Word_result.class
     文件        7816  2017-03-23 20:49  源程序文件重复率检测系统\bin\check\ResultDtl.class
     文件         747  2017-03-23 20:42  源程序文件重复率检测系统\bin\check\ResultMain$1.class
     文件        2520  2017-03-23 20:42  源程序文件重复率检测系统\bin\check\ResultMain$MyRender.class
     文件        5627  2017-03-23 20:42  源程序文件重复率检测系统\bin\check\ResultMain.class
     目录           0  2017-03-19 12:42  源程序文件重复率检测系统\bin\main\
     文件         742  2017-04-02 22:47  源程序文件重复率检测系统\bin\main\MainJframe$1.class
     文件        1149  2017-04-02 22:47  源程序文件重复率检测系统\bin\main\MainJframe$2.class
     文件        1289  2017-04-02 22:47  源程序文件重复率检测系统\bin\main\MainJframe$MyWindowListener.class
     文件        1295  2017-04-02 22:47  源程序文件重复率检测系统\bin\main\MainJframe$ValueComparator.class
     文件       20024  2017-04-02 22:47  源程序文件重复率检测系统\bin\main\MainJframe.class
     文件        1992  2017-03-05 15:34  源程序文件重复率检测系统\bin\main\MainJPanel.class
     文件         389  2017-03-05 15:34  源程序文件重复率检测系统\bin\main\MyTabbedPane.class
     文件        1077  2017-03-05 15:34  源程序文件重复率检测系统\bin\main\MyTabbedPaneUI$TabbedPaneLayout.class
     文件        3039  2017-03-05 15:34  源程序文件重复率检测系统\bin\main\MyTabbedPaneUI.class
     目录           0  2017-04-02 12:00  源程序文件重复率检测系统\bin\open\
     文件        4424  2017-03-05 15:34  源程序文件重复率检测系统\bin\open\DeCompressUtil.class
     文件         389  2017-04-02 12:00  源程序文件重复率检测系统\bin\open\MyTabbedPane.class
     文件        1077  2017-04-02 12:00  源程序文件重复率检测系统\bin\open\MyTabbedPaneUI$TabbedPaneLayout.class
     文件        3039  2017-04-02 12:00  源程序文件重复率检测系统\bin\open\MyTabbedPaneUI.class
     目录           0  2017-03-09 21:18  源程序文件重复率检测系统\bin\tool\
............此处省略42个文件信息

评论

共有 条评论