本文的代碼稽煤,從https://github.com/cleverdeng/pinyin.py升級(jí)得來(lái)富玷,針對(duì)原文的代碼败潦,做了以下升級(jí):
1啃擦、可以傳入?yún)?shù)firstcode:如果為true格带,只取漢子的第一個(gè)拼音字母撤缴;如果為false刹枉,則會(huì)輸出全部拼音;
2屈呕、修復(fù):如果為英文字母微宝,則直接輸出;
3凉袱、修復(fù):如果分隔符為空字符串芥吟,仍然能正常輸出;
4专甩、升級(jí):可以指定詞典的文件路徑
代碼很簡(jiǎn)單钟鸵,直接讀取了一個(gè)詞典(字符和英文的映射),然后挨個(gè)替換中文中的拼音即可涤躲;
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
原版代碼:https://github.com/cleverdeng/pinyin.py
新增功能:
????1棺耍、可以傳入?yún)?shù)firstcode:如果為true,只取漢子的第一個(gè)拼音字母种樱;如果為false蒙袍,則會(huì)輸出全部拼音;
????2嫩挤、修復(fù):如果為英文字母害幅,則直接輸出;
????3岂昭、修復(fù):如果分隔符為空字符串以现,仍然能正常輸出;
????4约啊、升級(jí):可以指定詞典的文件路徑
"""
__version__?=?'0.9'
__all__?=?["PinYin"]
import?os.path
class?PinYin(object):
def?__init__(self):
self.word_dict?=?{}
def?load_word(self,?dict_file):
self.dict_file?=?dict_file
if?not?os.path.exists(self.dict_file):
raise?IOError("NotFoundFile")
with?file(self.dict_file)?as?f_obj:
for?f_line?in?f_obj.readlines():
try:
line?=?f_line.split('????')
self.word_dict[line[0]]?=?line[1]
except:
line?=?f_line.split('?? ')
self.word_dict[line[0]]?=?line[1]
def?hanzi2pinyin(self,?string="",?firstcode=False):
result?=?[]
if?not?isinstance(string,?unicode):
string?=?string.decode("utf-8")
for?char?in?string:
key?=?'%X'?%?ord(char)
value?=?self.word_dict.get(key,?char)
outpinyin?=?str(value).split()[0][:-1].lower()
if?not?outpinyin:
outpinyin?=?char
if?firstcode:
result.append(outpinyin[0])
else:
result.append(outpinyin)
return?result
def?hanzi2pinyin_split(self,?string="",?split="",?firstcode=False):
"""提取中文的拼音
????????@param string:要提取的中文
????????@param split:分隔符
????????@param firstcode: 提取的是全拼還是首字母邑遏?如果為true表示提取首字母,默認(rèn)為False提取全拼??
????????"""
result?=?self.hanzi2pinyin(string=string,?firstcode=firstcode)
return?split.join(result)
if?__name__?==?"__main__":
test?=?PinYin()
test.load_word('word.data')
string?=?"Java程序性能優(yōu)化-讓你的Java程序更快更穩(wěn)定"
print?"in: %s"?%?string
print?"out: %s"?%?str(test.hanzi2pinyin(string=string))
print?"out: %s"?%?test.hanzi2pinyin_split(string=string,?split="",?firstcode=True)
print?"out: %s"?%?test.hanzi2pinyin_split(string=string,?split="",?firstcode=False)
實(shí)例中main函數(shù)的代碼輸出結(jié)果
代碼使用方法:
如果需要其他的提取恰矩,可以修改一下代碼實(shí)現(xiàn)记盒;