test页首

pypinyin通过拼音搜索汉字

汉字编码

  • GB2312编码:
    共7445个字符,其中包括6763个汉字(一级汉字3755个,二级汉字3008个)和682个其它字符。
  • Unicode汉字:四字节,基本汉字20902字,编码4E00-9FA5
  • 其他:
    • BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
    • GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
    • GB18030编码:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。
    • UTF-8和UTF-16编码:Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。

pypinyin

pip install pypinyin
将汉字转为拼音

单字拼音预测有误/远古多音字问题:

pypinyin.pinyin('重',heteronym=True) # [['zhòng', 'chóng', 'tóng']] tóng?
https://github.com/mozillazg/python-pinyin/issues/263
https://github.com/mozillazg/python-pinyin/issues/198

解决方法:替换默认字库
pip install pypinyin-dict

from pypinyin_dict.pinyin_data import cc_cedict
cc_cedict.load()

通过拼音索引汉字

  1. 输出所有汉字
import pypinyin as pypy
from pypinyin_dict.pinyin_data import cc_cedict
import json

cc_cedict.load()


def gb2312():
    s = []
    # 一级汉字3755个
    # for i in range(176, 216):
    #     for j in range(161, 255):
    for i in range(0xB0, 0xF7 + 1):
        for j in range(0xA1, 0xFE + 1):
            try:
                c = (bytes([i]) + bytes([j])).decode('gb2312')
            except:
                # print(i, j, 'error')
                continue
            # print(c, end=' ')
            s.append(c)
    print(len(s))  # 6763
    return s


hanzis = [chr(i) for i in range(0x4E00, 0x9FA6)]  # unicode 20902个汉字
hanzis = gb2312()  # gb2312 6737个汉字
  1. {拼音:汉字} 字典
dict = {}
for hanzi in hanzis:  #'重'
    pinyins = pypy.pinyin(hanzi, style=pypy.NORMAL, heteronym=True)[0]
    for pinyin in pinyins:
        if pinyin not in dict:
            dict[pinyin] = [hanzi]
        else:
            dict[pinyin].append(hanzi)
# print(dict)
# print(dict['qun'])  # ['裙', '群', '逡', '麇']
  1. 保存
# 写入txt
# with open('pinyin.txt', 'w', encoding='utf-8') as f:
#     for key, value in dict.items():
#         f.write(key)
#         f.write('\t')
#         f.write(''.join(value))
#         f.write('\n')

# # 写入json
# with open('dict.json', 'w') as f:  # dict转josn
#     json.dump(dict, f)

# # 读取json
# load_dict = []
# with open('dict.json', 'r') as f:
#     load_dict = json.load(f)
# print(load_dict['cai'])
  1. 平翘舌
# 平翘舌不分:
# s = ' sa  sai  san  sang  se  sen  seng  si  song  sou  su  suan  sui  sun  suo'
# sh = 'sha shai shan shang she shen sheng shi shong shou shu shuan shui shun shuo'
# z = ' za  zai  zan  zang  ze  zen  zeng  zi  zong  zou  zu  zuan  zui  zun  zuo'
# zh = 'zha zhai zhan zhang zhe zhen zheng zhi zhong zhou zhu zhuan zhui zhun zhuo'
# c = ' ca  cai  can  cang  ce  cen  ceng  ci  cong  cou  cu  cuan  cui  cun  cuo'
# ch = 'cha chai chan chang che chen cheng chi chong chou chu chuan chui chun chuo'
yymu = 'a ai an ang e en eng i ong ou u uan ui un uo'
rn = '<br/>'
with open('zhchsh.txt', 'w', encoding='utf-8') as f:
    f.write('0,s,z,c\n')
    for y in yymu.split():
        f.write(y + ',')
        f.write('s' + y + ':  ' + ''.join(dict.get('s' + y, 'None')) + rn)
        f.write('sh' + y + ': ' + ''.join(dict.get('sh' + y, 'None')) + ',')
        f.write('z' + y + ':  ' + ''.join(dict.get('z' + y, 'None')) + rn)
        f.write('zh' + y + ': ' + ''.join(dict.get('zh' + y, 'None')) + ',')
        f.write('c' + y + ':  ' + ''.join(dict.get('c' + y, 'None')) + rn)
        f.write('ch' + y + ': ' + ''.join(dict.get('ch' + y, 'None')) + '\n')
