Source code for pythainlp.util.morse

# -*- coding: utf-8 -*-
# SPDX-FileCopyrightText: 2016-2024 PyThaiNLP Project
# SPDX-License-Identifier: Apache-2.0

THAI_MORSE_CODE = {
    "ก": "--.",
    "ข": "-.-.",
    "ค": "-.-",
    "ฆ": "-.-",
    "ง": "-.--.",
    "จ": "-..-.",
    "ฉ": "----",
    "ช": "-..-",
    "ฌ": "-..-",
    "ซ": "--..",
    "ญ": ".---",
    "ด": "-..",
    "ถ": "-.-..",
    "ฐ": "-.-..",
    "ฑ": "-..--",
    "ฒ": "-..--",
    "ท": "-..--",
    "ธ": "-..--",
    "ณ": "-.",
    "น": "-.",
    "บ": "-...",
    "ป": ".--.",
    "ผ": "--.-",
    "ฝ": "-.-.-",
    "พ": ".--..",
    "ภ": ".--..",
    "ฟ": "..-.",
    "ม": "--",
    "ย": "-.--",
    "ร": ".-.",
    "ล": ".-..",
    "ฬ": ".-..",
    "ว": ".--",
    "ศ": "...",
    "ษ": "...",
    "ส": "...",
    "ห": "....",
    "ฮ": "--.--",
    "ฎ": "-..",
    "ต": "-",
    "ฏ": "-",
    "ฤ": ".-.--",
    "่": "..-",
    "้": "...-",
    "๊": "--...",
    "๋": ".-.-.",
    "ั": ".--.-",
    "็": "---..",
    "์": "--..-",
    "ั้": ".---.",
    "ฯ": "--.-.",
    "ฯลฯ": "---.-",
    "ๆ": "---.-",
    "ะ": ".-...",
    "า": ".-",
    "ิ": "..-..",
    "ี": "..",
    "ึ": "..--.",
    "ื": "..--",
    "ุ": "..-.-",
    "ู": "---.",
    "เ": ".",
    "แ": ".-.-",
    "โ": "---",
    "ไ": ".-..-",
    "ใ": ".-..-",
    "ำ": "...-.",
    "อ": "-...-",
}

ENGLISH_MORSE_CODE = {
    "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 = {}
for key, val in ENGLISH_MORSE_CODE.items():
    decodingeng[val] = key

decodingthai = {}
for key, val in THAI_MORSE_CODE.items():
    decodingthai[val.replace(" ", "")] = key

for key, val in THAI_MORSE_CODE.items():
    THAI_MORSE_CODE[key] = val.replace(" ", "")


[docs]def morse_encode(text: str, lang: str = "th") -> str: """ Convert text to Morse code (support Thai and English) :param str text: Text :param str lang: Language Code (*th* is Thai and *en* is English) :return: Morse code :rtype: str :Example: :: from pythainlp.util.morse import morse_encode print(morse_encode("แมว", lang="th")) # output: .-.- -- .-- print(morse_encode("cat", lang="en")) # output: -.-. .- - """ if lang == "th": # Thai return " ".join( map(lambda x, g=THAI_MORSE_CODE.get: g(x, " "), text.upper()) ) elif lang == "en": # English return " ".join( map(lambda x, g=ENGLISH_MORSE_CODE.get: g(x, " "), text.upper()) ) else: raise NotImplementedError(f"This function doesn't support {lang}.")
[docs]def morse_decode(morse_text: str, lang: str = "th") -> str: """ Simple Convert Morse code to text Thai still have some wrong character problem that\ can fix by spell corrector. :param str morse_text: Morse code :param str lang: Language Code (*th* is Thai and *en* is English) :return: Text :rtype: str :Example: :: from pythainlp.util.morse import morse_decode print(morse_decode(".-.- -- .--", lang="th")) # output: แมว print(morse_decode("-.-. .- -", lang="en")) # output: CAT """ if lang == "th": ans = "".join( map(lambda x, g=decodingthai.get: g(x, ""), morse_text.split(" ")) ) return "".join(ans.split()) elif lang == "en": ans = "".join( map(lambda x, g=decodingeng.get: g(x, " "), morse_text.split(" ")) ) return " ".join(ans.split()) else: raise NotImplementedError(f"This function doesn't support {lang}.")