【发布时间】:2021-03-27 17:03:54
【问题描述】:
我有超过 500k 的城市名称记录,但数据输入不正确,例如单词 AHMADNAGAR 按以下方式输入,
1. AEHMADNAGAR
2. AHEMADNAGR
3. AHMAD NAGAR
4. AHMADNAGGAR
这是仅一个城市的示例,我必须扫描超过 50 万条记录并希望找到相似但不完全相似的单词。
我创建了 .txt 文件并分享了链接,其中包括了 17K 城市,请参阅文件 Here
我尝试了什么?
from difflib import get_close_matches
def closeMatches(patterns, word):
print(get_close_matches(word, patterns))
citylist=['AHMADNAGAR','XYZ','AEHMADNAGAR','AHEMADNAGR','AHMADNAGAR','AHMADNAGGAR','ABC','test','test2']
for city in citylist:
closeMatches(patterns, city)
预期输出:(当我们传递 city 运行时它应该打印相似的值但不完全相似,即使我已经删除了相似的值,我们没有任何重复)
example output of one city ( we have 500K cities, please check file, I included some of them there )
AHMADNAGAR
AEHMADNAGAR
AHEMADNAGR
AHMADNAGAR
AHMADNAGGAR
这里的问题是,不能在这里传递city 来手动创建pattern 另一个问题是它没有显示所有变化。
我从朋友那里得知我们可以使用regex,但是如何使用呢?有什么方法可以创建regex runtime 并将其与所有记录匹配
只想获取相似城市列表
【问题讨论】:
-
我认为
get_close_matches是您想要使用的,但您正在反向使用它。您能否扩展您的代码以包含citylist和所需的输出? -
我刚刚更新了所需的输出,您可以检查一下吗?
-
在您的示例中,您只需要匹配一个城市 (AHMADNAGAR),这使得这只是对
get_close_matches的一次简单调用。 -
注意:我希望从您的描述中得到两个列表——一个(拼写正确的)城市名称列表和一个(可能拼写错误的)用户输入列表。如果这确实是您要解决的问题,请更新您的示例以显示列表和预期输出!