【问题标题】:error using "nltk.word_tokenize()" function使用“nltk.word_tokenize()”函数时出错
【发布时间】:2015-07-10 16:14:13
【问题描述】:

我正在尝试标记 twitter 文本。 当我对每个推特文本应用函数 nltk.word_tokenize() 时,即使对于一些非常丑陋的文本,它也能完美运行,例如

'\xd8\xb3\xd8\xa3\xd9\x87\xd9\x8e\xd9\x85\xd9\x90\xd8\xb3\xd9\x8f',
'\xd9\x82\xd9\x90\xd8\xb5\xd9\x8e\xd9\x91\xd8\xa9\xd9\x8b', '\xd8\xad\xd8\xaa\xd9\x89'

但是当我遍历文件中的所有推特时

tokens = []
for i in range(0,5047591):
    s = ','.join(l_of_l[i])
    tokens += nltk.word_tokenize(s)

它返回错误,例如:

UnicodeDecodeError:“ascii”编解码器无法解码位置 2 中的字节 0xc3:序数不在范围内(128)文件 “/Library/Python/2.7/site-packages/nltk/tokenize/punkt.py”,第 1304 行, 在 _realign_boundaries 对于 _pair_iter(slices) 中的 sl1、sl2:

还有更多

关于如何修复它的任何建议?

【问题讨论】:

    标签: python twitter nlp nltk tokenize


    【解决方案1】:

    您遇到的问题不是来自您包含的代码,而是来自包含open() 命令的代码。该脚本可以正常打开文件,但是当您访问数据时,它会为您提供 TraceBack

    import codecs
    ...
    with codecs.open('file.csv','r',encoding='utf8') as f:
        text = f.read()
    

    【讨论】:

    • 谢谢!我做了 f.readline() 但我收到了这个错误“UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte”,我不太确定如何处理它
    • 第二个错误有两种可能的解决方案。 1) 将该行更改为 with codecs.open('file.csv', 'r',encoding='utf-8', errors='ignore') as f: 但有丢失 一些 个字符的风险。 2) 确定您正在处理的编码类型,然后执行decode('######').encode('utf-8')。使用.decode('cp1252') 很常见,但请注意,这并不能保证是正确的。
    • 是的,你是对的,当我使用errors = 'ignore'时,我从文件中构建的列表变成了“索引超出范围”
    • 但解码()。声明没有解决,我想知道我的pycharm可能有一些设置问题,因为有时我什至无法安装一些模块
    • 这实际上可能对 pycharm 有所帮助,既然您提到了它。转到文件>设置>编辑器>文件编码,然后将“IDE编码”、“项目编码”和(在底部)“属性文件的默认编码”更改为“UTF-8”。删除errors='ignore' 并再次运行脚本。我尚未对其进行测试,但您也可以删除编解码器。同样,问题在于它是 pycharm 特有的(好处)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多