日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

比较两个字符串的相似度算法

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 比较两个字符串的相似度算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平時的編碼中,我們經常需要判斷兩個文本的相似性,不管是用來做文本糾錯或者去重等等,那么我們應該以什么維度來判斷相似性呢?這些算法又怎么實現呢?這篇文章對常見的計算方式做一個記錄。Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。編輯距離的算法是首先由俄國科學家Levenshtein提出的,故又叫Levenshtein Distance。我們在做數據系統的時候,經常會用到模糊搜索,但是,數據庫提供的模糊搜索并不具備按照相關度進行排序的功能。現在提供一個比較兩個字符串相似度的方法。通過計算出兩個字符串的相似度,就可以通過Linq在內存中對數據進行排序和篩選,選出和目標字符串最相似的一個結果。本次所用到的相似度計算公式是 相似度=Kqq/(Kqq+Krr+Kss) (Kq > 0 , Kr>=0,Ka>=0) 其中,q是字符串1和字符串2中都存在的單詞的總數,s是字符串1中存在,字符串2中不存在的單詞總數,r是字符串2中存在,字符串1中不存在的單詞總數. Kq,Kr和ka分別是q,r,s的權重,根據實際的計算情況,我們設Kq=2,Kr=Ks=1. 根據這個相似度計算公式,得出以下程序代碼:

///?<summary>///?獲取兩個字符串的相似度 ///?</summary>///?<param?name=”sourceString”>第一個字符串</param>///?<param?name=”str”>第二個字符串</param>///?<returns></returns>public?static?decimal?GetSimilarityWith(this?string?sourceString,?string?str){decimal?Kq?=?2;decimal?Kr?=?1;decimal?Ks?=?1;char[]?ss?=?sourceString.ToCharArray();char[]?st?=?str.ToCharArray();//獲取交集數量 int?q?=?ss.Intersect(st).Count();int?s?=?ss.Length?–?q;int?r?=?st.Length?–?q;return?Kq?*?q?/?(Kq?*?q?+?Kr?*?r?+?Ks?*?s);}

這就是計算字符串相似度的方法,但是實際應用時,還需要考慮到同義詞或近義詞的情況發生, 如“愛造人小說閱讀的更新最快”和“愛造人小說閱讀地更新最快” 。兩個字符串在一定意義上說其實是相同的,如果使用上述方法計算就會出現不準確的情況。所以在實際應用的時候,我們需要替換同義詞或近義詞,計算替換后的相似度。如果是近義詞,需要綜合替換近義詞前和近義詞后的計算結果,得出兩個字符串的實際相似度。

總結

以上是生活随笔為你收集整理的比较两个字符串的相似度算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。