咱們在作數據系統的時候,常常會用到模糊搜索,可是,數據庫提供的模糊搜索並不具有按照相關度進行排序的功能。 如今提供一個比較兩個字符串類似度的方法。 經過計算出兩個字符串的類似度,就能夠經過Linq在內存中對數據進行排序和篩選,選出和目標字符串最類似的一個結果。 本次所用到的類似度計算公式是 類似度=Kq*q/(Kq*q+Kr*r+Ks*s) (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); } 這就是計算字符串類似度的方法,可是實際應用時,還須要考慮到同義詞或近義詞的狀況發生, 如「愛造人小說閱讀的更新最快」和「愛造人小說閱讀地更新最快」 。兩個字符串在必定意義上說實際上是相同的,若是使用上述方法計算就會出現不許確的狀況。因此在實際應用的時候,咱們須要替換同義詞或近義詞,計算替換後的類似度。 若是是近義詞,須要綜合替換近義詞前和近義詞後的計算結果,得出兩個字符串的實際類似度。 摘自 kuibono