簡體   English   中英

將用 2 個不同文字寫成的句子音譯成一個文字

[英]Transliterate sentence written in 2 different scripts to a single script

我能夠將用英語編寫的印地語腳本轉換回印地語

import codecs,string
from indic_transliteration import sanscript
from indic_transliteration.sanscript import SchemeMap, SCHEMES, transliterate


def is_hindi(character):
    maxchar = max(character)
    if u'\u0900' <= maxchar <= u'\u097f':
    return character
    else:
        print(transliterate(character, sanscript.ITRANS, sanscript.DEVANAGARI)

character = 'bakrya'
is_hindi(character)

Output:
बक्र्य

但是如果我嘗試做這樣的事情,我不會得到任何轉換

character = 'Bakrya विकणे आहे'
is_hindi(character)

Output:
Bakrya विकणे आहे

Expected Output:
बक्र्य विकणे आहे

我也嘗試過圖書館 Polyglot,但我得到了類似的結果。

前言:我對梵文一無所知,所以你必須忍受我。

首先,考慮你的功能。 它可以返回兩個東西, characterNone (打印只是輸出一些東西,它實際上並不返回值)。 這使得您的第一個輸出示例源自 print 函數,而不是 Python 評估您的最后一條語句。

然后,當您考慮第二個測試字符串時,它會看到有一些梵文文本,然后將字符串返回。 如果這種音譯像我認為的那樣有效,您必須做的是將這個功能應用到文本中的每個單詞。

我將您的功能修改為:

def is_hindi(character):
    maxchar = max(character)
    if u'\u0900' <= maxchar <= u'\u097f':
        return character
    else:
        return transliterate(character, sanscript.ITRANS, sanscript.DEVANAGARI)

並將您的電話修改為

' '.join(map(is_hindi, character.split()))

我來解釋一下,從右到左。 首先,我使用.split()將您的測試字符串拆分為單獨的單詞。 然后,我將新的is_hindi函數映射(即,將該函數應用於每個元素)到這個新列表。 最后,我用空格連接單獨的單詞以返回轉換后的字符串。

輸出:

'बक्र्य विकणे आहे'

如果我可以建議,我會將這個拆分/映射功能放到另一個函數中,以使事情更容易應用。

編輯:我不得不將您的測試字符串從'Bakrya विकणे आहे''bakrya विकणे आहे'因為B沒有被轉換。 這可以通過character.lower()在通用文本中修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM