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

我正在尝试从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的字符。

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

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

我尝试将.txt文件编码为iso8859-15

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

理想情况下,我想将此数据编码为UTF-8以利用nltk库

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

另外,您没有尝试将Unicode文本编码为UTF-8,而是尝试从UTF-8解码字节。如果那不是这些字节的数量,那么...如果幸运的话,您会收到像这样的错误;如果没有,您将获得不知道的mojibake,直到您弄糟了500GB的语料库并丢弃了原始数据。1

1. UTF-8是专门设计的,因此您将尽早获得早期错误。在这种情况下,像使用UTF-8一样使用软连字符读取ISO-8859-15文本会完全引起您所看到的错误,但是像使用ISO-8859-15那样使用软连字符读取UTF-8文本将无提示成功,但在每个软连字符之前加一个'Â'字符。该错误通常会更有帮助。

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…