4个版本

0.1.7 2023年12月19日
0.1.3 2023年12月5日
0.1.1 2023年12月4日
0.1.0 2023年11月22日

文本处理类别中排名第549

每月下载量34

MIT许可证

225KB
5K SLoC

plsfix

PyPI package

plsfix是ftfy的替代品,用Rust编写,速度快10倍以上。

>>> from plsfix import fix_text
>>> print(fix_text("(ง'⌣')ง"))
('')

安装

Python

pip install plsfix

Rust

cargo add plsfix

功能

(摘自ftfy的README文件)

以下是plsfix能做的几个例子(来自现实世界)

plsfix可以通过检测字符的模式来修复mojibake(编码混合),这些字符明显应该是UTF-8,但被解码为其他东西

    >>> import plsfix
    >>> plsfix.fix_text('✔ No problems')
    '✔ No problems'

这听起来不可能?实际上并非如此。UTF-8是一种设计良好的编码,当它被滥用时很容易被发现,而mojibake字符串通常包含我们恢复原始字符串所需的所有信息。

plsfix可以同时修复多层的mojibake

    >>> plsfix.fix_text('The Mona Lisa doesn’t have eyebrows.')
    "The Mona Lisa doesn't have eyebrows."

它可以修复已经应用了“波浪引号”的mojibake,直到引号被展开之前,这些引号不能被一致地解码

    >>> plsfix.fix_text("l’humanité")
    "l'humanité"

plsfix可以修复包含字符U+A0(非换行空格)的mojibake,但U+A0被转换成了ASCII空格,然后与另一个随后的空格组合

    >>> plsfix.fix_text('Ã\xa0 perturber la réflexion')
    'à perturber la réflexion'
    >>> plsfix.fix_text('à perturber la réflexion')
    'à perturber la réflexion'

plsfix还可以解码HTML实体,即使这些实体出现在HTML之外,甚至在实体被错误地大写的情况下

    >>> # by the HTML 5 standard, only 'PÉREZ' is acceptable
    >>> plsfix.fix_text('PÉREZ')
    'PÉREZ'

并不是在所有情况下都会应用这些修复,因为plsfix有一个强烈的避免误报的目标——它永远不会将正确解码的文本更改为其他东西。

以下文本可以以Windows-1252编码,在UTF-8中解码,并将解码为'MARQUɅ'。然而,原始文本已经合理,因此没有更改。

    >>> plsfix.fix_text('IL Y MARQUÉ…')
    'IL Y MARQUÉ…'

依赖项

~20MB
~419K SLoC