gpt4 book ai didi

python - 剥离 unicode 文本中非字符的内容

转载 作者:行者123 更新时间:2023-12-01 05:51:56 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Python 脚本,它将文本文件作为输入,删除每个非文字字符,并将输出写入另一个文件中。通常我会采取两种方式:

  • 使用正则表达式结合 re.sub 将每个非字母字符替换为空字符串
  • 检查每一行中的每个字符,只有在 string.lowercase 中时才将其写入输出

但是这次的文本是意大利语的《神曲》(我是意大利人),所以有一些 Unicode 字符,例如

èéï

还有其他一些。我将 # -*-coding: utf-8 -*- 作为脚本的第一行,但我得到的是,当在脚本内写入 Unicode 字符时,Python 不会发出错误信号。

然后我尝试在正则表达式中包含 Unicode 字符,例如将它们写为:

u'\u00AB'

它似乎可以工作,但是Python在从文件读取输入时,不会像读取它一样重写它读取的内容。例如,某些字符被转换为平方根符号。

我应该做什么?

最佳答案

unicodedata.category(unichr)将返回该代码点的类别。

您可以在unicode.org找到类别的描述。但与您相关的是LNPZ,也许还有S 组:

Lu    Uppercase_Letter    an uppercase letter
Ll Lowercase_Letter a lowercase letter
Lt Titlecase_Letter a digraphic character, with first part uppercase
Lm Modifier_Letter a modifier letter
Lo Other_Letter other letters, including syllables and ideographs
...

您可能还想首先规范化字符串,以便可以附加到字母的变音符号这样做:

unicodedata.normalize(form, unistr)

Return the normal form form for the Unicode string unistr. Valid values for form are ‘NFC’, ‘NFKC’, ‘NFD’, and ‘NFKD’.

将所有这些放在一起:

file_bytes = ...   # However you read your input
file_text = file_bytes.decode('UTF-8')
normalized_text = unicodedata.normalize('NFC', file_text)
allowed_categories = set([
'Ll', 'Lu', 'Lt', 'Lm', 'Lo', # Letters
'Nd', 'Nl', # Digits
'Po', 'Ps', 'Pe', 'Pi', 'Pf', # Punctuation
'Zs' # Breaking spaces
])
filtered_text = ''.join(
[ch for ch in normalized_text
if unicodedata.category(ch) in allowed_categories])
filtered_bytes = filtered_text.encode('UTF-8') # ready to be written to a file

关于python - 剥离 unicode 文本中非字符的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13939152/

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