gpt4 book ai didi

python - 用 html 实体替换重音字符

转载 作者:行者123 更新时间:2023-11-30 22:15:31 25 4
gpt4 key购买 nike

我正在尝试自动执行一系列查询,但是,我需要将带有重音符号的字符替换为相应的 html 实体。它需要是Python3

示例:

vèlit 
[needs to become]
vèlit

问题是,每当我尝试执行 word.replace 时,它都找不到它。

这个:

if u'è' in sentence:
print(u'Found è')

工作并找到“è”,但执行:

word.replace('è','è')

什么都不做。

最佳答案

您可以使用str.translate python的html中的方法和数据包将字符转换为等效的 html 实体。

为此,str.translate 需要一个将字符(技术上是字符的整数表示形式,或 ordinal)映射到 html 实体的字典。

html.entities.codepoint2name 包含所需数据,但实体名称不受“&”和“;”限制。您可以使用字典理解来创建包含所需值的表。

创建表格后,以表格作为参数调用字符串的翻译方法,结果将是一个新字符串,其中任何具有 html 实体等效项的字符都将被转换。

>>> import html.entities
>>> s = 'vèlit'

>>> # Create the translation table
>>> table = {k: '&{};'.format(v) for k, v in html.entities.codepoint2name.items()}

>>> s.translate(table)
'vèlit'

>>> 'Voilà'.translate(table)
'Voilà'

请注意,带重音的拉丁字符可以由 unicode 代码点的组合表示:“è”可以由单个代码点 - LATIN SMALL LETTER E WITH GRAVE 表示 - 或两个代码点 - 拉丁文小写字母 E 后跟组合重音。在后一种情况下(称为分解形式),翻译将无法按预期工作。

要解决此问题,您可以使用 normalize 将两个代码点分解形式转换为单个代码点组合形式。来自 unicodedata 的函数Python 标准库中的模块。

>>> decomposed
'vèlit'
>>> decomposed == s
False
>>> len(decomposed) # decomposed is longer than composed
6
>>> decomposed.translate(table)
'vèlit'
>>> composed = unicodedata.normalize('NFC', decomposed)
>>> composed == s
True
>>> composed.translate(table)
'vèlit'

关于python - 用 html 实体替换重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com