gpt4 book ai didi

python - 解码 html 内容和 HTMLParser

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:07 27 4
gpt4 key购买 nike

我正在创建一个基于“HTMLParser”的子类来提取 html 内容。每当我有诸如

之类的字符引用时
' ' '&'  '–' '…'

我想用它们的英文对应物替换它们

' ' (space), '&', '-', '...', and so on.

将一些简单字符引用转换为正确表示的最佳方法是什么?

我的文字类似于:

Some text goes here&after that, 6:30 pm–8:45pm and maybe 
something like …

我想将其转换为:

Some text goes here & after that, 6:30 pm-8:45pm and maybe 
something like ...

最佳答案

您的问题分为两部分。简单的部分是解码 HTML 实体。最简单的方法是从 HTMLParser 模块中获取这个未记录但长期稳定的方法:

>>> HTMLParser.HTMLParser().unescape('a < é – …')
u'a < é – …'

第二部分,将 Unicode 字符转换为类似 ASCII 的字符,比较棘手,也很值得怀疑。我会尝试保留 Unicode 破折号“–”和类似的打印细节,而不是将它们转换为简单的连字符和直引号等字符。除非您的应用程序根本无法处理非 ASCII 字符,否则您应该将它们与所有其他 Unicode 字符一起保持原样。

U+2013 省略号字符的具体情况可能有所不同,因为它是一个“兼容字符”,包含在 Unicode 中只是为了无损地往返于具有它的其他编码。最好您只需键入三个点,然后让字体的字形组合逻辑准确计算出如何绘制它。

如果您只想替换兼容性字符(像这个字符、显式连字、日语全角数字和其他一些奇怪的字符),您可以尝试将字符串规范化为 Normal Form KC:

>>> unicodedata.normalize('NFKC', u'a < – …')
u'a < é – ...'

(不过请注意:您可能想保留的其他一些字符也是兼容字符,包括“²”。)

下一步是将带有变音符号的字母转换为普通字母,您可以通过规范化为 NFKD 来实现,并从字符串中删除所有具有“组合”字符类的字符。这将为您提供以前带有重音的拉丁字母的纯 ASCII,尽管对于许多语言而言,这种方式在语言学上并不正确。如果这就是您所关心的,您可以直接编码为 ASCII:

>>> unicodedata.normalize('NFKD', u'a < – …').encode('us-ascii', 'ignore')
'a < e ...'

任何进一步的操作都必须是临时的,因为没有公认的将字符串折叠成 ASCII 的标准。 Windows 和 Lucene (ASCIIFoldingFilter) 一样只有一种实现。结果变化很大。

关于python - 解码 html 内容和 HTMLParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152111/

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