簡體   English   中英

如何在C#中檢查兩個字符串的部分相似性

[英]How to check a partial similarity of two strings in C#

C#中是否有任何函數檢查兩個字符串的相似度百分比?

例如我有:

var string1="Hello how are you doing"; 
var string2= " hi, how are you";

function(string1, string2) 

將返回相似比,因為行中存在“how”,“are”,“you”等字樣。

或者甚至更好,給我60%的相似度,因為“how”,“are”,“you”是string1的3/5。

C#中是否存在任何功能?

字符串相似性的常用度量是所謂的Levenshtein距離編輯距離 在該方法中,定義了一組定義的編輯操作。 Levenshtein距離是從第一個字符串獲得第二個字符串所需的最小編輯步驟數。 Damerau-Levenshtein距離密切相關,它使用一組不同的編輯操作。

在算法上,Levenshtein距離可以使用動態編程來計算,這可以被認為是有效的。 但請注意,這種方法實際上並不考慮單個單詞,也不能直接表示百分比的相似性。

現在我要冒一個-1來獲取我的建議,但是在你想要獲得接近但不那么復雜的東西的情況下,那么有很多比Levenshtein距離更簡單的解決方案,如果你是完美的需要exakt結果,並有時間編碼。

如果你對准確性有點寬松,那么我會遵循這個簡單的規則:

  1. 首先比較文字(strSearch == strReal) - 如果匹配退出
  2. 搜索字符串和實際字符串轉換為小寫
  3. 從字符串中移除元音和其他字符[aeiou-"!]

    現在你有兩個轉換的字符串。 你的搜索字符串:

     mths dhlgrn mtbrn 

    和你要比較的真實字符串

     rstrnt mths dhlgrn 
  4. 比較轉換的字符串,如果它們匹配退出

  5. 通過簡單的拆分功能或使用正則表達式\\W+僅按字詞拆分搜索字符串
  6. 通過將100除以部件的數量來計算一個部件的虛擬值(重量) - 在這種情況下為33
  7. 搜索字符串的每個部分與真實字符串進行比較(如果包含),並將每個匹配的值添加到總權重中。 在這種情況下,我們有三個元素和兩個匹配,所以結果是66 - 所以66%匹配

這個方法很簡單,可以擴展得越來越詳細,實際上你可以使用步驟1-7,如果步驟7返回50%以上的任何值,那么你認為你有匹配,否則你使用更復雜的計算。

好了,現在不-1我太快了,因為其他的答案是完美的,這僅僅是懶惰的開發解決方案,並可能導致的價值在那里,結果符合預期。

您可以創建一個將兩個字符串拆分為數組的函數,然后迭代其中一個字符串以檢查該字是否存在於另一個字符串中。

如果你想要它的百分比,你必須計算單詞的總數量,看看有多少是相似的,並根據它創建一個數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM