现代文本处理流水线:概述

这是一个关于现代文本处理流水线的系列博客文章的一部分,主要内容如下:

  • 系列文章:包括现代文本处理流水线:前言、[现代文本处理流水线:概述]、现代文本处理流水线:分割等。
  • 文本分割(Segmentation):将输入文本分割为多个子字符串,称为“运行”,运行是具有共同方向(从左到右或从右到左)和共同脚本的字符序列,硬换行符标志着运行的结束,分割只产生运行之间的边界,不修改输入文本,分割基于 Unicode 代码点进行,用户可以提前将整个文本缓冲区转换为代码点缓冲区,或实时将所选文本编码解码为代码点并传递给分割器。
  • 文本整形(Shaping):是文本处理流水线中需要字体文件的第一步,分割输出的运行被输入到字体文件中,首先将 Unicode 代码点映射到字形索引,然后应用字体特征,替换特征先应用并生成新的字形序列,定位特征使用与替换特征相同的匹配逻辑,但修改字形位置,运行需要具有统一的脚本和方向,因为字体特征选择取决于脚本,混合方向会使字形之间的距离无法确定。
  • 光栅化(Rasterization):将字形索引转换为屏幕上可显示的视觉描述,是一个研究较多的话题,有许多解决方案存在。
  • 布局(Layout):将单行的字形位置转换为适合特定宽度的多行文本,包括换行、对齐和连字等调整,不同脚本的布局调整差异较大。
  • 各库的作用

    • Harfbuzz:是一个整形库,不帮助处理双向性、不同字体属性、换行、连字或对齐等。
    • fribidi:是一个分割库,只实现方向分割。
    • ICU:是一个非常复杂且功能丰富的库,限于提供 Unicode 功能,在本文中用于分割。
    • Pango:是一个高级的全能库,可以完成本文中描述的所有步骤。
    • kb_text_shape:同时执行分割(通过 kbts_Break)和整形(通过 kbts_Shape)。

总结来说,现代文本处理流水线包括多个步骤,不同的库在其中发挥着不同的作用,kb_text_shape 则同时涉及分割和整形。

阅读 10
0 条评论