Matlab計算字串相似度

2021-08-07 05:38:52 字數 1483 閱讀 4267

執行環境:matlab

單純的計算字串的相似度,並沒有計算詞性,如tf-idf之類的;**如下:

%計算字串相似度

%乙個source字串通過插入、刪除、替換而變成target字串的操作次數越少,則兩個字串越相近。

function strsim = mystrsim(target,source) %x為字串

len1=length(source);

len2=length(target);

d=zeros(len1+1,len2+1);

for i=2:length(source)+1

d(i,1)= i;

endfor j=2:length(target)+1

d(1,j)= j;

endfor i =2:length(source)+1

for j = 2:length(target)+1

if source(i - 1) == target(j - 1)

d(i,j) = d(i-1,j-1); %不需要編輯操作

else

edins = d(i,j-1)+1; %source 插入字元

eddel = d(i-1,j)+1; %source 刪除字元

edrep = d(i-1,j-1)+1; %source 替換字元

d(i,j)= min(min(edins, eddel),edrep);

endend

endy=d(length(source)+1,length(target)+1); %最少操作次數

strsim=1/(y+1); %相似度

end

例項:1. 計算中文字串相似度:

2. 計算英文本串相似度:

3. 但是通過這種方式計算,其相似度效果不是很明顯,如下:

這裡需要注意的是:

y是操作次數,1/(1+y)就是簡易版的相似度,如果讀者覺得這樣的相似度表意不清楚的話,可以自己選擇變換函式,比如log或1/(exp()+a)之類的函式平滑下。 

這裡簡易版的相似度,讀者可以設定閾值如0.3,基本就可以了。

那麼既然它不是計算語義相似度的,那麼它有什麼用呢?

比如,現在有很多資料,這些資料是地段的樓價。然後, 想知道某地段的樓價,但是這個地段的樓價並沒有在這些資料中,這個時候就可以根據周邊的樓價去匹配,得到類似的樓價。例如:現在想知道廣州天河車陂南的房價,那麼可以找到資料中包含車陂北街,車陂北街29號,車陂*等等這些地段的房價,然後求平均得到。

計算字串的相似度

程式設計之美223頁的題目。如果他們的第乙個字元相同,那麼計算接下來的字串的距離。如果他們的第乙個字元不同,那麼 1 刪除a的第乙個字元,計算a接下來的字串和b的距離 2 刪除b的第乙個字元,計算b接下來的字串和a的距離 3 修改a的第乙個字元為b的第乙個字元,計算a接下來的字串和b接下來的字串距離...

字串的相似度計算

一 基於編輯距離的字串相似度計算 兩個字串之間的相似度可以用編輯距離來定義。所謂編輯,指的是,對字串中的任一字元進行插入,刪除和替換這三種操作。經過一定步驟的編輯,乙個字串可以變換為另乙個字串,那麼最少的編輯步數稱為兩個字串的編輯距離。這是乙個遞迴或動態規劃的問題。比如長度分別為m,n的字串str1...

計算字串的相似度

程式設計之美 3.3節 計算字串的相似度 問題 對於給定的兩個字串,用最少的操作 插入 刪除和替換,使得兩個字串相同。找出這個最少需要操作的步數。解法 1 一步操作後,再將a 2 end 和b 2 end 程式設計相同的字串 2 一步操作後,再將a 1 end 和b 2 end 程式設計相同的字串 ...