[英]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結果,並有時間編碼。
如果你對准確性有點寬松,那么我會遵循這個簡單的規則:
(strSearch == strReal)
- 如果匹配退出 從字符串中移除元音和其他字符[aeiou-"!]
現在你有兩個轉換的字符串。 你的搜索字符串:
mths dhlgrn mtbrn
和你要比較的真實字符串
rstrnt mths dhlgrn
比較轉換的字符串,如果它們匹配退出
\\W+
僅按字詞拆分搜索字符串 33
66
- 所以66%匹配 這個方法很簡單,可以擴展得越來越詳細,實際上你可以使用步驟1-7,如果步驟7返回50%以上的任何值,那么你認為你有匹配,否則你使用更復雜的計算。
好了,現在不-1我太快了,因為其他的答案是完美的,這僅僅是懶惰的開發解決方案,並可能導致的價值在那里,結果符合預期。
您可以創建一個將兩個字符串拆分為數組的函數,然后迭代其中一個字符串以檢查該字是否存在於另一個字符串中。
如果你想要它的百分比,你必須計算單詞的總數量,看看有多少是相似的,並根據它創建一個數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.