我正在尝试使用pycountries库将国家/地区名称数据列表转换为ISO3166国家/地区代码(alpha3).我的基本功能如下:
import pycountries as pc
def guess_country(data, output='alpha3', verbose=False):
#Check Data isn't already in Alpha3
try:
country = pc.countries.get(alpha3=data)
return country
except:
pass #KeyError Raised, data doesn't directly match
#Check if Country is Actual CountryName
try:
country = pc.countries.get(name=data)
return country
except:
pass #KeyError Raised, data doesn't directly match
#Check RegExpr of 'data' in an attempt to match
Run Code Online (Sandbox Code Playgroud)
问题是CountryName数据相当脏......一个简短的样本列表
GUATMAL,CHINA T,COLOMB,MEXICO,HG KONG
有没有人知道在给定cntry_name的情况下是否有一个包返回最佳"猜测"匹配?我会很高兴有些人因困难而被拒绝(即中国T - >台湾).如果best_guess返回了关于'猜测'的确定性,那将是很好的.
您可以使用difflib(内置到python中)来选择关闭的国家/地区名称:
import difflib
country_names = [x.name.lower() for x in pycountry.countries]
matching_countries = difflib.get_close_matches(data, country_names)
confidence = difflib.SequenceMatcher(None, matching_countries[0], data).ratio()
Run Code Online (Sandbox Code Playgroud)
matching_countries将包含相似的国家/地区名称列表.您可以使用选项n和cutoff参数指定返回的结果数和匹配的灵敏度.
注意:get_close_matches方法区分大小写,因此您可能希望在查找匹配项之前将所有内容转换为小写.
我运行了你通过get_close_matches获得的样本数据,除了台湾以外,它都适用.
如果您有许多已知的棘手匹配,那么可能值得为常见的困难输入数据(如"China T")添加字典来手动处理这些异常.当然,如果输入数据相对一致,使用简单的字典查找可能是最佳选择.
| 归档时间: |
|
| 查看次数: |
2293 次 |
| 最近记录: |