gpt4 book ai didi

python - 在Python中删除 '\xad'的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 22:38:31 24 4
gpt4 key购买 nike

我正在尝试从 this link 中找到的 .txt 文件构建语料库。我相信 \xad 的实例被认为是“软连字符”,但在 UTF-8 编码下似乎无法正确读取。我尝试使用以下代码将 .txt 文件编码为 iso8859-15:

with open('Harry Potter 3 - The Prisoner Of Azkaban.txt', 'r', 
encoding='iso8859-15') as myfile:
data=myfile.read().replace('\n', '')

data2 = data.split(' ')

这会返回一个“words”数组,但“\xad”仍附加到 data2 中的许多条目。我已经尝试过

data_clean = data.replace('\\xad', '')

data_clean = data.replace('\\xad|\\xad\\xad','')

但这似乎并没有删除“\xad”的实例。以前有人遇到过类似的问题吗?理想情况下,我想将此数据编码为 UTF-8 以利用 nltk 库,但它不会使用 UTF-8 编码读取文件,因为我收到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xad in position 471: invalid start byte

任何帮助将不胜感激!

其他上下文:这是一个娱乐项目,旨在能够根据 txt 文件生成故事。到目前为止我生成的所有内容都充满了“\xad”,这破坏了乐趣!

最佳答案

您的文件几乎肯定有实际的 U+00AD soft-hyphen characters就在其中。

这些字符标记在将行调整到页面时可以分割单词的位置。这个想法是,如果单词不需要拆分,则软连字符是不可见的,但打印方式与 U+2010 normal hyphen 相同。如果是的话。

由于您不关心在书中以流畅的文本呈现此文本,因此您永远不会用连字符连接任何内容,因此您只想删除这些字符。

做到这一点的方法不是摆弄编码。只需将它们从 Unicode 文本中删除即可,使用您认为最易读的其中一个:

data = data.replace('\xad', '')
data = data.replace('\u00ad', '')
data = data.replace('\N{SOFT HYPHEN}', '')

注意单个反斜杠。我们不是替换文字反斜杠、xad,而是替换文字软连字符,即代码点为十六进制 0xad 的字符。

您可以在拆分为单词之前对整个文件执行此操作,也可以在拆分后对每个单词执行一次。

<小时/>

同时,您似乎对什么是编码以及如何使用它们感到困惑:

I've tried encoding the .txt file as iso8859-15

不,您已尝试将文件解码为 ISO-8859-15。目前尚不清楚您为什么首先尝试 ISO-8859-15。但是,由于字符 '\xad' 的 ISO-8859-15 编码是字节 b'\xad',所以也许这是正确的。

Ideally I'd like to encode this data as UTF-8 to avail of the nltk library

但是 NLTK 不需要 UTF-8 字节,它需要 Unicode 字符串。您不需要为此对其进行编码。

另外,您并不是尝试将 Unicode 文本编码为 UTF-8,而是尝试从 UTF-8解码字节。如果这些字节不是这样的……如果幸运的话,您会收到类似这样的错误;如果没有,您将得到 mojibake,直到您搞砸了 500GB 语料库并扔掉原始数据时才注意到。1

<小时/>

<子>1。 UTF-8 是专门设计的,因此只要有可能,您就会尽早收到错误。在这种情况下,读取带有软连字符的 ISO-8859-15 文本(就像它是 UTF-8 一样)会引发您所看到的错误,但是读取带有软连字符的 UTF-8 文本(就像它是 ISO-8859-15 一样)会默默地产生错误。成功,但在每个软连字符之前有一个额外的 'Â' 字符。该错误通常更有帮助。

关于python - 在Python中删除 '\xad'的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976328/

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