我想比较一些文本与预先构建的单词列表,特别是汽车制造商。问题是我所比较的文本是由人类编写的,并不总是可靠的。例如,我想找到“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很有用 –
这看起来很不错。以前没见过。现在尝试。 –