同學們的實驗報告抄襲現象嚴重,現為了防止實驗報告抄襲的惡習,讓真正撰寫實驗報告的組能夠獲得公平的分數,需要設計乙個系統能夠查詢兩個實驗報告中相同的文字內容,從而計算兩個實驗報告的相似度。
給定2個字串行x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。找到兩個序列的最長公共子串行,其長度也就是兩個序列中最長相同的文字模組數目
1、最長公共子串行
若給定序列x=,則另一串行z=,是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j=1,2,…,k有:zj=xij。
例如,序列z=是序列x=的子串行,相應的遞增下標序列為。
給定2個序列x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。
例如:x=,y=
2、問題:給定2個序列x=和y=,找出x和y
的最長公共子串行。
設序列x=和y=的最長公共子串行為
z= ,則
(1)若xm=yn,則zk=xm=yn,且zk-1是xm-1和yn-1的最長公共子串行。
(2)若xm≠yn且zk≠xm,則z是xm-1和y的最長公共子串行。
(3)若xm≠yn且zk≠yn,則z是x和yn-1的最長公共子串行。
3、表示式
c[i][j]=0 i=0,j=0;
c[i][j]=c[i-1][j-1]+1 i,j>0;xi=yj;
c[i][j]=max i,j>0;xi!=yj;
#include
#include
#include
#include
#include
"string"
#include
#include
//小學生英語作文房抄襲系統
using
namespace std;
inticslength
(string x,string y,
int*
*& b)
int i,j;
for(i=
0;i<=m;i++
)for
(j=0
;j<=n;j++
) c[i]
[j]=0;
for(i=
1;i<=m;i++
)for
(j=1
;j<=n;j++
)else
if(c[i -1]
[j]>= c[i]
[j -1]
)else
}return c[m]
[n];
}//輸出相似字數
void
ics(
int i,
int j,string x,
int*
* b)
else
if(b[i]
[j]==2)
ics(i-
1,j,x,b)
;else
ics(i,j-
1,x,b);}
intmain()
while
(fgets
(buf,
1024
,fp)
!=null
) x=buf;if(
(fp =
fopen
("c://users//administrator//desktop//xiangsidupipei"
,"r"))
==null
)while
(fgets
(buf,
1024
,fp)
!=null
) y=buf;
int*
*b;int i=
icslength
(x,y,b)
; cout<<
"相似字數:"
"相似段落:"
length()
-1,y.length()
-1,x,b)
;return0;
}
針對文字順序變換這一抄襲現象,應該進行演算法的改進。 余弦相似度匹配
今天的產品涉及到乙個相似度匹配演算法,上網查了這類演算法很多。跟研發討論,研發推薦使用余弦值相似度演算法。余弦值相似度演算法是個什麼演算法?余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。余弦值越接近1,也就是兩個向量越相似,這就叫 余弦相似性 余弦...
word2vec相似度計算 短文相似度匹配
一開始這樣的乙個思路,很清晰明了,而且網上相應的資料也很多,然後就開搞吧。1 把所有短文本去掉標點符號,用jieba分詞分好詞,去除停用詞,得到分好的文字 2 按一定規則抽取特徵詞彙,作為後期向量的每一維 3 用sklearn庫中的原生方法countvectorizer tfidfvectorize...
java演算法之 相似度匹配
package com.hxqc.pricemonitor.util 比較兩個字串的相似度 public class similarityutil private static int levenshtein distance string str1,string str2 if m 0 matri...