今天在 "Python 技術者實踐! (旗標, 2018)" 這本書的第 15 章讀到 HanziConv 這個中文簡繁體套件, 在中文語意分析與自然語言處理時很好用, 於是便馬上進行測試. HanziConv 為第三方套件, 需先用 pip 或 pip3 install 指令安裝後才能使用 :
pip install hanziconv
C:\Users\User>pip install hanziconv
Collecting hanziconv
Downloading hanziconv-0.3.2.tar.gz (276 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: hanziconv
Building wheel for hanziconv (setup.py) ... done
Created wheel for hanziconv: filename=hanziconv-0.3.2-py2.py3-none-any.whl size=23214 sha256=2e97cb6420e5c4f9c2096e34c338174d9ea8560905594bc74df25ea54cfe9500
Stored in directory: c:\users\user\appdata\local\pip\cache\wheels\bf\e3\22\7bf50146a3ee95d1fdcbfabc44a1fe15b6e2ab7348ab7337bf
Successfully built hanziconv
Installing collected packages: hanziconv
Successfully installed hanziconv-0.3.2
安裝完成即可匯入 hanziconv , 然後用 dir() 函式來觀察此套件之內容 :
>>> import hanziconv
>>> dir(hanziconv)
['HanziConv', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'absolute_import', 'charmap', 'hanziconv', 'unicode_literals']
可以利用求值函式 eval() 取得成員的參考, 再用迴圈來檢視成員之資料類型 :
>>> members=dir(hanziconv)
>>> for mbr in members: # 走訪 hanziconv 模組成員
obj=eval('hanziconv.' + mbr) # 用 eval() 求值取得 hanziconv.成員之參考
if not mbr.startswith('_'): # 走訪所有不是 "_" 開頭的成員
print(mbr, type(obj)) # 輸出成員之類型
HanziConv <class 'type'>
absolute_import <class '__future__._Feature'>
charmap <class 'module'>
hanziconv <class 'module'>
unicode_literals <class '__future__._Feature'>
其中 HanziConv 就是這個套件定義的類別, 用 dir() 檢視其成員 :
>>> dir(hanziconv.HanziConv)
['_HanziConv__convert', '_HanziConv__simplified_charmap', '_HanziConv__traditional_charmap', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'same', 'toSimplified', 'toTraditional']
其中 toSimplified() 與 toTraditional() 就是用來做繁簡轉換的方法. 所以實際應用時不會用 import hanziconv 套件, 而是從套件 hanziconv 中指定匯入 HanziConv() 類別, 然後直接呼叫 toSimplified() 與 toTraditional() 這兩個方法 :
from hanziconv import HanziConv
>>> from hanziconv import HanziConv
>>> dir(HanziConv)
['_HanziConv__convert', '_HanziConv__simplified_charmap', '_HanziConv__traditional_charmap', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'same', 'toSimplified', 'toTraditional']
顧名思義, toSimplified() 是傳入繁體字串傳回簡體字串, 而 toTranditional() 則是傳入簡體字串傳回繁體字串, 可用 help() 查看其使用說明 :
>>> help(HanziConv.toSimplified)
Help on method toSimplified in module hanziconv.hanziconv:
toSimplified(text) method of builtins.type instance
Convert `text` to simplified character string. Assuming text is
traditional character string
:param text: text to convert
:returns: converted UTF-8 characters
>>> from hanziconv import HanziConv
>>> print(HanziConv.toSimplified('繁簡轉換器'))
繁简转换器
>>> help(HanziConv.toTraditional)
Help on method toTraditional in module hanziconv.hanziconv:
toTraditional(text) method of builtins.type instance
Convert `text` to traditional character string. Assuming text is
simplified character string
:param text: text to convert
:returns: converted UTF-8 characters
>>> from hanziconv import HanziConv
>>> print(HanziConv.toTraditional('繁简转换器'))
繁簡轉換器
簡轉繁例如 :
>>> HanziConv.toTraditional('游戏')
'遊戲'
>>> HanziConv.toTraditional('软件')
'軟件'
>>> HanziConv.toTraditional('内存')
'內存'
>>> HanziConv.toTraditional('鼠标')
'鼠標'
>>> HanziConv.toTraditional('打印机')
'打印機'
>>> HanziConv.toTraditional('硬盘')
'硬盤'
可見此套件只是逐字將簡體字轉成繁體字, 並沒有詞彙轉換功能 (例如將 '内存' 轉成 '記憶體', '打印机' 變 '印表機' 等).
繁轉簡例如 :
>>> HanziConv.toSimplified('中華民國萬歲')
'中华民国万岁'
>>> HanziConv.toSimplified('蔣總統萬歲')
'蒋总统万岁'
>>> HanziConv.toSimplified('智商高達 157 的阿北')
'智商高达 157 的阿北'
>>> HanziConv.toSimplified('硬盤')
'硬盘'
>>> HanziConv.toSimplified('硬碟')
'硬碟'
>>> HanziConv.toSimplified('雷射')
'雷射'
可見繁簡轉也是逐字轉換, 雷射不會得到激光. 關於兩岸用語差異參考 :
# 二岸用語對照表
沒有留言 :
張貼留言