首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fuzzywuzzy

使用fuzzywuzzy
EN

Stack Overflow用户
提问于 2021-03-29 21:13:50
回答 2查看 73关注 0票数 0

我拥有的数据集是手动填写的地址。

我要找的城市是'İstanbul‘。它有一个土耳其字符,我也遇到了一些编码问题。例如,在İ字段中使用lower()‘in theİ将不会返回一个字符,我可以在正则表达式模式中使用常规的'i’来提取它。

因此,以及其他原因,我改变了模糊字符串搜索的方法。我想给我的模糊查找算法提供引用字符串:'/ist‘和'İstanbul’-这些是要在我的地址列中查找的引用值。

包含我想要捕获的短语的行示例:

代码语言:javascript
复制
...İSYTANBUL...
...isanbul...
...Istanbul...
...İ/STANBUL...
...,STANBUL/ÜSKÜDAR...
isatanbul
iatanbul
İSTRANBUL
isytanbul
/isanbul

这些都是完整的地址,所以我发现与ratio相比,partial_ratio更好地工作。

我的目标是在行级上使用带有字符串‘ist’或'/ist‘的fuzzywuzzy.partial_ratio。并使用得分partial_ratio返回来获取该行索引的首选列-referenced在代码中作为'istanbul mu'的True或False。

下面是我开发的代码,但每次我运行它时,它都会停在大约25k行。而且它的速度非常慢。你认为有没有更有效的方法来完成这项任务?

代码语言:javascript
复制
def fuzzy(string, df, columnname):
        fullrange = len(df[columnname])
        for i in range(fullrange):
            if fuzz.partial_ratio(string, df[columnname][i]) > 70:
                df.loc[df.index == i, 'istanbul mu'] = True
            else:
                df.loc[df.index == i, 'istanbul mu'] = False
EN

回答 2

Stack Overflow用户

发布于 2021-03-29 22:55:51

这种方法做得更好。使用.process可能会有更好的结果,但作为参考:

代码语言:javascript
复制
def applyfuzzy(row):
    if fuzz.partial_ratio('the string', row['column holding the address to be queried']) > 65:
        return True
    else:
        return False
df['preferredcolumn'] = df.apply(applyfuzzy, axis=1)
票数 1
EN

Stack Overflow用户

发布于 2021-03-30 00:55:15

作为您自己答案的一个更快的替代方案,您可以用RapidFuzz替换FuzzyWuzzy,它具有更快的fuzz.partial_ratio实现

代码语言:javascript
复制
from rapidfuzz import fuzz
def applyfuzzy(row):
    return fuzz.partial_ratio('the string', row['address_column'], score_cutoff=70) > 70

df['column'] = df.apply(applyfuzzy, axis=1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66854890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档