利用opencc简繁转换库做语言判断的思路

cooolr 于 2022-09-27 发布

很简单,就是把字符分别转换成简体和繁体,再和原字符对比:

统计简体字和繁体字的数量,谁的数量多,就判定为简体或是繁体。

pip install opencc
import opencc

# 简体转繁体模型
converter1 = opencc.OpenCC('s2t.json')
# 繁体转简体模型
converter2 = opencc.OpenCC('t2s.json')
# 标点符号
point_text = '''`!@#$%^&*()_+{}-=[]\\|;:'",<.>/?·~~!@#¥%……&*()——+-=【】{}、|;:‘”,《。》、? '''

def check_lang(text):
    # 简体字数量
    zh_hans_count = 0
    # 繁体字数量
    zh_hant_count = 0
    # 简繁通用字数量
    default_count = 0
    # 英文字数量
    en_us_count = 0
    # 默认语言
    lang = "简体"
    for var in text:
        # 忽略空字符和标点符号和数字
        if not var.strip() or var in point_text or var.isdigit():
            continue
        if  u'\u4e00' <= var <= u'\u9FBF':
            # 转成简体
            zh_hans = converter2.convert(var)
            # 转成繁体
            zh_hant = converter1.convert(var)
            if var == zh_hans and var != zh_hant:
                # 是简体,不是繁体的,是现代简体(过滤掉即是简体又是繁体的字)
                zh_hans_count += 1
                # print(f"识别到简体字: {var}")
            elif var != zh_hans and var == zh_hant:
                # 不是简体,是繁体的,是现代繁体
                zh_hant_count += 1
                # print(f"识别到繁体字: {var}")
            else:
                default_count += 1
                # print(f"丢弃通用文字: {var}")
        else:
            # 不是中文,既是英文
            en_us_count += 1
            # print(f"识别到英文字: {var}")

    if zh_hant_count and zh_hant_count >= zh_hans_count:
        lang = "繁体"
    elif zh_hans_count:
        lang = "简体"
    elif default_count:
        lang = "简体"
    elif en_us_count:
        lang = "英文"
    print(f"简体字: {zh_hans_count}, 繁体字: {zh_hant_count}, 简繁通用字: {default_count}, 英文字: {en_us_count}, 判定为: {lang}")
    return lang