使用 arabic-reshaper 和 python-bidi (在多行情况下)时如何修复反向行?

2023-11-30

当我使用 arabic-reshaper 和 python-bidi 时,我遇到了一个糟糕的结果,这些行从最后一行开始呈现。


我做了一个函数来解决这个问题,因为没有办法用另一种方式解决它,bidi正在反转字符以将第一个放在最后,依此类推,这是因为阿拉伯语从右到左开始,这样bidi 会伪造结果以正确的形状出现,但是当文本必须进入多行时,在末尾显示第一个单词将是错误的!所以我必须让它这样做,然后我必须将结果反转为反转行,这取决于该行可以包含多少个单词,我通过传递两个参数来计算,w_w表示小部件的宽度(或其他参数) place) 文本出现的位置,(f_w) 表示所使用字体的字符宽度。

然后在累积每一行之后,我反转行显示,就是这样!这是我制作的功能:

import arabic_reshaper
import bidi.algorithm
    
def getAR(arWord, w_w=0, f_w=0):
    arWord = arWord.strip()
    if len(arWord) <= 0: return ''
    startList0 = bidi.algorithm.get_display(arabic_reshaper.reshape(arWord))
    if (not w_w) or (not f_w):
        return startList0
    else:
        # return startList0
        startList = startList0.split(' ')[::-1]
        if len(startList) == 0: return ''
        if len(startList) == 1: return str(startList[0])
        n = floor( w_w / f_w )
        for i in startList:
            if len(i) > n: return startList0
        tempS = ''
        resultList = []
        for i in range(0, len(startList)):
            if (tempS != ''): tempS = ' ' + tempS
            if (len(tempS) + (len(startList[i])) > n):
                tempS = tempS + "\n"
                resultList.append(tempS)
                tempS = startList[i]
            else:
                tempS = startList[i] + tempS
                if i == (len(startList)-1):
                    resultList.append(tempS)
        return ''.join(resultList)

你将像这样使用它:

w_w = ... # calculat it yourself, the width of where you will put the text.
f_w = ... # calculat it yourself, the width of the character in the font you are using. 
paragraph = "...  ..."
widget.text = getAr(paragraph, w_w=w_w, f_w=f_w)

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 arabic-reshaper 和 python-bidi (在多行情况下)时如何修复反向行? 的相关文章

