• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Python汉字转拼音

python 水墨上仙 2841次浏览

文中用到的convert.txt就是字典,但是作者的博客中没有提供下载.我通过网络搜索,从其他途径下载到了整个压缩包,包括字典和转换程序.该程序 是基于GBK的, 要把汉字分成高低位来处理,一般人理解不了,我做了点改进就是把字典转化为utf-8的,因为在django中使用的


# -*- coding: utf-8 -*- 
# ------------------------------------------------------------
# Script   Name: convert.py
# Creation Date: 2010-09-21  02:12
# Last Modified: 2011-11-12 18:38:13
# Copyright (c)2011, DDTCMS Project
# Purpose: This file used for DDTCMS Project
# ------------------------------------------------------------

#####################################
#   Written by caocao               #
#   Modified by huyoo353@126.com    #
#   caocao@eastday.com              #
#   http://nethermit.yeah.net       #
#####################################

# python.
import sys,os
import re
import string
class CConvert:
	def __init__(self):
		self.has_shengdiao = False
		self.just_shengmu  = False
		self.spliter = '-'
		"Load data table"
		try:
			fp=open(os.path.join(settings.PROJECT_DIR, 'utils', 'convert-utf-8.txt'))
		except IOError:
			print "Can't load data from convert-utf-8.txt\nPlease make sure this file exists."
			sys.exit(1)
		else:
			self.data=fp.read().decode("utf-8")# decoded data to unicode
			fp.close()
	
	def convert1(self, strIn):
		"Convert Unicode strIn to PinYin"
		length, strOutKey, strOutValue, i=len(strIn), "", "", 0
		while i<length:
			code1 =ord(strIn[i:i+1])
			if code1>=0x4e02 and code1<=0xe863:
				strTemp   = self.getIndex(strIn[i:i+1])
				if not self.has_shengdiao:
					strTemp  = strTemp[:-1]
				strLength = len(strTemp)
				if strLength<1:strLength=1
				strOutKey   += string.center(strIn[i:i+1], strLength)+" "
				strOutValue += self.spliter + string.center(strTemp, strLength) + self.spliter
			else:#ascii code;
				strOutKey+=strIn[i:i+1]+" "
				strOutValue+=strIn[i:i+1] + ' '
			i+=1
			#############################
			#txlist = utf8String.split()
			#out=convert.convert(utf8String)
			#l=[]
			#for t in map(convert.convert, txlist):
			#	l.append(t[0])
			#v = '-'.join(l).replace(' ','').replace(u'--','-').strip('-')
			#############################
		return [strOutValue, strOutKey]
	
	def getIndex(self, strIn):
		"Convert single Unicode to PinYin from index"
		if strIn==' ':return self.spliter
		if set(strIn).issubset("'\"`~!@#$%^&*()=+[]{}\\|;:,.<>/?"):return self.spliter # or return ""
		if set(strIn).issubset("-—!##%%&&()*,、。:;?? @@\{{|}}~~‘’“”《》【】++==×¥·… ".decode("utf-8")):return ""
		pos=re.search("^"+strIn+"([0-9a-zA-Z]+)", self.data, re.M)
		if pos==None:
			return strIn
		else:
			if not self.just_shengmu:
				return pos.group(1)
			else:
				return pos.group(1)[:1]
	
	def convert(self, strIn):
		"Convert Unicode strIn to PinYin"
		if self.spliter != '-' and self.spliter !='_' and self.spliter != '' and self.spliter != ' ':
			self.spliter = '-'
		pinyin_list=[]
		for c in strIn :
			pinyin_list.append(self.getIndex(c))
		pinyin=''
		for p in pinyin_list:
			if p==' ':
				pinyin+= self.spliter
				continue
			if len(p)<2:# only shengmu,just get one char,or number
				#if p.isdigit():
				#	pinyin += p + ' '
				#else:
				#	pinyin += p + ' '
				pinyin += p + ' '
			else:
				if not self.has_shengdiao: p = p[:-1]
				pinyin += self.spliter + p + self.spliter
		pinyin = pinyin.replace(' ','') \
				.replace(self.spliter+self.spliter,self.spliter) \
				.strip(self.spliter+' ').replace(self.spliter+self.spliter,self.spliter)
		return pinyin


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Python汉字转拼音
喜欢 (0)
加载中……