30 เมษายน 2558

Published 4/30/2558 by with 0 comment

เข้ารหัสมอร์สและถอดรหัสมอร์สใน Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปเขียนโปรแกรมเข้ารหัสมอร์สและถอดรหัสมอร์สใน Python กันครับ

รหัสมอร์ส (Morse code) คืออะไร
รหัสมอร์ส (Morse code) เป็นวิธีการส่งสารข้อความผ่านสนเทศเป็นสัญญาณไฟฟ้า

ในบทความนี้ผมได้ใช้โมดูล langdetect เข้ามา สำหรับตรวจเช็คภาษาครับ

ผมต้องการเขียนโปรแกรมเข้ารหัสมอร์สและถอดรหัสมอร์สที่ใช้รองรับรหัสมอร์สภาษาไทยด้วย ผมจึงใช้ข้อมูลอ้างอิงจาก http://www.thaitelecomkm.org/TTE/topic/attach/Morse_Codes/index.php มาแปลงเป็นข้อมูลครับ

หลักการของผม คือ ใช้ข้อมูลชนิด Dictionary เข้ามาจัดเก็บข้อมูลส่วนนี้ครับ โดยผมแยกข้อมูลรหัสมอร์สภาษาไทยกับภาษาอังกฤษออกจากกันเพื่อป้องกันการทับซ้อนของข้อมูลเกิดขึ้น และผมแยกข้อมูลตัวเลขและเครื่องหมายพิเศษต่าง ๆ ออกจากข้อมูลภาษาไทย เนื่องจากมีข้อมูลทับซ้อนกันครับ แล้วทำการจับคู่ข้อความกับรหัสมอร์ส ส่งออกเป็นรหัสมอร์ส การแปลงกลับทำการจับคู่รหัสมอร์สกับข้อความ ส่งออกเป็นข้อความ

โค้ดโปรแกรม

[python]
from langdetect import detect
thai = {'ก': '- - .','ข': '- . - .','ค': '- . -', 'ฆ': '- . -', 'ง': '- . - - .', 'จ': '- . . - .', 'ฉ': '- - - -', 'ช': '- . . -','ฌ':'- . . -',
'ซ': '- - . .', 'ญ': '. - - -','ด': '- . .', 'ถ': '- . - . .', 'ฐ': '- . - . .', 'ฑ': '- . . - -', 'ฒ': '- . . - -','ท': '- . . - -', 'ธ': '- . . - -',
'ณ': '- .', 'น': '- .', 'บ': '- . . .', 'ป': '. - - .', 'ผ': '- - . -', 'ฝ': '- . - . -',
'พ': '. - - . .', 'ภ': '. - - . .', 'ฟ': '. . - .', 'ม': '- -',
'ย': '- . - -', 'ร': '. - .', 'ล': '. - . .', 'ฬ': '. - . .',
'ว': '. - -', 'ศ': '. . .', 'ษ': '. . .', 'ส': '. . .',
'ห': '. . . .', 'อ': '- . . . -', 'ฮ': '- - . - -','ฎ': '- . .', 'ต': '-', 'ฏ': '-',
'ฤ': '. - . - -','่': '. . -', '้': '. . . -', '๊': '- - . . .',
'๋': '. - . - .', 'ั': '. - - . -', '็': '- - - . .',
'์': '- - . . -', 'ั้': '. - - - .', 'ฯ': '- - . - .',
'ฯลฯ': '- - - . -', 'ๆ': '- - - . -','ะ':'. - . . .','า':'. -','ิ':'. . - . .','ี':'. .','ึ':'. . - - .','ื':'. . - -','ุ':'. . - . -','ู':'- - - .','เ':'.','แ':'. - . -','โ':'- - -','ไ':'. - . . -','ใ':'. - . . -','ำ':'. . . - .','อ':'- . . . - '
} #ข้อมูลรหัสมอร์สภาษาไทย
eng = {'A': '.-',
'B': '-...',
'C': '-.-.',
'D': '-..',
'E': '.',
'F': '..-.',
'G': '--.',
'H': '....',
'I': '..',
'J': '.---',
'K': '-.-',
'L': '.-..',
'M': '--',
'N': '-.',
'O': '---',
'P': '.--.',
'Q': '--.-',
'R': '.-.',
'S': '...',
'T': '-',
'U': '..-',
'V': '...-',
'W': '.--',
'X': '-..-',
'Y': '-.--',
'Z': '--..',
'0': '-----', ',': '--..--',
'1': '.----', '.': '.-.-.-',
'2': '..---', '?': '..--..',
'3': '...--', ';': '-.-.-.',
'4': '....-', ':': '---...',
'5': '.....', "'": '.----.',
'6': '-....', '-': '-....-',
'7': '--...', '/': '-..-.',
'8': '---..', '(': '-.--.-'
} #ข้อมูลรหัสมอร์สภาษาอังกฤษ

