Python 阿拉伯语文本 returns 从右到左而不是从左到右
Python arabic text returns in right-to-left orientation instead of left-to-right
我正在使用 Python(3.6) 和 Flask 开发一个 python 项目,其中我必须 return 阿拉伯语文本。当我在控制台中打印文本时,它运行良好,但是当我 return 作为响应时,它的顺序更改为从右到左。
这是我尝试过的方法:
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
的结果是:
这是它的回应方式:
{
"ref": "94:2",
"sound": "https://raw.githubusercontent.com/semarketir/quranjson/master/source/audio/094/002.mp3",
"text": "ﻙﺭﺯﻭ ﻚﻨﻋ ﺎﻨﻌﺿﻭﻭ",
"translation": "And lift from you your burden."
}
如何获得阿拉伯语文本的正确方向?
你真的需要arabic_reshaper and 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
输出文本将带有阿拉伯变音符号和古兰经注解。如果要删除它们,请使用以下正则表达式替换:
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)
有关这些替换的详细信息,请参阅 Arabic Unicode Chart and Arabic Extended-A Unicode Chart。
我正在使用 Python(3.6) 和 Flask 开发一个 python 项目,其中我必须 return 阿拉伯语文本。当我在控制台中打印文本时,它运行良好,但是当我 return 作为响应时,它的顺序更改为从右到左。
这是我尝试过的方法:
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
的结果是:
这是它的回应方式:
{
"ref": "94:2",
"sound": "https://raw.githubusercontent.com/semarketir/quranjson/master/source/audio/094/002.mp3",
"text": "ﻙﺭﺯﻭ ﻚﻨﻋ ﺎﻨﻌﺿﻭﻭ",
"translation": "And lift from you your burden."
}
如何获得阿拉伯语文本的正确方向?
你真的需要arabic_reshaper and 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
输出文本将带有阿拉伯变音符号和古兰经注解。如果要删除它们,请使用以下正则表达式替换:
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)
有关这些替换的详细信息,请参阅 Arabic Unicode Chart and Arabic Extended-A Unicode Chart。