คงมีบ่อยครั้งที่เวลาใช้ตัวหนังสือที่เขียนเป็นอักษรต่างๆที่ไม่ได้เป็นอักษรโรมันแล้วเกิดปัญหาเวลาใช้งานในคอมหรือโปรแกรมแกรมต่างๆในบางกรณี
ในเวลาแบบนี้ถ้าสามารถแปลงตัวอักษรเป็นอักษรโรมันเพื่อให้สามารถใช้งานได้ทุกที่ไม่มีปัญหาน่าจะดีกว่า
ในการแปลงเป็นอักษรโรมันนั้นสำหรับภาษาญี่ปุ่นหากเป็นอักษรคาตาคานะหรือฮิรางานะละก็สามารถทำได้ง่ายได้สบายมาก คงสามารถเขียนโปรแกรมแปลงเองได้ไม่ยาก เพราะมีหลักตายตัวอยู่แล้ว
แต่พอมีคันจิเข้ามา นั่นจะไม่ใช่เรื่องง่ายอีกต่อไป เพราะเสียงอ่านคันจิมีความไม่แน่นอนสูงมาก บางตัวอ่านได้หลายแบบ พออยู่ในคำหนึ่งอ่านแบบหนึ่ง อยู่ในอีกคำอ่านอีกแบบ
ดังนั้นจึงมีคนทำโปรแกรมแปลงที่ชื่อ 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