0 s z c
a sa: 撒洒萨卅仨檫挲脎飒
sha: 莎砂杀刹沙纱傻啥煞厦唼嗄歃铩痧裟霎鲨
za: 匝砸杂咱扎咋籴咂啐
zha: 爆查扎喳渣札轧铡闸眨栅榨咋乍炸诈柞揸吒咤哳馇楂砟痄蚱笮齄
ca: 擦嚓礤
cha: 插叉茬茶查碴搽察岔差诧刹喳嚓猹馇汊姹杈槎檫锸镲衩
ai sai: 腮鳃塞赛噻
shai: 色筛晒酾
zai: 栽哉灾宰载再在仔崽甾
zhai: 翟择摘斋宅窄债寨砦瘵
cai: 猜裁材才财睬踩采彩菜蔡
chai: 差拆柴豺侪钗瘥虿
an san: 三叁伞散馓毵糁
shan: 单掸珊苫杉山删煽衫闪陕擅赡膳善汕扇缮栅剡讪鄯埏芟彡潸姗嬗骟膻禅钐疝蟮舢跚鳝髟
zan: 咱攒暂赞拶涔瓒昝簪糌趱錾
zhan: 颤瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽谵搌澶旃
can: 餐参蚕残惭惨灿孱骖璨粲黪
chan: 搀掺蝉馋谗缠铲产阐颤单冁谄蒇廛忏潺澶孱羼婵骣觇禅镡蟾躔
ang sang: 桑嗓丧搡磉颡
shang: 墒伤商赏晌上尚裳垧绱殇熵觞
zang: 藏赃脏葬奘驵臧
zhang: 长樟章彰漳张掌涨杖丈帐账仗胀瘴障仉鄣幛嶂獐嫜璋蟑
cang: 苍舱仓沧藏
chang: 昌猖场尝常长偿肠厂敞畅唱倡裳倘伥鬯苌菖徜怅惝阊娼嫦昶氅鲳
e se: 塞瑟色涩啬铯穑
she: 奢赊蛇舌舍赦摄射慑涉社设拾折厍佘揲猞滠歙畲麝
ze: 责择则泽仄赜啧帻迮昃笮箦舴
zhe: 遮折哲蛰辙者锗蔗这浙着乇谪陬摺柘辄磔鹧褶蜇螫赭
ce: 厕策侧册测恻
che: 车扯撤掣彻澈尺坼屮砗
en sen: 森
shen: 参砷申呻伸身深娠绅神沈审婶甚肾慎渗什诜谂莘葚哂渖椹胂矧蜃
zen: 怎谮
zhen: 珍斟真甄砧臻贞针侦枕疹诊震振镇阵帧圳蓁浈溱缜桢椹榛轸戡赈胗朕祯畛稹鸩箴
cen: 参岑涔
chen: 郴臣辰尘晨忱沉陈趁衬称沈伧谌谶抻嗔宸琛榇肜碜龀
eng seng: 僧
sheng: 乘身声生甥牲升绳省盛剩胜圣嵊晟眚笙
zeng: 增憎曾赠缯甑罾锃
zheng: 丁蒸挣睁征狰争怔整拯正政症郑证诤峥钲铮筝
ceng: 层蹭曾噌
cheng: 撑称城橙成呈乘程惩澄诚承逞骋秤盛丞埕枨柽樘晟塍瞠铖铛裎蛏酲
i si: 厕斯撕嘶思私司丝死肆寺嗣四伺似饲巳厮俟兕厶咝汜泗澌姒驷纟缌祀锶鸶耜蛳笥糸
shi: 匙师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试似殖峙谥埘莳蓍弑饣轼贳炻礻铈舐筮酾豕鲥鲺
zi: 吱兹咨资姿滋淄孜紫仔籽滓子自渍字谘呲嵫姊孳缁梓辎赀恣眦锱秭耔笫粢趑觜訾龇鲻髭
zhi: 识氏芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒卮氐陟郅埴芷摭帙徵夂忮彘咫骘栉枳栀桎轵轾贽胝膣祉祗黹雉鸷痣蛭絷酯跖踬踯豸觯
ci: 差疵茨磁雌辞慈瓷词此刺赐次伺兹茈呲嵯祠鹚粢糍
chi: 吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽傺郗墀茌叱哧啻嗤彳饬媸敕眵鸱瘛褫蚩螭笞篪豉踟魑
ong song: 松耸怂颂送宋讼诵凇菘崧嵩忪悚淞竦
shong: None
zong: 鬃棕踪宗综总纵偬枞腙粽
zhong: 中盅忠钟衷终种肿重仲众冢夂忪锺螽舯踵
cong: 聪葱囱匆从丛苁淙骢琮璁枞
chong: 充冲虫崇宠涌重茺忡憧铳舂艟
ou sou: 搜艘擞嗽叟薮嗖嗾馊涑溲飕瞍锼螋
shou: 收手首守寿授售受瘦兽熟扌狩绶艏
zou: 邹走奏揍诹陬鄹驺楱鲰
zhou: 舟周州洲诌粥轴肘帚咒皱宙昼骤荮啁妯纣绉胄碡籀舳酎
cou: 凑楱辏腠
chou: 抽酬畴踌稠愁筹仇绸瞅丑臭俦帱惆瘳雠
u su: 苏酥俗素速粟僳塑溯宿诉肃夙谡蔌嗉愫涑簌觫稣
shu: 蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕俞倏塾菽摅沭涑澍姝纾毹腧殳秫疋
zu: 租足卒族祖诅阻组俎菹啐镞
zhu: 属术珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻椎丶伫侏邾苎茱洙渚潴澍杼槠橥炷铢疰瘃竺箸舳翥躅麈
cu: 粗醋簇促卒蔟徂猝殂酢蹙蹴
chu: 初出橱厨躇锄雏滁除楚础储矗搐触处畜亍刍怵憷绌杵楮樗褚蜍蹰黜
uan suan: 酸蒜算狻
shuan: 栓拴闩涮踹
zuan: 钻纂攥缵躜
zhuan: 传专砖转撰赚篆啭馔颛
cuan: 蹿篡窜攒汆撺爨镩
chuan: 川穿椽传船喘串掾舛遄巛氚钏舡踹
ui sui: 尿虽隋随绥髓碎岁穗遂隧祟谇荽濉邃燧眭睢
shui: 谁水睡税说氵
zui: 咀嘴醉最罪蕞觜
zhui: 椎锥追赘坠缀萑惴骓缒隹
cui: 摧崔催脆瘁粹淬翠萃啐悴璀榱毳隹
chui: 吹炊捶锤垂陲棰槌
un sun: 孙损笋荪狲飧榫隼
shun: 吮瞬顺舜恂巛
zun: 尊遵撙樽鳟
zhun: 屯谆准肫胗窀
cun: 村存寸忖皴
chun: 春椿醇唇淳纯蠢莼肫鹑蝽
uo suo: 莎蓑梭唆缩琐索锁所唢嗦嗍娑桫挲睃羧
shuo: 数说硕朔烁蒴搠嗍妁槊铄
zuo: 凿琢昨左佐柞做作坐座阼唑嘬怍胙祚砟笮酢
zhuo: 著捉拙卓桌琢茁酌啄着灼浊倬诼蕞擢浞涿濯棹肫焯禚斫镯趵
cuo: 磋撮搓措挫错厝嵯脞锉矬痤瘥鹾蹉
chuo: 戳绰缀啜辶辍焯趵踔龊

