我想比較一些文本與預先構建的單詞列表,特別是汽車製造商。問題是我所比較的文本是由人類編寫的,並不總是可靠的。例如,我想找到「Harley Davidson」,但文中實際上寫着「Hardley Davidson」或其他粗心的錯字。與Python部分字符串匹配
我不認爲我可以使用正則表達式來解決這個問題......或者我可以嗎? 是否有部分字符串匹配功能?也許我可以定義一個必須匹配的字符串的百分比。
我想比較一些文本與預先構建的單詞列表,特別是汽車製造商。問題是我所比較的文本是由人類編寫的,並不總是可靠的。例如,我想找到「Harley Davidson」,但文中實際上寫着「Hardley Davidson」或其他粗心的錯字。與Python部分字符串匹配
我不認爲我可以使用正則表達式來解決這個問題......或者我可以嗎? 是否有部分字符串匹配功能?也許我可以定義一個必須匹配的字符串的百分比。
你可以使用fuzzywuzzy模塊
from fuzzywuzzy import fuzz
fuzz.partial_ratio("Harley Davidson","Hardley Davidson")
93
更多模糊wuzzy和它的方法試試這個link
看起來不錯。你有足夠的經驗來了解一個適當的比例作爲閾值嗎? 75%可能是我首先想到的。 –
@WilliamKeidel有很多方法看第二個鏈接,然後選擇一個合適的方法然後考慮閾值 – The6thSense
這就是所謂的編輯距離:https://en.wikipedia.org/wiki/Edit_distance 您可以使用NLTK或Levensthein https://pypi.python.org/pypi/python-Levenshtein/做
這裏是一個使用Levenshtein(比nltk edit_distance函數更快)的例子,你首先安裝ton圖書館(鏈接提供):
# -*- coding:utf-8 -*-
import Levenshtein
mylist = ["harley davidson", "kawazaki"]
for element in mylist:
if Levenshtein.distance(element.lower(), "Hardley Davidson".lower()) == 1:
print("same word with mispelling")
BTW:
我降低情況下,這裏的一切,你可以做到這一點或不
你可以,但不是一個,如果mispellings是一個更大的距離倍數
嘗試模糊wuzzy – The6thSense
http://streamhacker.com/2011/10/31/fuzzy-st ring-matching-python /你會發現nltk很有用 –
這看起來很不錯。以前沒見過。現在嘗試。 –