测试clean_country_names函数

测试clean_country_names函数

这是我最近正在开发的AI工具信息平台的部门功能模块测试,基于streamlit架构。整理出来与大家分享,也为我以后自己回溯找到资源。

为了测试 clean_country_names 函数,我们可以按照以下步骤进行:

  1. 准备一个包含国家名称的 Excel 文件:确保文件中有一列名为 “Country”。
  2. 实现国家标准化函数 standardize_country:这个函数将根据映射字典将国家名称标准化。
  3. 读取 Excel 文件并调用 clean_country_names 函数:执行清理操作并输出结果。

步骤 1:创建 Excel 文件

我们首先创建一个示例 Excel 文件,内容如下(命名为 test_tools.xlsx):

NameCountry
Tool A中国
Tool Bchina
Tool C美国
Tool DUSA
Tool E英国
Tool FUK
Tool G德国
Tool HGermany
Tool Iunknown
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_name
    return country_name  # 如果没有匹配,返回原名称

步骤 3:整合代码并测试

最后,将所有部分整合到一起,包括读取 Excel 文件和调用 clean_country_names 函数:

import pandas as pd

COUNTRY_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_name
    return '其他'

def standardize_country(country_name, country_mapping):
    """根据映射字典标准化国家名称"""
    for standardized_name, aliases in country_mapping.items():
        if country_name in aliases:
            return standardized_name
    return 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 df

def 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  ...           是

注意事项

  1. Excel 文件路径:确保在运行代码时,Excel 文件路径正确或与脚本在同一目录下。
  2. 国家映射的完整性:确保 country_mapping 中包含了所有可能的别名,以达到更好的标准化效果。
  3. 异常处理:考虑添加对无效输入的处理,以便于捕获错误并输出相应的信息。

通过这些步骤,你应该能够成功地测试 clean_country_names 函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce_xiaowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值