附录

import pypinyin as pypy
from pypinyin_dict.pinyin_data import cc_cedict
import json

cc_cedict.load()


def gb2312():
    s = []
    # 一级汉字3755个
    # for i in range(176, 216):
    #     for j in range(161, 255):
    for i in range(0xB0, 0xF7 + 1):
        for j in range(0xA1, 0xFE + 1):
            try:
                c = (bytes([i]) + bytes([j])).decode('gb2312')
            except:
                # print(i, j, 'error')
                continue
            # print(c, end=' ')
            s.append(c)
    print(len(s))  # 6763
    return s


hanzis = [chr(i) for i in range(0x4E00, 0x9FA6)]  # unicode 20902个汉字
hanzis = gb2312()  # gb2312 6737个汉字
dict = {}

for hanzi in hanzis:  #'重'
    pinyins = pypy.pinyin(hanzi, style=pypy.NORMAL, heteronym=True)[0]
    for pinyin in pinyins:
        if pinyin not in dict:
            dict[pinyin] = [hanzi]
        else:
            dict[pinyin].append(hanzi)

# print(dict)

s = ' sa  sai  san  sang  se  sen  seng  si  song  sou  su  suan  sui  sun  suo'
sh = 'sha shai shan shang she shen sheng shi shong shou shu shuan shui shun shuo'
z = ' za  zai  zan  zang  ze  zen  zeng  zi  zong  zou  zu  zuan  zui  zun  zuo'
zh = 'zha zhai zhan zhang zhe zhen zheng zhi zhong zhou zhu zhuan zhui zhun zhuo'
c = ' ca  cai  can  cang  ce  cen  ceng  ci  cong  cou  cu  cuan  cui  cun  cuo'
ch = 'cha chai chan chang che chen cheng chi chong chou chu chuan chui chun chuo'

lst = (s, sh, z, zh, c, ch)
print(dict['qun'])  # ['裙', '群', '逡', '麇']


def sh2u(str):
    # 全拼转双拼
    str = str.replace('sh', 'u')
    str = str.replace('zh', 'v')
    str = str.replace('ch', 'i')

    str = str[0] + str[1:].replace('ai', 'd')
    str = str[0] + str[1:].replace('ang', 'h')
    str = str[0] + str[1:].replace('uan', 'r')
    str = str[0] + str[1:].replace('an', 'j')
    str = str[0] + str[1:].replace('eng', 'g')
    str = str[0] + str[1:].replace('en', 'f')
    str = str[0] + str[1:].replace('ong', 's')
    str = str[0] + str[1:].replace('ou', 'z')
    str = str[0] + str[1:].replace('ui', 'v')
    str = str[0] + str[1:].replace('un', 'y')
    str = str[0] + str[1:].replace('uo', 'o')

    return str


abc = []


for ls in lst:
    for word in ls.split():
        for i in dict.get(word, 'None'):
            abc.append([i, word, sh2u(word)])

# anki
abc.sort()
with open('a.csv', 'w') as f:
    for a in abc:
        f.write(a[0] + ',' + a[2] + '\t' + a[1] + '\n')
print(abc)
print(dict.get('sa', 'None'))

posted @   开饭了没  阅读(431)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

test页脚

点击右上角即可分享
微信分享提示