下面這個小工具包含了 判斷unicode是否是漢字,數字,英文,或者其他字元。 全形符號轉半形符號。 unicode字串歸一化等工作。 還有一個能處理多音字的漢字轉拼音的程式,還在整理中。
#!/usr/bin/env python
# -*- coding:GBK -*-
"""漢文書處理的工具:
判斷unicode是否是漢字,數字,英文,或者其他字元。
全形符號轉半形符號。"""
__author__="internetsweeper <zhengbin0713@gmail.com>"
__date__="2007-08-04"
def is_chinese(uchar):
"""判斷一個unicode是否是漢字"""
if uchar >= u'/u4e00' and uchar<=u'/u9fa5':
return True
else:
return False
def is_number(uchar):
"""判斷一個unicode是否是數字"""
if uchar >= u'/u0030' and uchar<=u'/u0039':
return True
else:
return False
def is_alphabet(uchar):
"""判斷一個unicode是否是英文字母"""
if (uchar >= u'/u0041' and uchar<=u'/u005a') or (uchar >= u'/u0061' and uchar<=u'/u007a'):
return True
else:
return False
def is_other(uchar):
"""判斷是否非漢字,數字和英文字元"""
if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):
return True
else:
return False
def B2Q(uchar):
"""半形轉全形"""
inside_code=ord(uchar)
if inside_code<0x0020 or inside_code>0x7e: #不是半形字元就返回原來的字元
return uchar
if inside_code==0x0020: #除了空格其他的全形半形的公式為:半形=全形-0xfee0
inside_code=0x3000
else:
inside_code+=0xfee0
return unichr(inside_code)
def Q2B(uchar):
"""全形轉半形"""
inside_code=ord(uchar)
if inside_code==0x3000:
inside_code=0x0020
else:
inside_code-=0xfee0
if inside_code<0x0020 or inside_code>0x7e: #轉完之後不是半形字元返回原來的字元
return uchar
return unichr(inside_code)
def stringQ2B(ustring):
"""把字串全形轉半形"""
return "".join([Q2B(uchar) for uchar in ustring])
def uniform(ustring):
"""格式化字串,完成全形轉半形,大寫轉小寫工作"""
return stringQ2B(ustring).lower()
def string2List(ustring):
"""將ustring按照中文,字母,數字分開"""
retList=[]
utmp=[]
for uchar in ustring:
if is_other(uchar):
if len(utmp)==0:
continue
else:
retList.append("".join(utmp))
utmp=[]
else:
utmp.append(uchar)
if len(utmp)!=0:
retList.append("".join(utmp))
return retList
if __name__=="__main__":
#test Q2B and B2Q
for i in range(0x0020,0x007F):
print Q2B(B2Q(unichr(i))),B2Q(unichr(i))
#test uniform
ustring=u'中國 人名a高頻A'
ustring=uniform(ustring)
ret=string2List(ustring)
print ret