python - 字符串匹配 - 使用的最佳距离算法
问题描述
我有两个数据框,df1
并且df2
,其中包含有关投票站的信息。数据帧具有不同的长度。两个数据框都有一个名为 的列ps_name
,这是投票站的名称,还有一个名为 的列district
,表示投票站位于哪个区。
我试图在ps_name
列上阻塞的同时匹配列上的字符串,因此我可以将匹配项上的(纬度和经度)列从district
复制到。geolocations
df1
df2
到目前为止,我已经尝试在阈值处使用jaro-winkler0.88
来比较字符串。
# Matched:
**df1:** AGRICULTURAL OFFICE ATTOCK (MALE) I (P)
**df2:** AGRICULTURAL OFFICE ATTOCK (MALE) (P)
# Did not match:
**df1:** govt girls high school peoples colony attock ii
**df2:** high school peoples colony attock ii
我应该使用什么字符串距离算法?我试过jaro-winkler并且也在考虑smith-waterman。
解决方案
一种选择是使用在fuzzywuzzy(或此处)包中实现的Levenshtein距离,该算法在O(n + d^2)中运行,其中n是较长字符串的长度,d是编辑距离。
例子:
from fuzzywuzzy import fuzz
fuzz.ratio('govt girls high school peoples colony attock ii','high school peoples colony attock ii')
#87
fuzz.ratio('AGRICULTURAL OFFICE ATTOCK (MALE) I (P)', 'AGRICULTURAL OFFICE ATTOCK (MALE) (P)')
#97
推荐阅读
- sql - 如何在查询中将格式为“0.25”的 nvarchar 转换为负小数
- python - 为什么当我编码时我的障碍物仍然会彼此相邻产生,所以它们不会?
- javascript - 如何修改 PDF 文件属性/元数据值?
- ansible - 如何在 Ansible 中运行 Cisco NX-OS Bash shell 命令?
- python - 如何使用正则表达式删除字符串数字
- ios - TableViewCell 受制图限制,高度不正确
- javascript - Javascript计算重复的数组值,直到它改变
- php - 如果我删除数据并将其插入另一个表,如何获取数据?
- python - 如何在 Altair 水平条形图中将轴标签移动到另一侧
- r - 为什么 mle 函数不能以上下限运行?