随机推荐

  • 使用 AWS Glue 时如何在 postgres 中将字符串保存为 JSONB 类型

    我正在寻找如何在 postgresql 中将字符串编写为 jsonb 类型的解决方案 所以DynamicFrame有一个字符串列来保存json数据 当尝试保存到 postgres 时 DataSink0 glueContext write
  • Facebook 点赞框不起作用

    我的一位客户在 Facebook 上点赞框时遇到了问题 我和一个朋友根本不明白我们做错了什么 并且已经盯着这个问题近三天了 这是我们从developers facebook com 获得的代码 div div
  • 从网络下载文件,然后使用保存文件对话框保存?

    如何下载文件 然后将其保存到我想要的位置 我正在使用 Windows 窗体 Web 应用程序 我知道我可以使用以下代码下载它 WebClient wClient new WebClient wClient DownloadFile WebL
  • Numpy.argsort - 看不出出了什么问题

    我正在尝试使用 argsort 函数对 numpy 数组进行排序 不幸的是 这不起作用 我不明白为什么 代码是 import numpy as np distance np array 38 26 33 01 32 33 30 77 37
  • 未展平结果时 NEST 上出现内部错误

    我正在尝试分组并将重复字段返回到新表中 SELECT url NEST label AS labels FROM mytable GROUP EACH BY url 当我选中 展平结果 复选框时 它就起作用了 当我取消选中该框时 我收到 错
  • 文本差异算法

    我需要一种算法 可以比较两个文本文件并突出显示它们的差异 并且 甚至更好 可以以有意义的方式计算它们的差异 就像两个相似的文件应该具有比两个不相似的文件更高的相似性分数 并带有 相似 一词 在正常术语中定义 听起来很容易实现 但事实并非如此
  • 如何删除htaccess中的url参数[关闭]

    Closed 这个问题是无关 目前不接受答案 我有一个 codigniter 网站 不喜欢添加 url 参数 例如 mysite com page value 很好 但是 mysite com page value url paramete
  • 我正在尝试将音乐添加到我用 JS 和 jQuery 编写的虚拟游览应用程序中 到目前为止 我的代码 如下所示 在 Chrome FF IE9 和 Opera 中运行良好 但在 Safari 5 1 7 这是 Windows 机器上最新的版本
  • 如何捕获Enter键按下的情况? [复制]

    这个问题在这里已经有答案了 在我的 HTML 页面中 我有一个文本框供用户输入关键字进行搜索 当他们单击搜索按钮时 JavaScript 函数将生成一个 URL 并在新窗口中运行 当用户用鼠标单击搜索按钮时 JavaScript 函数工作正
  • 将滚动面板的垂直滚动条移至左侧

    使用 JavaFX 我想将滚动面板的垂直滚动条移动到组件的左侧 而不是默认的右侧 我尝试使用 CSS 中的 fx alignment 来做到这一点 但不起作用 scroll pane scroll bar vertical fx align
  • 大全景平移视频

    从全景图像创建视频的最有效方法是什么 例如 其大小为 5000 width x 600 height px 我创建了这个 GIF 图像来更好地解释事情 想象一下视频位于红色边框内 因此视频可能会从左向右平移 移动作物是在 ffmpeg 中实
  • WPF XAML 设计器显示绑定属性名称而不是属性值

    我的一个 XAML 文件在 XAML 设计器中显示了一种奇怪的行为 但不是在运行时 public class MyDesignTimeViewModel public MyDesignTimeViewModel MyText abc MyI
  • WPF 矩形颜色绑定

    我正在尝试编写矩形网格 它确实会改变其对象的颜色 private void Window Loaded object sender RoutedEventArgs e for int i 0 i lt size i main grid Co
  • 硬编码的字符串是否可以接受?

    如同硬编码文字是否可以接受 但我在这里特别想到 神奇的字符串 在一个大型项目中 我们有一个配置选项表 如下所示 Name Value FOO ENABLED Y BAR ENABLED N 数百个 常见的做法是调用通用函数来测试选项 如下所
  • 如何计算一般类型分配的内存大小

    我需要使用一些数据库来读取read table来自 csv 逗号分隔值 我想知道如何计算为每种类型的变量分配的内存大小 怎么做 编辑 换句话说 R 为从 a 读取的通用数据帧分配了多少内存 csv file 您可以使用以下命令获取分配给对象
  • 如何从 Angular 获取 OneDrive API 的访问令牌

    我有一个 Angular 应用程序 可以让用户上传文件 我计划将这些文件存储在OneDrive using OneDrive API 我为应用程序设置的 OneDrive 帐户 我知道我们必须使用OAuth2 0从网络服务器获取访问令牌并使
  • 显示所有记录的分页网格 - Ext JS

    EDIT 事实证明 商店不能有重复的 ID 当我删除这个字段时 All记录显示 这意味着网格不尊重pageSize 我在将所有商店记录显示在网格中时遇到问题 数据从 JSON 请求正确返回 并且分页工具栏行为正确 这是我的商店 var st
  • 应用程序在生产中运行时更改 mysql 存储引擎的后果

    我们有一个当前正在运行的应用程序 它在多线程环境中使用 Mysql 我们有大约 25 个表 其中 20 个表使用 InnoDb 作为存储引擎 5 个表使用 MyISAM 作为存储引擎 我们打算将这5个表的存储引擎更改为InnoDB 如果在运
  • Xcode 6.3.2 或 6.4beta 本地化无法读取字符串文件

    是的 我知道有很多关于这次失败的讨论 但看完之后 我觉得我现在拥有的已经不一样了 In here 导出本地化 时出错 Xcode 6 3 它表示字符串文件中的单引号 应替换为 In here Xcode 6 本地化无法读取字符串文件 它说
  • 使用 arabic-reshaper 和 python-bidi (在多行情况下)时如何修复反向行?

    当我使用 arabic reshaper 和 python bidi 时 我遇到了一个糟糕的结果 这些行从最后一行开始呈现 我做了一个函数来解决这个问题 因为没有办法用另一种方式解决它 bidi正在反转字符以将第一个放在最后 依此类推 这是