我拥有的数据集是手动填写的地址。
我要找的城市是'İstanbul‘。它有一个土耳其字符,我也遇到了一些编码问题。例如,在İ字段中使用lower()‘in theİ将不会返回一个字符,我可以在正则表达式模式中使用常规的'i’来提取它。
因此,以及其他原因,我改变了模糊字符串搜索的方法。我想给我的模糊查找算法提供引用字符串:'/ist‘和'İstanbul’-这些是要在我的地址列中查找的引用值。
包含我想要捕获的短语的行示例:
...İ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行。而且它的速度非常慢。你认为有没有更有效的方法来完成这项任务?
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发布于 2021-03-29 22:55:51
这种方法做得更好。使用.process可能会有更好的结果,但作为参考:
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)发布于 2021-03-30 00:55:15
作为您自己答案的一个更快的替代方案,您可以用RapidFuzz替换FuzzyWuzzy,它具有更快的fuzz.partial_ratio实现
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)https://stackoverflow.com/questions/66854890
复制相似问题