Skip to content

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

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

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

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

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

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

โค้ดโปรแกรม

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()

ไฟล์โค้ด

ผลลัพธ์
ภาษาอังกฤษ

Text : I love you.
.. .-.. --- ...- . -.-- --- ..- .-.-.-

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

ภาษาไทย

Text : แมว
. - . - - - . - -

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

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

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

Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *