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



แปลงภาษาญี่ปุ่นเป็นโรมาจิด้วย pykakasi
เขียนเมื่อ 2017/01/24 17:07
คงมีบ่อยครั้งที่เวลาใช้ตัวหนังสือที่เขียนเป็นอักษรต่างๆที่ไม่ได้เป็นอักษรโรมันแล้วเกิดปัญหาเวลาใช้งานในคอมหรือโปรแกรมแกรมต่างๆในบางกรณี

ในเวลาแบบนี้ถ้าสามารถแปลงตัวอักษรเป็นอักษรโรมันเพื่อให้สามารถใช้งานได้ทุกที่ไม่มีปัญหาน่าจะดีกว่า

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

แต่พอมีคันจิเข้ามา นั่นจะไม่ใช่เรื่องง่ายอีกต่อไป เพราะเสียงอ่านคันจิมีความไม่แน่นอนสูงมาก บางตัวอ่านได้หลายแบบ พออยู่ในคำหนึ่งอ่านแบบหนึ่ง อยู่ในอีกคำอ่านอีกแบบ

ดังนั้นจึงมีคนทำโปรแกรมแปลงที่ชื่อ kakasi ขึ้นมาเพื่อใช้ถอดเสียงอ่านอย่างเป็นระบบ

ชื่อ kakasi มาจากคำว่า คาคาชิ (カカシ) เป็นภาษาญี่ปุ่น แปลว่าหุ่นไล่กา (ภาพข้างล่างนี้ไม่ได้มีความเกี่ยวข้องแต่อย่างใด)



เว็บของ kakasi >> http://kakasi.namazu.org/index.html.ja

kakasi ถูกทำเป็นไลบรารีสำหรับใช้ใสหลายภาษา เช่น C perl ruby สำหรับในไพธอนใช้ชื่อว่า pykakasi

สำหรับวิธีการติดตั้งนั้น ไม่ใช่ว่าแค่พิมพ์ pip ไปเฉยๆแบบนี้
pip install pykakasi

ถ้าทำแบบนั้นแม้จะติดตั้งได้โดยไม่มีปัญหาแต่พอใช้จริงๆจะติดปัญหา ใช้งานไม่ได้

ที่ถูกต้องคือต้องพิมพ์เป็น
pip install git+https://github.com/miurahr/pykakasi

แบบนี้จึงจะใช้ได้ไม่มีปัญหา

จากนั้นลองเริ่มทำการใช้งาน ขอเริ่มจากยกตัวอย่างการใช้
import pykakasi.kakasi as kakasi
kakasi = kakasi() # สร้างอินสแตนซ์

kakasi.setMode('H','a') # ตั้งให้แปลงฮิรางานะเป็นโรมาจิ
kakasi.setMode('K','a') # ตั้งให้แปลงคาตาคานะเป็นโรมาจิ
kakasi.setMode('J','a') # ตั้งให้แปลงคันจิเป็นโรมาจิ
kakasi.setMode('E','a') # ตั้งให้แปลงสัญลักษณ์เป็นแบบสากล
kakasi.setMode('r','Hepburn') # ตั้งให้ใช้เกณฑ์ของ Hepburn ในการทับศัพท์
kakasi.setMode('s', 1) # ตั้งให้มีการเว้นวรรคระหว่างคำ
kakasi.setMode('C', 1) # ตั้งให้เปลี่ยนอักษรตัวแรกเป็นตัวพิมพ์ใหญ่
romaji = kakasi.getConverter().do # สร้างฟังก์ชันแปลง
print(romaji('敷かれたレールになんか、あたしは興味がないんだもん!道は自分で切り開くからこそ価値があるんだよ!'))

(ที่มาของข้อความ http://hinaboshi.com/walidet/724479827570791)



ผลลัพธ์ที่ได้
Shika reta re-ru ninanka, atashiha Kyoumi ganaindamon !Michi ha Jibun de Kiri Hiraku karakoso Kachi gaarundayo !

จะเห็นว่าขั้นตอนการใช้ก็คือ
1. import มอดูล
2. สร้านอินสแตนซ์ของตัวแปลงขึ้นมา
3. ตั้งโหมดรูปแบบต่างๆให้เป็นไปตามที่ต้องการ
4. สร้างฟังก์ชันแปลงขึ้นมา
5. นำฟังก์ชันแปลงนั้นมาใช้แปลง

อนึ่ง สำหรับไพธอน 2 นั้นให้ระวังว่าสายอักขระที่ใช้จะต้องเป็นยูนิโค้ด คือต้องเติม u นำหน้าด้วย ไม่เช่นนั้นจะไม่ทำงาน

สำหรับในส่วนตั้งค่า ๔ บรรทัดแรกนั้นคือตัวที่กำหนดว่าอักษรไหนจะแปลงเป็นอะไร โดยตัวซ้ายคือตัวตั้งต้น ขวาคือตัวที่ได้ ในที่นี้ความหมายของอักษรย่อก็คือ
H ฮิรางานะ สามารถแปลงเป็นโรมาจิ (a) หรือคาตาคานะ (K)
K คาตาคานะ สามารถแปลงเป็นโรมาจิ (a) หรือฮิรางานะ (H)
J คันจิ สามารถแปลงเป็นโรมาจิ (a) หรือคาตาคานะ (K) หรือฮิรางานะ (H)
E สัญลักษณ์ ถ้าตั้งเป็น a จะหมายความว่าแปลงสัญลักษณ์แบบญี่ปุ่น เช่น 、・「」『』 ไปเป็น ,・()()

ในที่นี้ต้องการแปลงเป็นโรมาจิทั้งหมดจึงเขียนเป็น a ทั้งหมด แต่จะแปลงคันจิเป็นคาตาคานะหรือฮิรางานะก็ได้เช่นกัน เช่น
kakasi.setMode('H','H') # ตั้งให้ไม่ต้องแปลงฮิรางานะ
kakasi.setMode('K','H') # ตั้งให้แปลงคาตาคานะเป็นฮิรางานะ
kakasi.setMode('J','H') # ตั้งให้แปลงคันจิเป็นฮิรางานะ
romaji = kakasi.getConverter().do
print(romaji('彼女にフラグを折られたら'))

ได้
かのじょ にふらぐ をおら れたら

ส่วน ๓ บรรทัดที่เหลือเป็นแฟล็ก
r เกณฑ์การทับศัพท์ มี ๓ แบบให้เลือกคือ Hepburn,Kunrei,Passport
s จะเว้นวรรคระหว่างคำหรือไม่ (0=False, 1=True)
C จะให้ตัวแรกเป็นพิมพ์ใหญ่หรือไม่ (0=False, 1=True)

ลองมาดูความแตกต่างระหว่างระบบการทับศัพท์แบบต่างๆ
s = 'しじ、ちぢ、つづ、ふヴ、しゃしゅしょ、ツァシェ、ヴァふぉウォを、ゐゑ'
kakasi.setMode('H','a')
kakasi.setMode('K','a')
kakasi.setMode('r','Hepburn')
romaji = kakasi.getConverter().do
print(romaji(s))
kakasi.setMode('r','Kunrei')
romaji = kakasi.getConverter().do
print(romaji(s))
kakasi.setMode('r','Passport')
romaji = kakasi.getConverter().do
print(romaji(s))

ได้
shiji, chiji, tsuzu, fu vu, shashusho, tsuashie, va fo uo wo, ie
sizi, tizi, tuzu, fu vu, syasyusyo, tuasie, va fo uo wo, ie
shiji, chiji, tsuzu, fu bu, shashusho, tsuashie, bua fuo uo wo, ie

เท่าที่ดูปัญหาที่ยังเป็นอยู่ไม่ว่าจะใช้ระบบไหนก็คือ
- を กลายเป็น wo แทนที่จะเป็น o
- ウォ กลายเป็น uo แทนที่จะเป็น wo
- ツァ กลายเป็น tsua หรือ tua แทนที่จะเป็น tsa
- シェ กลายเป็น shie หรือ sie แทนที่จะเป็น she
- は กลายเป็น ha เสมอ แม้จะใช้เป็นคำช่วยก็ไม่เป็น wa
- へ กลายเป็น he เสมอ แม้จะใช้เป็นคำช่วยก็ไม่เป็น e

แต่ถ้ารู้ว่าตรงไหนที่มีปัญหาก็แค่เอามาแปลงต่ออีกทีให้เป็นแบบที่ตัวเองต้องการก็พอ มาถึงขั้นนี้ก็ทำต่อได้ไม่ยากอยู่แล้ว



ส่วนปัญหาเรื่องคันจินั้นยิ่งมีมาก คันจิที่อ่านได้หลายแบบ และที่เป็นข้อยกเว้นต่างๆก็มีเยอะ ไม่อาจแปลงได้สมบูรณ์

ยิ่งพวกชื่อบุคคลต่างๆยิ่งไม่สามารถทำให้ถูกต้องได้ เช่น
print(romaji('雨宮天')) # ได้ Amemiya Ten แต่ที่ถูกต้องคือ Amamiya Sora

เพียงแต่ว่าหากเป็นบุคคลที่มีชื่อเสียงมากในประวัติศาสตร์ก็อาจจะถูกแปลงถูกต้อง
print(romaji('夏目 漱石')) # ได้ Natsume  Souseki
print(romaji('愛新覚羅溥儀')) # ได้ Ai Shin Kaku Ra Fu Gi

แต่บางชื่อดูเหมือนว่าจะต้องเขียนชื่อนามสกุลติดกัน ไม่เช่นนั้นก็ผิดอยู่ดี
print(romaji('土方歳三')) # ได้ Hijikatatoshizou (ถูกต้อง)
print(romaji('土方 歳三')) # ได้ Dokata  Toshi San (ผิด)

ดังนั้นแล้วหากเจอพวกชื่อเฉพาะยังไงก็ยังคงต้องมาเพิ่มเติมเองเพื่อแก้ให้ถูกต้องจริงๆอยู่ดี



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

สำหรับวิธีการอ่านออกเสียงโรมาจิและทับศัพท์เป็นภาษาไทยหน้านี้ได้ https://phyblas.hinaboshi.com/20130109



อ้างอิง
http://pythonskywalker.hatenablog.com/entry/2016/10/20/094509
http://qiita.com/almichest/items/52f871ee22e4a44346d4


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

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

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

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

หมวดหมู่

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

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
python
-- numpy
-- matplotlib

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

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



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

  ค้นหาบทความ

  บทความแนะนำ

หลักการเขียนทับศัพท์ภาษาจีนกลาง
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
บ้านเก่าของจางเสวียเหลียงในเทียนจิน
เที่ยวจิ่นโจว ๓ วัน ๒ คืน 23 - 25 พ.ค. 2015
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
บันทึกการเที่ยวสวีเดน 1-12 พ.ค. 2014
แนะนำองค์การวิจัยและพัฒนาการสำรวจอวกาศญี่ปุ่น (JAXA)
เที่ยวฮ่องกงในคืนคริสต์มาสอีฟ เดินทางไกลจากสนามบินมาทานติ่มซำอร่อยโต้รุ่ง
เล่าประสบการณ์ค่ายอบรมวิชาการทางดาราศาสตร์โดยโซวเคนได 10 - 16 พ.ย. 2013
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
บันทึกการเที่ยวญี่ปุ่นครั้งแรกในชีวิต - ทุกอย่างเริ่มต้นที่สนามบินนานาชาติคันไซ
หลักการเขียนคำทับศัพท์ภาษาญี่ปุ่น
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ
ทำไมถึงอยากมาเรียนต่อนอก
เหตุผลอะไรที่ต้องใช้ภาษาวิบัติ?

ไทย

日本語

中文