φυβλαςのβλογ
บล็อกของ phyblas



[python] แปลงอักษรไปมาระหว่างเต็มตัวและครึ่งตัว
เขียนเมื่อ 2017/02/02 16:51
แก้ไขล่าสุด 2021/09/28 16:42
วันก่อนได้แนะนำมอดูลสำหรับแปลงตัวภาษาญี่ปุ่นเป็นโรมาจิไปแล้วนั่นคือ 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


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文