Source code for pythainlp.transliterate.wunsen

# -*- coding: utf-8 -*-
"""
Transliterating Japanese/Korean/Mandarin/Vietnamese romanization text
to Thai text
By Wunsen

:See Also:
    * `GitHub \
        <https://github.com/cakimpei/wunsen>`_
"""
from wunsen import ThapSap


[docs]class WunsenTransliterate: """ Transliterating Japanese/Korean/Mandarin/Vietnamese romanization text to Thai text by Wunsen :See Also: * `GitHub \ <https://github.com/cakimpei/wunsen>`_ """
[docs] def __init__(self) -> None: self.thap_value = None self.lang = None self.jp_input = None self.zh_sandhi = None self.system = None
[docs] def transliterate( self, text: str, lang: str, jp_input: str = None, zh_sandhi: bool = None, system: str = None, ): """ Use Wunsen for transliteration :param str text: text wants transliterated to Thai text. :param str lang: source language :param str jp_input: japanese input method (for japanese only) :param bool zh_sandhi: mandarin third tone sandhi option (for mandarin only) :param str system: transliteration system (for japanese and mandarin only) :return: Thai text :rtype: str :Options for lang: * *jp* - Japanese (from Hepburn romanization) * *ko* - Korean (from Revised Romanization) * *vi* - Vietnamese (Latin script) * *zh* - Mandarin (from Hanyu Pinyin) :Options for jp_input: * *Hepburn-no diacritic* - Hepburn-no diacritic (without macron) :Options for zh_sandhi: * *True* - apply third tone sandhi rule * *False* - do not apply third tone sandhi rule :Options for system: * *ORS61* - for Japanese หลักเกณฑ์การทับศัพท์ภาษาญี่ปุ่น (สำนักงานราชบัณฑิตยสภา พ.ศ. 2561) * *RI35* - for Japanese หลักเกณฑ์การทับศัพท์ภาษาญี่ปุ่น (ราชบัณฑิตยสถาน พ.ศ. 2535) * *RI49* - for Mandarin หลักเกณฑ์การทับศัพท์ภาษาจีน (ราชบัณฑิตยสถาน พ.ศ. 2549) * *THC43* - for Mandarin เกณฑ์การถ่ายทอดเสียงภาษาจีนแมนดาริน ด้วยอักขรวิธีไทย (คณะกรรมการสืบค้นประวัติศาสตร์ไทยในเอกสาร ภาษาจีน พ.ศ. 2543) :Example: :: from pythainlp.transliterate.wunsen import WunsenTransliterate wt = WunsenTransliterate() wt.transliterate("ohayō", lang="jp") # output: 'โอฮาโย' wt.transliterate( "ohayou", lang="jp", jp_input="Hepburn-no diacritic" ) # output: 'โอฮาโย' wt.transliterate("ohayō", lang="jp", system="RI35") # output: 'โอะฮะโย' wt.transliterate("annyeonghaseyo", lang="ko") # output: 'อันนย็องฮาเซโย' wt.transliterate("xin chào", lang="vi") # output: 'ซีน จ่าว' wt.transliterate("ni3 hao3", lang="zh") # output: 'หนี เห่า' wt.transliterate("ni3 hao3", lang="zh", zh_sandhi=False) # output: 'หนี่ เห่า' wt.transliterate("ni3 hao3", lang="zh", system="RI49") # output: 'หนี ห่าว' """ if ( self.lang != lang or self.jp_input != jp_input or self.zh_sandhi != zh_sandhi or self.system != system ): if lang == "jp": self.jp_input = jp_input self.zh_sandhi = None self.system = system elif lang == "zh": self.jp_input = None self.zh_sandhi = zh_sandhi self.system = system elif lang == "ko" or lang == "vi": self.jp_input = None self.zh_sandhi = None self.system = None else: raise NotImplementedError( "The %s language is not implemented." % lang ) self.lang = lang input_lang = lang if input_lang == "jp": input_lang = "ja" setting = {} if self.jp_input is not None: setting.update({"input": self.jp_input}) if self.zh_sandhi is not None: setting.update({"option": {"sandhi": self.zh_sandhi}}) if self.system is not None: setting.update({"system": self.system}) self.thap_value = ThapSap(input_lang, **setting) return self.thap_value.thap(text)