Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表中找到相似但不精确的值?_Python_Regex_List_Bigdata - Fatal编程技术网

Python 如何从列表中找到相似但不精确的值?

Python 如何从列表中找到相似但不精确的值?,python,regex,list,bigdata,Python,Regex,List,Bigdata,我有超过500k的城市名称记录,但数据输入不正确,例如wordAHMADNAGAR的输入方式如下 1. AEHMADNAGAR 2. AHEMADNAGR 3. AHMAD NAGAR 4. AHMADNAGGAR 这是一个只有一个城市的例子,我必须扫描超过500k条记录&我想找到相似的单词,但不完全相似。 我创建了.txt文件,我正在共享链接,其中包括17K个城市,请参见文件 我试过什么 from difflib import get_close_matches d

我有超过500k的城市名称记录,但数据输入不正确,例如word
AHMADNAGAR
的输入方式如下

 1. AEHMADNAGAR
 2. AHEMADNAGR
 3. AHMAD NAGAR
 4. AHMADNAGGAR
这是一个只有一个城市的例子,我必须扫描超过500k条记录&我想找到相似的单词,但不完全相似。

我创建了
.txt
文件,我正在共享链接,其中包括17K个城市,请参见文件

我试过什么

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
runtime时,它应该打印相似的值,但不完全相似,即使我已经删除了相似的值,我们也没有任何重复)

这里的问题是,不能通过
city
在这里手动创建
模式
&另一个问题是它没有显示所有的变化

我从我的朋友那里了解到,我们可以使用
regex
,但是如何使用呢?有没有办法创建
regex运行时
并将其与所有记录匹配


只想获取相似城市的列表

获取接近匹配()的第二个参数是一个列表,如果您只是尝试获取接近匹配,您可以运行:

from difflib import get_close_matches
    
city_list = ['AHMADNAGAR','AEHMADNAGAR','AHEMADNAGR','AHMAD NAGAR', 'AHMADNAGGAR','test','test2']

close_matches = get_close_matches('AHMADNAGAR', city_list)
for close_match in close_matches:
    print(close_match)

get\u close\u matches()
的第二个参数是一个列表,如果您只是尝试获取接近匹配,可以运行:

from difflib import get_close_matches
    
city_list = ['AHMADNAGAR','AEHMADNAGAR','AHEMADNAGR','AHMAD NAGAR', 'AHMADNAGGAR','test','test2']

close_matches = get_close_matches('AHMADNAGAR', city_list)
for close_match in close_matches:
    print(close_match)

您无需在另一个函数中实现自己的循环或包装
get\u close\u matches
。只需提供您要匹配的城市名称(
'AHMADNAGAR'
)以及
获取关闭匹配功能的可能匹配列表。它默认为3,因此如果需要更多,请指定更高的
n

>>> from difflib import get_close_matches
>>> citylist=['AHMADNAGAR','XYZ','AEHMADNAGAR','AHEMADNAGR','AHMADNAGAR','AHMADNAGGAR','ABC','test','test2']
>>> get_close_matches('AHMADNAGAR', citylist, n=len(citylist))
['AHMADNAGAR', 'AHMADNAGAR', 'AHMADNAGGAR', 'AEHMADNAGAR', 'AHEMADNAGR']
请注意,结果是按相似性排序的,因此精确匹配是第一位的,然后是最接近的匹配,等等


difflib
的文档如下:

您无需在另一个函数中实现自己的循环或包装
get\u close\u matches
。只需提供您要匹配的城市名称(
'AHMADNAGAR'
)以及
获取关闭匹配功能的可能匹配列表。它默认为3,因此如果需要更多,请指定更高的
n

>>> from difflib import get_close_matches
>>> citylist=['AHMADNAGAR','XYZ','AEHMADNAGAR','AHEMADNAGR','AHMADNAGAR','AHMADNAGGAR','ABC','test','test2']
>>> get_close_matches('AHMADNAGAR', citylist, n=len(citylist))
['AHMADNAGAR', 'AHMADNAGAR', 'AHMADNAGGAR', 'AEHMADNAGAR', 'AHEMADNAGR']
请注意,结果是按相似性排序的,因此精确匹配是第一位的,然后是最接近的匹配,等等



difflib
的文档在这里:

我认为
get\u close\u matches
是您想要使用的,但您正在反向使用它。你能把你的代码扩展一点,包括
citylist
和所需的输出吗?我刚刚用所需的输出进行了更新,你能检查一下吗?在你的例子中,看起来你只需要匹配一个城市(AHMADNAGAR),这使得这仅仅是对
get\u close\u matches
的一个简单调用。注意:我希望从您的描述中得到两个列表——一个是城市名称(拼写正确)列表,另一个是用户输入(可能拼写错误)列表。如果这确实是您试图解决的问题,请更新您的示例以显示列表和预期输出!我认为
get\u close\u matches
是您想要使用的,但您正在反向使用它。你能把你的代码扩展一点,包括
citylist
和所需的输出吗?我刚刚用所需的输出进行了更新,你能检查一下吗?在你的例子中,看起来你只需要匹配一个城市(AHMADNAGAR),这使得这仅仅是对
get\u close\u matches
的一个简单调用。注意:我希望从您的描述中得到两个列表——一个是城市名称(拼写正确)列表,另一个是用户输入(可能拼写错误)列表。如果这确实是您试图解决的问题,请更新您的示例以显示列表和预期输出!我将尝试这样做,同时,我更新了一些有问题的代码,如果你能检查的话,谢谢你,我刚刚检查了它没有打印这些值,
AEHMADNAGAR
AHEMADNAGR
@KaustubhKulkarni我正在查看它。另外,在第5项的逗号前缺少一个撇号OK,我修正了逗号,也在这里,以防我们只是通过一个城市为例,但实际上我们需要一次发送多个城市,所以我遍历了城市列表,但它显示了意外的输出``对于城市列表中的d:close\u matches=get\u close\u matches(d,城市列表)用于关闭匹配中的关闭匹配:打印(关闭匹配)```@KaustubhKulkarni请更新您的问题,以包括您对多个城市的预期输入。我想我不明白您想做什么,我将尝试这样做,同时,我更新了一些有问题的代码,如果您可以检查的话,请提前检查,谢谢。我刚刚检查了它没有打印这些值
AEHMADNAGAR
AHEMADNAGR
@KaustubhKulkarni我正在调查。第5项的逗号前还缺少一个撇号。好的,我修正了逗号,这里也是为了防止我们只是通过一个城市,例如,但实际上我们需要一次发送多个城市,所以我重复了城市列表,但它显示了意外的输出``城市匹配中的d:关闭匹配=获取城市匹配中的关闭匹配(d,城市列表):打印(关闭匹配)```@KaustubhKulkarni请更新您的问题,以包括您对多个城市的预期输入。我想我不明白您想做什么您好,我刚刚分享了一个有问题的文件链接,该文件包含我记录中的17K个城市,AHMADNAGAR只是一个例子,我想在每个城市迭代并找到类似的内容,但是不准确请更新您的代码,使其成为一个可重复性最低的示例,包含城市列表、样本输入列表以及基于这些输入的预期输出。您提供的示例与您尝试构建的内容并不匹配,因为所有输入都对应于同一个城市。您好,我刚刚共享了一个指向文件的链接whi