📜  使用Python音译非 ASCII字符

📅  最后修改于: 2022-05-13 01:54:53.464000             🧑  作者: Mango

使用Python音译非 ASCII字符

音译是使用其他语言中发音相似的字母来书写一种语言的单词的过程。它处理其他语言中单词的发音。同样,在计算机语言中,计算机可以处理 ASCII字符,但在处理非 ASCII字符时存在问题。有时我们无法跳过非 ASCII字符,因为它会导致信息丢失。应该有一种方法可以读取非 ASCII字符并用 ASCII字符中的文本来表示它们。

方法一:

这种方法与内置库unidecode相关。该库有助于在Python中音译非 ASCII字符。它提供了一个unidecode()方法,该方法接受 Unicode 数据并尝试用 ASCII 表示它。此方法自动确定脚本语言并相应地音译它。它接受 unicode字符串值并返回字符串格式的音译。

脚步:

  • 导入unidecode
  • 使用输入文本调用unidecode()方法

例子:

Python3
# Import unidecode module from unidecode
from unidecode import unidecode
  
# Get transliteration for following
# non-ASCII text (Unicode string)
print(unidecode(u'ko\u017eu\u0161\u010dek'))
  
# Get transliteration for following
# non-ASCII text (Devanagari)
print(unidecode("आप नीचे अपनी भाषा और इनपुट उपकरण चुनें और लिखना आरंभ करें"))
  
# Get transliteration for following
# non-ASCII text (Chinese)
print(unidecode("谢谢你"))
  
# Get transliteration for following
# non-ASCII text (Japanese)
print(unidecode("ありがとう。"))
  
# Get transliteration for following
# non-ASCII text (Russian)
print(unidecode("улыбаться Владимир Путин"))


Python
# Create devanagari transliteration dictionary
devanagari_translit_dict = {
    '\u0905': 'A', '\u0906': 'AA', '\u0907': 'I', '\u0908': 'II',
    '\u0909': 'U', '\u090A': 'UU', '\u090F': 'E', '\u0910': 'AI',
    '\u0913': 'O', '\u0914': 'AU', '\u0915': 'K', '\u0916': 'KH',
    '\u0917': 'G', '\u0918': 'GH', '\u0919': 'NG', '\u091A': 'C',
    '\u091B': 'CH', '\u091C': 'J', '\u091D': 'JH', '\u091E': 'NY',
    '\u091F': 'TT', '\u0920': 'TTH', '\u0921': 'DD', '\u0922': 'DDH',
    '\u0923': 'NN', '\u0924': 'T', '\u0925': 'TH', '\u0926': 'D',
    '\u0927': 'DH', '\u0928': 'N', '\u092A': 'P', '\u092B': 'PH',
    '\u092C': 'B', '\u092D': 'BH', '\u092E': 'M', '\u092F': 'Y',
    '\u0930': 'R', '\u0932': 'L', '\u0933': 'LL', '\u0935': 'V',
    '\u0936': 'SH', '\u0937': 'SS', '\u0938': 'S', '\u0939': 'H',
    '\u093E': 'AA', '\u093F': 'I', '\u0940': 'II', '\u0941': 'U',
    '\u0942': 'UU', '\u0947': 'E', '\u0948': 'AI', '\u094B': 'O',
    '\u094C': 'AU', '\u094D': '', '\u0902': 'n'}
  
# Define function transliterating text
def transliterate(text, translit_dict):
    new_word = ''
    for letter in text:
        new_letter = ''
        if letter in translit_dict:
            new_letter = translit_dict[letter]
        else:
            new_letter = letter
        new_word += new_letter
    return new_word
  
# Input text in devanagari
text = "आप नीचे अपनी भाषा और इनपुट उपकरण चुनें और लिखना आरंभ करें"
  
# Obtain Transliterated text for given input text
transliterated_text = transliterate(text, devanagari_translit_dict)
print(transliterated_text)


输出:

kozuscek
aap niice apnii bhaassaa aur inputt upkrnn cuneN aur likhnaa aarNbh kreN
Xie Xie Ni
arigatou.
ulybat'sia Vladimir Putin

方法二:

这种方法涉及构建有助于音译的结构。在此,非 ASCII字符的 Unicode 值标有相关的 ASCII 值,此处提供了脚本列表。每个脚本中字母的 Unicode 值随可表示的 ASCII字符一起提供。维基百科还收集了 Unicode 值和相应的音译。

脚步:

  • 创建以 Unicode 值作为键和 ASCII 表示作为值的字典
  • 使用该词典音译文本中的每个字母。

例如,如果我们要音译俄语,我们将采用西里尔字母的所有字母,因为俄语使用西里尔字母。然后对于每个字母,使用其 Unicode 值和 ASCII 表示来创建字典。然后,这本词典用于音译给定的文本。

例如,取一些梵文字母并创建字典。此外,它用于小文本以进行音译。

例子:

Python

# Create devanagari transliteration dictionary
devanagari_translit_dict = {
    '\u0905': 'A', '\u0906': 'AA', '\u0907': 'I', '\u0908': 'II',
    '\u0909': 'U', '\u090A': 'UU', '\u090F': 'E', '\u0910': 'AI',
    '\u0913': 'O', '\u0914': 'AU', '\u0915': 'K', '\u0916': 'KH',
    '\u0917': 'G', '\u0918': 'GH', '\u0919': 'NG', '\u091A': 'C',
    '\u091B': 'CH', '\u091C': 'J', '\u091D': 'JH', '\u091E': 'NY',
    '\u091F': 'TT', '\u0920': 'TTH', '\u0921': 'DD', '\u0922': 'DDH',
    '\u0923': 'NN', '\u0924': 'T', '\u0925': 'TH', '\u0926': 'D',
    '\u0927': 'DH', '\u0928': 'N', '\u092A': 'P', '\u092B': 'PH',
    '\u092C': 'B', '\u092D': 'BH', '\u092E': 'M', '\u092F': 'Y',
    '\u0930': 'R', '\u0932': 'L', '\u0933': 'LL', '\u0935': 'V',
    '\u0936': 'SH', '\u0937': 'SS', '\u0938': 'S', '\u0939': 'H',
    '\u093E': 'AA', '\u093F': 'I', '\u0940': 'II', '\u0941': 'U',
    '\u0942': 'UU', '\u0947': 'E', '\u0948': 'AI', '\u094B': 'O',
    '\u094C': 'AU', '\u094D': '', '\u0902': 'n'}
  
# Define function transliterating text
def transliterate(text, translit_dict):
    new_word = ''
    for letter in text:
        new_letter = ''
        if letter in translit_dict:
            new_letter = translit_dict[letter]
        else:
            new_letter = letter
        new_word += new_letter
    return new_word
  
# Input text in devanagari
text = "आप नीचे अपनी भाषा और इनपुट उपकरण चुनें और लिखना आरंभ करें"
  
# Obtain Transliterated text for given input text
transliterated_text = transliterate(text, devanagari_translit_dict)
print(transliterated_text)

输出:

AAP NIICE APNII BHAASSAA AUR INPUTT UPKRNN CUNEn AUR LIKHNAA AARnBH KREn