Python арабский c текст возвращается в направлении справа налево, а не слева направо - PullRequest
0 голосов
/ 11 марта 2020

Я работаю над проектом python с Python (3.6) и Flask, в котором я должен вернуть текст на арабском c. Когда я печатаю текст в консоли, он работает хорошо, но когда я возвращаю его как ответ, его порядок меняется справа налево.

Вот что я пробовал:

from odoa import ODOA
import arabic_reshaper
from bidi.algorithm import get_display
from flask import Flask
import json

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.route('/', methods=['GET'])
def get_an_ayah():
    odoa = ODOA()
    surah = odoa.get_random_surah(lang='en')
    text = surah.ayah.decode("utf-8")
    reshaped_text = arabic_reshaper.reshape(text)    # correct its shape
    arabic_text = get_display(reshaped_text, base_dir='R')
    print(arabic_text)
    translation = str(surah.translate)
    sound_file_url = str(surah.sound)
    reference = str(str(surah.surah_number) + ':' + str(surah.ayah_number))
    response_dict = {
        'text': arabic_text,
        'translation': translation,
        'sound': sound_file_url,
        'ref': reference
    }

    return response_dict

результат для print(arabix_text это:

enter image description here

и вот как это в ответ:

{
    "ref": "94:2",
    "sound": "https://raw.githubusercontent.com/semarketir/quranjson/master/source/audio/094/002.mp3",
    "text": "ﻙﺭﺯﻭ ﻚﻨﻋ ﺎﻨﻌﺿﻭﻭ",
    "translation": "And lift from you your burden."
}

как я могу получить правильную ориентацию для арабского c текст?

1 Ответ

1 голос
/ 13 марта 2020

Вам действительно нужно arabic_reshaper и python -bidi ?

Попробуйте вместо этого следующий код:

from odoa import ODOA
from flask import Flask
import json

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.route('/', methods=['GET'])
def get_an_ayah():
    odoa = ODOA()
    surah = odoa.get_random_surah(lang='en')
    text = surah.ayah.decode("utf-8")
    translation = str(surah.translate)
    sound_file_url = str(surah.sound)
    reference = str(str(surah.surah_number) + ':' + str(surah.ayah_number))
    response_dict = {
        'text': text,
        'translation': translation,
        'sound': sound_file_url,
        'ref': reference
    }

    return response_dict

Выходные данные текст будет с диалектами арабского c и аннотацией Корани c. Если вы хотите удалить их, используйте следующую замену регулярных выражений:

import re

PATTERN = re.compile(
    '['
    '\u0610-\u061a'
    '\u064b-\u065f'
    '\u0670'
    '\u06d6-\u06dc'
    '\u06df-\u06e8'
    '\u06ea-\u06ed'
    '\u08d4-\u08e1'
    '\u08d4-\u08ed'
    '\u08e3-\u08ff'
    ']',
)

letters_only_text = re.sub(PATTERN, '', text)

См. Араби c Диаграмма Unicode и Араби c Диаграмма Unicode Extended-A для получения дополнительной информации об этих заменах.

...