有沒有辦法執行一個模糊的「startswith」,如果第一個字符串以接近第二個字符串開始,它會返回true?我的第一個想法是使用編輯距離閾值,但我不知道如何在startswith的情況下做到這一點。模糊Startswith
例子:
first_str = "My nam is Hello World"
second_str = "My name is"
first_str.startswith(second_str) == True
有沒有辦法執行一個模糊的「startswith」,如果第一個字符串以接近第二個字符串開始,它會返回true?我的第一個想法是使用編輯距離閾值,但我不知道如何在startswith的情況下做到這一點。模糊Startswith
例子:
first_str = "My nam is Hello World"
second_str = "My name is"
first_str.startswith(second_str) == True
fuzzywuzzy可以幫助解決的
>>> from fuzzywuzzy import fuzz
>>> fuzz.partial_ratio("my name is joran","my nam is")
你需要pip install fuzzywuzzy
,那麼你只需要選擇一個比例是「真」,這並不necesarily意味着「它啓動「我們可以做到這一點與幫助功能雖然
def fuzzy_startswith(needle,haystack):
n_words = len(needle.split())
haystack_startswith = " ".join(haystack.split()[:n_words])
return fuzz.ratio(needle,haystack_startswith)
fuzzy_startswith("my nam is","my name is joran")
此外,您可能希望將所有內容都轉換爲相同的大小寫,例如'.upper()'或'.lower()'。 'fuzzywuzzy'似乎與案例有關(無論如何,默認情況下)。這可以產生比直覺結果更少的結果:'haystack ='我的名字是joran''返回40.'haystack ='我的叔叔是joran''返回74. –
這工作,謝謝! – user2155400
這取決於什麼計數作爲'關閉' 。你可能想看看[Levenshtein Distance](https://en.wikipedia.org/wiki/Levenshtein_distance) – DJMcMayhem
你能否提供更多模糊啓動的例子,它返回'True',允許多少種差異,這有什麼關係嗎?命令? – depperm
我會說我的門檻是Levenshtein距離比率高於0.8左右。如果這有幫助,我可以添加更多示例。 – user2155400