SIMD 字符串匹配 CJK 无需 UTF-8

让字符串
快速对齐

模糊匹配与序列比对,原生支持中日韩文字。Python 的 UCS-2 和 UCS-4 字符串对象直接进入 SIMD——无需 UTF-8 表示,也没有转码绕路。

PYTHON STRUCS-2 / UCS-4SIMD
  • Apache 2.0
  • Python 3.12+
  • 原生 UCS-2 / UCS-4 SIMD
中文比对 / PYTHON UNICODE UCS-2 SIMD
归一化相似度 0.9412
查询17 个字符
目标17 个字符
内核levenshtein_normalized_score无需 UTF-8
1.68×

对 Parasail 的总体几何平均值
Intel / AVX-512 / 80 项

79/80

对 Parasail 的胜出项目
Intel / AVX-512

1.88×

路径与 CIGAR 几何平均值
对 Parasail 32 项全胜

1.55×

中文文本对 Parasail 的几何平均值
中日韩 / 40 项中胜 39 项

01 / 能做什么

不必再用六个库拼出一套字符串处理栈。

从容错搜索到生物序列比对,使用同一套快速、一致的 API。批量路径只准备一次查询,并释放 GIL,让 SIMD 通道持续工作。

02

序列比对

局部或全局,线性或仿射空位。

Smith–Waterman 与 Needleman–Wunsch,支持仅评分、回溯、CIGAR 输出和内置生物矩阵。

比对 API
03

姓名与记录

按读音匹配,而不仅是拼写。

Soundex、Metaphone、NYSIIS、Caverphone、Cologne、Daitch–Mokotoff 与 Beider–Morse 均可直接使用。

语音编码 API
04

时间序列

即使时间漂移,也能对齐信号。

动态时间规整适用于音频、传感器、手势与金融序列,支持批量距离和 Sakoe–Chiba 窗口。

DTW API

02 / 同一个引擎

写直观的 Python。
调度器负责底层性能。

你的代码import stride_align as sa
01x86AVX2 / AVX-512 / AVX10
02ARMNEON / SVE
03LoongArchLSX / LASX
04POWERVSX
05标量可移植后备路径
UNICODE 不绕路

UCS-2 与 UCS-4 是一等 SIMD 目标。

开发者无需先把 Python 字符串编码为 UTF-8。中文、日文、韩文、阿拉伯文和 emoji 通过 UCS-1、UCS-2 或 UCS-4 直接访问,并保持在向量化路径上。

一次查询 × 多个目标

批量处理是主要路径。

在候选列表之间复用已经准备好的查询,或通过阈值、剪枝和逐查询 top-k 运行完整的 cdist

03 / 迁移现有代码

真的只需改一行 import。

保留熟悉的 API,同时把工作迁移到 stride-align 内核。新代码应直接使用 stride_align,现有代码则可走最短迁移路径。

查看兼容层
migration.py
# 修改前
import rapidfuzz

# 修改后
import stride_align.rapidfuzz as rapidfuzz
rapidfuzzTheFuzzparasailjellyfish

04 / 用数据说话

每个性能结论都有对应工作负载。

基准覆盖多种架构、算法、文本类型、评分宽度与对照库,并同时记录退步项目与正确性取舍。

打开基准账本
INTEL X86 / AVX-512 对 PARASAIL几何平均值 · 越高越好
NW 路径8 / 8 胜
2.356×
NW CIGAR8 / 8 胜
2.341×
SW 评分16 / 16 胜
1.989×
全部工作负载79 / 80 胜
1.682×

7 月 18 日重新测试。80 项覆盖英文与中文、线性与仿射评分、16/32 位宽度,以及 1:1 和 1:many 两种形状;对照版本为 Parasail 1.3.4。

05 / 从这里开始

两行代码开始匹配。

$pip install stride-align
import stride_align as sa

score = sa.levenshtein_normalized_score(
    "在开始的时候,机器学会了理解文字。",
    "在开始的时候,机器学会了理解文本。",
)

print(score)  # 0.9411764705882353