C#比較兩個字串的相似性【轉】

來源:互聯網
上載者:User

標籤:代碼   linq   比較   base   實際應用   系統   存在   length   mil   

 

原文地址:http://www.2cto.com/kf/201202/121170.html

我們在做資料系統的時候,經常會用到模糊搜尋,但是,資料庫提供的模糊搜尋並不具備按照相關度進行排序的功能。

現在提供一個比較兩個字串相似性的方法。
通過計算出兩個字串的相似性,就可以通過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);
}

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

C#比較兩個字串的相似性【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.