测试clean_country_names函数
这是我最近正在开发的AI工具信息平台的部门功能模块测试,基于streamlit架构。整理出来与大家分享,也为我以后自己回溯找到资源。
为了测试 clean_country_names
函数,我们可以按照以下步骤进行:
- 准备一个包含国家名称的 Excel 文件:确保文件中有一列名为 “Country”。
- 实现国家标准化函数
standardize_country
:这个函数将根据映射字典将国家名称标准化。 - 读取 Excel 文件并调用
clean_country_names
函数:执行清理操作并输出结果。
步骤 1:创建 Excel 文件
我们首先创建一个示例 Excel 文件,内容如下(命名为 test_tools.xlsx
):
Name | Country |
---|---|
Tool A | 中国 |
Tool B | china |
Tool C | 美国 |
Tool D | USA |
Tool E | 英国 |
Tool F | UK |
Tool G | 德国 |
Tool H | Germany |
Tool I | unknown |
import pandas as pd# 示例数据
data = {'Name': ['Tool A', 'Tool B', 'Tool C', 'Tool D', 'Tool E', 'Tool F', 'Tool G', 'Tool H', 'Tool I'],'Country': ['中国', 'china', '美国', 'USA', '英国', 'UK', '德国', 'Germany', 'unknown']
}df_test = pd.DataFrame(data)
df_test.to_excel('test_tools.xlsx', index=False, sheet_name='Tools')
步骤 2:实现国家标准化函数
接下来,我们需要实现 standardize_country
函数,用于根据 country_mapping
标准化国家名称:
def standardize_country(country_name, country_mapping):"""根据映射字典标准化国家名称"""for standardized_name, aliases in country_mapping.items():if country_name in aliases:return standardized_namereturn country_name # 如果没有匹配,返回原名称
步骤 3:整合代码并测试
最后,将所有部分整合到一起,包括读取 Excel 文件和调用 clean_country_names
函数:
import pandas as pdCOUNTRY_FLAGS = {'中国': '🇨🇳','美国': '🇺🇸','日本': '🇯🇵','韩国': '🇰🇷','英国': '🇬🇧','法国': '🇫🇷','德国': '🇩🇪','意大利': '🇮🇹','加拿大': '🇨🇦','澳大利亚': '🇦🇺','新西兰': '🇳🇿'
}def standardize_country(raw_name, mapping):"""国家名称标准化核心逻辑"""raw_lower = str(raw_name).strip().lower()for standard_name, variants in mapping.items():if any(v in raw_lower for v in variants):return standard_namereturn '其他'def standardize_country(country_name, country_mapping):"""根据映射字典标准化国家名称"""for standardized_name, aliases in country_mapping.items():if country_name in aliases:return standardized_namereturn country_name # 如果没有匹配,返回原名称def clean_country_names(df):"""国家名称标准化"""country_mapping = {'中国': ['china', 'cn', '中国', '中華', '中国大陆'],'美国': ['usa', 'us', 'america', '美国', '美利坚'],'日本': ['japan', 'jp', '日本', '日本国'],'韩国': ['korea', 'kr', '韩国', '大韩民国', 'korean'],'英国': ['uk', 'gb', 'united kingdom', '英国', '大不列颠', '英伦'],'法国': ['france', 'fr', '法国', '法兰西'],'德国': ['germany', 'de', '德国', '德意志'],'意大利': ['italy', 'it', '意大利', '意大利共和国'],'加拿大': ['canada', 'ca', '加拿大'],'澳大利亚': ['australia', 'au', '澳大利亚'],'新西兰': ['new zealand', 'nz', '新西兰'],'瑞士': ['switzerland', 'ch', '瑞士', '瑞士联邦'],'荷兰': ['netherlands', 'nl', '荷兰', '尼德兰'],'比利时': ['belgium', 'be', '比利时'],'奥地利': ['austria', 'at', '奥地利'],'瑞典': ['sweden', 'se', '瑞典'],'挪威': ['norway', 'no', '挪威'],'丹麦': ['denmark', 'dk', '丹麦'],'芬兰': ['finland', 'fi', '芬兰'],'爱尔兰': ['ireland', 'ie', '爱尔兰'],'冰岛': ['iceland', 'is', '冰岛'],'卢森堡': ['luxembourg', '.lu', '卢森堡'],'西班牙': ['spain', '.es', '西班牙'],'葡萄牙': ['portugal', '.pt', '葡萄牙'],'希腊': ['greece', '.gr', '希腊'],}df['Country'] = df['Country'].apply(lambda x: standardize_country(x, country_mapping))return dfdef main():# 从 Excel 文件读取工具数据excel_file = 'test.xlsx'df = pd.read_excel(excel_file, sheet_name='Tools')# 清理国家名称cleaned_df = clean_country_names(df)# 输出结果print(cleaned_df)if __name__ == "__main__":main()
步骤 4:运行测试
将上述代码保存为 Python 文件,例如 test_clean_country_names.py
,然后在命令行中运行以下命令:
python test_clean_country_names.py
验证输出
运行后,你将看到类似于以下的输出,显示每个工具的标准化国家名称:
Name ... Open Source
0 通义千问 ... 否
1 智谱清言App ... 否
2 ChatGPT (OpenAI) ... 否
3 文心一言 (ERNIE Bot) ... 否
4 讯飞星火 ... 否
5 通义千问 ... 否
6 ChatGLM ... 否
7 Claude ... 否
8 Cohere ... 否
9 Hugging Face ... 是
10 BERT ... 是
11 T5 ... 是
12 SpaCy ... 是
13 Gensim ... 是
14 TextBlob ... 是
15 NLTK ... 是
16 Pattern ... 是
17 StanfordNLP ... 是
18 Fairseq ... 是
19 AllenNLP ... 是
20 OpenNLP ... 是
21 Stanford CoreNLP ... 是
22 AllenNLP Interpret ... 是
注意事项
- Excel 文件路径:确保在运行代码时,Excel 文件路径正确或与脚本在同一目录下。
- 国家映射的完整性:确保
country_mapping
中包含了所有可能的别名,以达到更好的标准化效果。 - 异常处理:考虑添加对无效输入的处理,以便于捕获错误并输出相应的信息。
通过这些步骤,你应该能够成功地测试 clean_country_names
函数。