วันก่อนได้แนะนำมอดูลสำหรับแปลงตัวภาษาญี่ปุ่นเป็นโรมาจิไปแล้วนั่นคือ pykakasi
https://phyblas.hinaboshi.com/20170124 แต่ว่ามาพบปัญหาว่า pykakasi จะไม่ทำการแปลงอักษรคาตาคานะที่มีขนาดเป็นครึ่งตัว (เช่น アカサタ ゙ แบบนี้) ด้วย ก็เลยไปลองหาวิธีที่สามารถแปลงอักษรแบบครึ่งตัวเป็นเต็มตัวได้
ที่จริงจะเขียนเองก็พอทำได้ วิธีการไม่ได้ยากซับซ้อนอะไรขนาดนั้น แต่เนื่องจากพอค้นไปแล้วก็มีมอดูลที่คนทำเอาไว้อยู่แล้วก็เลยเอามาใช้ดีกว่า
มอดูลที่ทำหน้าที่นี้ตอนนี้พบทั้งหมด ๓ ตัว ได้แก่ mojimoji, zenhan และ jaconv
ทั้ง ๓ ตัวนี้สามารถใช้เพื่อแปลงอักษรครึ่งตัวเป็นเต็มตัว หรือเต็มตัวเป็นครึ่งตัวได้เหมือนกัน
การติดตั้งล้วนแล้วแต่สามารถใช้ pip ทำได้ง่ายทั้งสิ้น
pip install mojimoji
pip install zenhan
pip install jaconv
mojimoji นั้นถูกเขียนขึ้นด้วยภาษา C ในขณะที่ zenhan และ jaconv เขียนด้วยภาษาไพธอนเอง ดังนั้น mojimoji จึงทำงานได้เร็วที่สุด ดังนั้นจึงน่าแนะนำมากที่สุด
ตัวอย่างการใช้ เวลาจะแปลงจากครึ่งตัวเป็นเต็มตัวทำได้โดยใช้ฟังก์ชัน han_to_zen
import mojimoji
mojimoji.han_to_zen(u'カサ789awa') # ได้ カサ789awa
mojimoji.han_to_zen(u'ガザ') # ได้ ガザ
จะเห็นว่าอักษร カ และ ゙ ก็ถูกรวมกันเป็น ガ ด้วย ดังนั้นนี่จึงไม่ใช่แค่แทนอักษรตัวหนึ่งด้วยอีกตัวหนึ่งง่ายๆ
(ปกติอักษรครึ่งตัวจะไม่มีการรวมตัว ゙ เข้าเป็นอักษรเดียวกัน จึงคล้ายกับเป็นวรรณยุกต์หรือสระลอยในภาษาไทย)
เพียงแต่ว่าทำแบบนี้อักษรทั้งหมดจะถูกเปลี่ยนเป็นเต็มตัว หากต้องการเปลี่ยนแค่คาตาคานะก็ให้เพิ่มคีย์เวิร์ด digit=0 และ ascii=0 ลงไป
mojimoji.han_to_zen(u'カサ789awa',digit=0,ascii=0) # ได้ カサ789awa
แต่ถ้าเพิ่มคีย์เวิร์ด kana=0 ลงไป จะเป็นการทำให้ไม่แปลงคาตาคานะ
mojimoji.han_to_zen(u'カサ789awa',kana=0) # ได้ カサ789awa
อนึ่ง ที่ใส่ u นำหน้าเครื่องหมายคำพูดลงไปนั้นเพื่อให้ใช้ได้ในไพธอน 2 ด้วย เพราะจะทำงานต่อเมื่อเป็นสายอักขระแบบยูนิโค้ดเท่านั้น แต่ในไพธอน 3 ไม่จำเป็นต้องใส่ u
และในทางตรงข้าม หากต้องการแปลงอักษรเต็มตัวเป็นครึ่งตัวก็ใช้ฟังก์ชัน zen_to_han ส่วนคีย์เวิร์ดก็ใช้ไดในลักษณะเดียวกัน
mojimoji.zen_to_han(u'カサ789awa') # ได้ カサ789awa
mojimoji.zen_to_han(u'ガザ') # ได้ ガザ
mojimoji.zen_to_han(u'カサ789awa',digit=0,kana=0) # ได้ カサ789awa
ส่วน jaconv กับ zenhan ก็มีลักษณะการใช้คล้ายๆกัน
อ้างอิง
http://qiita.com/ikuyamada/items/fea6c8f81e7cac7cf318