基于独特字母的语言文本分类实验:求简洁的独特字母提取方法
嘿,我来分享几个简洁易懂的实现方案,完全不用复杂的数学公式,都是基于基础的集合操作,很容易上手:
方法一:利用集合差集快速计算
先把所有语言的字母合并成一个全局集合,然后通过集合差集快速定位每个语言的独有字母:
# 假设你的语言-字母字典是这样的 lang_letters = { 'ru': {'ё'}, 'uk': {'ї', 'ґ'}, 'pl': {'ę', 'ś'}, 'en': set(), 'de': {'ß'}, 'be': {'ё'} } # 第一步:合并所有语言的字母到一个大集合 all_letters = set().union(*lang_letters.values()) # 第二步:计算每个语言的独有字母 unique_letters_per_lang = {} for lang, letters in lang_letters.items(): # 其他所有语言的字母 = 全局集合 - 当前语言的字母 other_lang_letters = all_letters - letters # 当前语言独有的字母 = 当前字母集合 - 其他语言的字母集合 unique_letters_per_lang[lang] = letters - other_lang_letters print(unique_letters_per_lang) # 输出结果: # {'ru': set(), 'uk': {'ї', 'ґ'}, 'pl': {'ę', 'ś'}, 'en': set(), 'de': {'ß'}, 'be': set()}
这个方法的优势是效率较高,集合操作的底层优化能帮你在语言和字母数量较多时节省时间。
方法二:直观遍历检查每个字母
如果你更喜欢可读性更强、逻辑直白的代码,可以逐个检查每个字母是否在其他语言中出现:
lang_letters = { 'ru': {'ё'}, 'uk': {'ї', 'ґ'}, 'pl': {'ę', 'ś'}, 'en': set(), 'de': {'ß'}, 'be': {'ё'} } unique_letters_per_lang = {} for lang, letters in lang_letters.items(): unique = set() for letter in letters: # 检查该字母是否未出现在任何其他语言的字母集合中 is_unique = True for other_lang, other_letters in lang_letters.items(): if other_lang != lang and letter in other_letters: is_unique = False break if is_unique: unique.add(letter) unique_letters_per_lang[lang] = unique print(unique_letters_per_lang) # 输出和方法一完全一致
还可以用更紧凑的生成式写法,保持可读性的同时缩短代码:
unique_letters_per_lang = { lang: { letter for letter in letters if not any(letter in other_letters for other_lang, other_letters in lang_letters.items() if other_lang != lang) } for lang, letters in lang_letters.items() }
这个方法虽然效率略低于第一种,但胜在逻辑简单,哪怕是刚接触Python的开发者也能一眼看懂。
内容的提问来源于stack exchange,提问作者Moris Huxley
相关产品推荐
相关产品推荐

