资源简介
采用动态规划思想,根据最优子结构性质,求出对比代码的最长公共子序列,从而判断对比代码的相似度。本系统把分词技术和最长公共子序列有机的结合,将对比代码分割成单词或标点符号,以单词和符号为检测单元,有效的提高了检测的精准度
代码片段和文件信息
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\MainJfr
文件 1149 2017-04-02 22:47 源程序文件重复率检测系统\bin\main\MainJfr
文件 1289 2017-04-02 22:47 源程序文件重复率检测系统\bin\main\MainJfr
文件 1295 2017-04-02 22:47 源程序文件重复率检测系统\bin\main\MainJfr
文件 20024 2017-04-02 22:47 源程序文件重复率检测系统\bin\main\MainJfr
文件 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个文件信息
- 上一篇:粗糙集软件Rosetta 和中文使用方法
- 下一篇:双瑞空中充值服务器V3
相关资源
- HowNet 所有数据
- 社团发现算法实现
- springCloud入门.ppt
- 简单ssm框架实现增删改查
- 程序员面试笔试真题库_2017版.pdf
- springBoot2.0.1、zookeeper、dubbo、activemq、
- SSD3 面向对象程序设计 pdf
- 云闪付接入DEMO.zip
- 实现银行家算法(有界面 )
- dvd租赁管理系统
- spring boot+mybatis plus 在线答题系统
- 用友集团UClient
- 微服务说明ppt
- 大华摄像头直连插件webplugin.exe
- 小说管理系统
- 作业管理系统设计与实现
- 驾校管理系统源代码
- pinpoint中文学习(包含插件、警告)
- 用myeclipse实现的BBS论坛源码
- 企业内部通信系统.
- 简单的网上购物系统
- 论坛管理系统很简单适合学生党大作
- 使用itextpdf将PDF大文件拆分成若干份指
- 一款基于微信小程序的音乐播放器
- 旅游管理系统
- 数据库课程设计大作业--库存管理系统
- 通讯录管理系统.zip
- 进销管理系统
- 学生信息管理系统MVC版本
- 电影院售票后台管理系统SpringBoot+An
评论
共有 条评论