我在有一种情况的情况下实现了该应用程序,即在将文件标准化后读取文件,但是在读取文件时出现以下错误:以下是我的尝试
def unicodeToAscii(self,s):
return ''.join(c for c in unicodedata.normalize('NFD',s) if unicodedata.category(c)!='Mn')
def normalizeString(self,s):
s=self.unicodeToAscii(s.lower().strip())
s=re.sub(r"([.!?])",r" \1",s)
s=re.sub(r"([^a-zA-Z.!?])",r" ",s)
s=re.sub(r"(\s+)",r" ",s).strip()
return s
dataFile=os.path.join('/home/amit/Downloads/cornell_movie_dialogs_corpus/cornell movie-dialogs corpus','formatted_movie_lines')
print('please wait .. reading a file')
lines =open(dataFile).read().strip().split('\n')
vocal=Vocabulary()
pairs=[[vocal.normalizeString(unicode(s))for s in pair.split('\t')] for pair in lines]
print('done reading')
错误:
please wait .. reading a file
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-2-4142a7dbef84> in <module>()
118 lines =open(dataFile).read().strip().split('\n')
119 vocal=Vocabulary()
--> 120 pairs=[[vocal.normalizeString(unicode(s))for s in pair.split('\t')] for pair in lines]
121 print('done reading')
122
UnicodeDecodeError: 'ascii' codec can't decode byte 0xad in position 28: ordinal not in range(128)
答案 0 :(得分:0)
您正在执行的Unicode规范化是不是将所有内容转换为ASCII。它只是应用Unicode规范化,以确保variant encodings都以相同的方式表示。 (此外,在Mn
类别中避免这样做,因此规范化也不完整。)
就其价值而言,U+00AD是一个软连字符,与绝大多数Unicode字符一样,它没有对应的纯ASCII字符,尽管您可以使用常规的破折号/减号来近似它。 /连字符-
。内置的'replace'
功能将简单地将其替换为问号,
>>> '\00ad'.encode('ascii', 'replace')
b'?'