decodingeng = {} #สร้าง Dictionary สำหรับใช้ถอดรหัสมอร์สภาษาอังกฤษ
for key, val in eng.items(): decodingeng[val] = key #ลูปข้อมูลรหัสมอร์สภาษาอังกฤษโดยดึงสลับตำแหน่งค่า key, val

def encodethai(text):
return ' '.join(map(lambda x, g=thai.get: g(x, ' '), text.upper())) #ทำการจับคู่ข้อความกับรหัสมอร์ส แล้วส่งค่ารหัสมอร์สออกมา
def encodeeng(text):
return ' '.join(map(lambda x, g=eng.get: g(x, ' '), text.upper())) #ทำการจับคู่ข้อความกับรหัสมอร์ส แล้วส่งค่ารหัสมอร์สออกมา

def decodeeng(message): #ถอดรหัสมอร์สภาษาอังกฤษ
ans = ''.join(map(lambda x, g=decodingeng.get: g(x, ' '), message.split(' '))) #จับคู่รหัสมอร์สกับข้อความ แล้วเก็บไว้ในตัวแปร
return ' '.join(ans.split()) # คืนค่าออกมา และกำหนดระยะห่างข้อความ
def decodethai(message): #ถอดรหัสมอร์สภาษาไทย
decodingthai = {} #สร้าง Dictionary สำหรับใช้ถอดรหัสมอร์สภาษาไทย
for key, val in thai.items(): decodingthai[val] = key #ลูปข้อมูลรหัสมอร์สภาษาไทย โดยดึงสลับตำแหน่งค่า key, val
ans = ''.join(map(lambda x, g=decodingthai.get: g(x, ''), message.split(' '))) #จับคู่รหัสมอร์สกับข้อความ แล้วเก็บไว้ในตัวแปร
return ''.join(ans.split()) # คืนค่าออกมา และกำหนดระยะห่างข้อความ

text = input("Text : ")

if detect(text) == 'th': # ถ้าข้อความที่รับมาเป๋นภาษาไทย
print(encodethai(text))
else: # ถ้าไม่ใช่ภาษาไทย แสดงว่าเป็นภาษาอังกฤษ
print(encodeeng(text))
print("\ndecode")
c = input(" = ")
b = input("Lang : ")
if b == 'th':
print(decodethai(c))
else:
print(decodeeng(c))
input()

[/python]

ไฟล์โค้ด


ผลลัพธ์
ภาษาอังกฤษ
Text : I love you.
.. .-.. --- ...- . -.-- --- ..- .-.-.-

decode
= .. .-.. --- ...- . -.-- --- ..- .-.-.-
Lang : eng
I LOVE YOU.

ภาษาไทย
Text : แมว
. - . - - - . - -

decode
= . - . - - - . - -
Lang : th
แมว

แต่การถอดรหัสมอร์สภาษาไทยอาจจะให้ตัวอักษรบางตัวผิดพลาดได้ครับ เพราะข้อมูลบางอันของรหัสมอร์สภาษาไทยใช้รหัสเหมือนกันครับ

ลองนำไปประยุกต์ใช้กันดูครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)