我想在我的資料庫中搜索重復項,但可能是這樣的
“最小的東西,僅此而已” “最小的東西,僅此而已” “最小的東西,僅此而已。” “最小的東西,什么都沒有”
有沒有一種簡單的方法來設計一個給出匹配權重的模糊==函式,而不是二進制真/假結果?
uj5u.com熱心網友回復:
Ruby 附帶一個名為did_you_mean它的庫,用于在您犯錯誤時提出代碼更正建議,例如"abc".downcsae會問您“您的意思是小寫嗎?”
這個庫包括一個名為的模塊DidYouMean::Levenshtein,它有一個名為distance. 此距離是 2 個字串相等所需的轉換次數示例:
s = "The smallest thing, and nothing more"
x = "The Smallest Things, And Nothing More"
DidYouMean::Levenshtein.distance(s,x)
#=> 6
DidYouMean::Levenshtein.distance(s.downcase,x.downcase)
#=> 1
盡管您需要確定閾值,但這可能對您的情況有用。
也可以通過Gem::Text模塊獲得實作,如果需要,您可以將其包含在類中,例如
class MyClass
extend Gem::Text
def self.fuzzy_equal(x:, y:, threshold:3)
levenshtein_distance(x,y) <= threshold
end
end
MyClass.fuzzy_equal?(x: s,y: x)
#=> false
MyClass.fuzzy_equal?(x: s.downcase,y: x.downcase)
#=> true
MyClass.fuzzy_equal?(x: s,y: x, threshold: 10)
#=> true
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424098.html
上一篇:Rails-部分錯誤未呈現
下一篇:將毫秒轉換為時間而不會丟失精度
