Python:用read in file替换字符error



目标:我只是想把逗号拿走,因为这是唯一一个会搞砸我的贝叶斯分析(即word,2,4)文件解析的字符,而不是说(即word,,2,4)

所以我目前正在尝试以安然公共语料库在线文本文件的形式阅读电子邮件,并构建贝叶斯垃圾邮件过滤器。

我注意到在一些文件中读取在试图操作存在的字符串时会引发错误。我完全知道这些文件中有一些包含病毒,所以一些字符的编码可能无效。然而,我试图简单地替换字符串中的逗号,我得到以下错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc1 in position 1169:序数不在范围(128)

我已经尝试了这个论坛所提供的一切,我已经到处寻找解决方案,如:

with open(file+file_path_stings[i],'r') as filehandle:
        words = str(filehandle.read())
        words = words.replace(',','')
        words = words.split()

我也尝试了很多正则表达式的尝试…这是其中一个版本:

with open(file+file_path_stings[i],'r') as filehandle:
        words = str(filehandle.read())
        words = re.sub(',','',words)
        words = words.split()

现在,我可以简单地正则化一个只允许a- za -z通过的版本,但我注意到垃圾邮件的准确性受到许多垃圾邮件文件具有这种特殊字符的事实的严重影响。

任何建议都是非常感谢的。谢谢。

罗伯特。

如果您只是想删除额外的逗号,并且正如您所说的没有任何效果,您可以使用简单的分割和连接(假设逗号是这里唯一的分隔符)

','.join([s for s in 'word,,2,4'.split(',') if s])

所以我最终使用了另一个我觉得很有用的实现。事实证明,由于某种原因,python保留了任何先前存在的字符串的所有先前信息。所以我已经学会了它总是一个好主意,只是重新分配给一个不同的(新)变量,如下所示:

with open(file+file_path_stings[i],'r') as filehandle:
    words = str(filehandle.read()).split()
    new_array = []
    for word in words:
        new_array.append(word.replace(',','').lower())
    return new_array

就存储和分配数据给整个其他变量而言,它有点昂贵。然而,我注意到它在你的字符串不被强制转换为unicode字符串方面安全得多。原来的问题是这个输出

 print words
 [u'hello,',u'what?',u'is',u'going',u'on?']

'hello'中的逗号不会被替换。使用上面的代码,可以保证从每个单词中去掉逗号,而不会强制转换为unicode字符串

print new_array
['hello','what?',u'is',u'going',u'on?']

就代码的性能而言,我仍然以相当的速度训练大量文件。所以它应该对你有很大的影响。

希望这对你有帮助!

罗伯特。

最新更新