标题:Python: 汉字转拼音(带声调) 出处:Felix021 时间:Thu, 13 Dec 2012 15:16:13 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2101 内容: 这事儿其实只要有了拼音库,就挺简单的。我从 pinyin4j 这个项目里搞了一份出来。虽然这个库是为java写的,不过要提取倒是相当简单:到这里 下载pinyin4j-2.5.0.zip,解压得到里头的 lib/pinyin4j-2.5.0.jar ,再解压得到里头的 pinyindb/unicode_to_hanyu_pinyin.txt 。 这个文件的结构很简单,每一行的基本结构是这样的:引用 4E04 (shang4,shang3) 前面的 4E04 是汉字的Unicode编码,空格分隔,然后括号里面包含了所有读音(而且看起来像是按频率排序好了的),每个读音分别给出了拼音的声母韵母以及声调。 在这个基础上解析它就相当简单了。 f = open("unicode_to_hanyu_pinyin.txt", "r") py = {} for l in f: l = l.strip() #行末回车 key, val = l.split(' ') sd = val[1:-1].replace('u:', 'v').split(',') #去掉左右括号,把u:转为v(驴 lv),然后按逗号分隔 arr_sd = [] for i in sd: arr_sd.append({'py': i[0:-1], 'tone': i[-1]}) #把每个读音的声调分离出来 py[int(key, 16)] = arr_sd #把unicode编码转成10进制作为key f.close() 当然,你也可以把它存入一个key/value数据库(memcachedb什么的就挺好)。以上面的例子的话,把一个字符串中的汉字转换成拼音就很简单了: def convert(str, encoding = 'utf-8'): ret = '' for i in str.decode(encoding): w = ord(i) if py.has_key(w): ret += "%s-%s " % (py[w][0]['py'] , py[w][0]['tone']) else: ret += i return ret 要注意的一点是,“驴”的拼音被标记为 lu:2 ,而不是打字时习惯使用的 lv ,如果有需要的,还得再加个简单的转换逻辑。 实际上这个库里头还支持通用拼音(貌似是台湾地区使用过的)等其他转换方式,有需要的同学可以自己考据一下其结构。 p.s. 在python里头可以用 unichr(0x4E04) 得到这个unicode对应的字符,也可以用 ord('率'.decode('utf-8')) 得到这个字符的unicode编码(注意替换字符的原始编码)。至于十进制和十六进制的转换,也很简单, hex(32768) 得到 '0x8000' 而int('0x8000', 16)就能得到32768。python真好用。 Generated by Bo-blog 2.1.0