使用Python进行部分字符串匹配

时间:2015-07-10 13:03:58

标签: python string

我试图将一些文字与预先建立的单词列表进行比较,特别是车辆制造商。问题在于我所比较的文本是由人类编写的,并不总是可靠的。

例如,我想找到" Harley Davidson"但文本实际上说" Hardley Davidson"或其他一些粗心的错字。

我不认为我可以使用正则表达式来解决这个问题...或者我可以吗? 是否有部分字符串匹配功能?也许我可以定义必须匹配的字符串的百分比。

2 个答案:

答案 0 :(得分:0)

您可以使用fuzzywuzzy模块

from fuzzywuzzy import fuzz
fuzz.partial_ratio("Harley Davidson","Hardley Davidson")
93

有关模糊模糊的更多信息,请尝试使用此link

答案 1 :(得分:0)

称为编辑距离:https://en.wikipedia.org/wiki/Edit_distance 你可以使用NLTK或Levensthein来做到这一点 https://pypi.python.org/pypi/python-Levenshtein/

以下是使用Levenshtein(比nltk edit_distance函数更快)的示例,您首先要安装库(提供链接):

# -*- 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:

  • 我在这里放下了一切你可以做到的事情

  • 如果误导是倍数,你可以比一个更远的距离