QQ叫紫珊 发表于 2015-11-29 12:12:02

Python汉字转换成拼音

  最近在使用Python做项目时,需要将汉字转化成对应的拼音.在Github上找到了一个现成的程序.
  Python汉字转拼音
  使用实例如下:



from pinyin import PinYin
test = PinYin()
test.load_word()
print test.hanzi2pinyin(string='钓鱼岛是中国的')
print test.hanzi2pinyin_split(string='钓鱼岛是中国的', split="-")
  输出:



['diao', 'yu', 'dao', 'shi', 'zhong', 'guo', 'de']
'diao-yu-dao-shi-zhong-guo-de'
  其中hanzi2pinyin函数返回值是一个列表,而hanzi2pinyin_split函数在split参数为空时返回列表,不为空是返回字符串.
  但程序存在两个问题,第一是当中文中夹带英文时,英文会丢失.第二则是hanzi2pinyin_split的返回值一会是列表,一会是字符串,让人比较迷糊.
  例如:
  test.hanzi2pinyin_split(string='钓鱼岛是中国的code123', split="")
  我们期待的结果是:
  u'diaoyudaoshizhongguodecode123'
  但实际结果为:
  u'diaoyudaoshizhongguode'
  为此,在原来的程序中做了如下改写.

1.hanzi2pinyin函数修改
  原来的hanzi2pinyin函数:



def hanzi2pinyin(self, string=""):
result = []
if not isinstance(string, unicode):
string = string.decode("utf-8")
for char in string:
key = '%X' % ord(char)
result.append(self.word_dict.get(key, char).split()[:-1].lower())
return result
  
  修改后的hanzi2pinyin函数:



def hanzi2pinyin(self, string=""):
result = []
if not isinstance(string, unicode):
string = string.decode("utf-8")
for char in string:
key = '%X' % ord(char)
if not self.word_dict.get(key):
result.append(char)
else:
result.append(self.word_dict.get(key, char).split()[:-1].lower())
return result
  修改后的hanzi2pinyin函数可以避免中英文混合的情况下,英文丢失.

2.hanzi2pinyin_split函数修改,将返回值为统一为字符串
  原来的hanzi2pinyin_split函数:



def hanzi2pinyin_split(self, string="", split=""):
result = self.hanzi2pinyin(string=string)
if split == "":
return result
else:
return split.join(result)
  修改后的hanzi2pinyin_split函数(不论split参数是否为空,hanzi2pinyin_split均返回字符串):



def hanzi2pinyin_split(self, string="", split=""):
result = self.hanzi2pinyin(string=string)
#if split == "":
#    return result
#else:
return split.join(result)
  
页: [1]
查看完整版本: Python汉字转换成拼音