奇怪的标记化错误

时间:2010-11-06 00:27:29

标签: python twitter tokenize

我正在尝试对推文进行标记,但是遇到了循环问题。 例如,这很好用:

tweet = """This is an example Tweet!"""

# tokenize the sentence

print text
print list(token[1] for token in tokenize.generate_tokens(cStringIO.StringIO(text).readline)if token[1])

但是,这不是:

for tweet in tweets: 
    text = tweet['tweet']

    # tokenize the sentence

    print text
    print list(token[1] for token in tokenize.generate_tokens(cStringIO.StringIO(text).readline)if token[1])

我把这个清单拿回来了:

Sickipedia is hilarious xD
['S', '\x00', 'i', '\x00', 'c', '\x00', 'k', '\x00', 'i', '\x00', 'p', '\x00', 'e', '\x00', 'd', '\x00', 'i', '\x00', 'a', '\x00', ' ', '\x00', 'i', '\x00', 's', '\x00', ' ', '\x00', 'h', '\x00', 'i', '\x00', 'l', '\x00', 'a', '\x00', 'r', '\x00', 'i', '\x00', 'o', '\x00', 'u', '\x00', 's', '\x00', ' ', '\x00', 'x', '\x00', 'D', '\x00']

什么时候应该读取:

Sikipedia is hilarious xD
['Sikipedia', 'is', 'hilarious', 'xD']

有什么想法吗?我用Mongo的方式使用Python。 提前致谢

3 个答案:

答案 0 :(得分:2)

tokenize Package中的NLTK是一个很好的起点。要处理twitter数据中的一些独特现象/字符串,您可以自定义此包以满足您的需求。

答案 1 :(得分:0)

您的输出表明您的文字采用UTF-16编码。尝试打印文本的repr()(这在任何情况下都是一个好主意),您应该在标记化输出中看到的每个字符之间看到相同的'\x00'。您应该看到它是哪种形式的UTF-16(如果它不是以\xff\xfe\xfe\xff开头),然后使用decode字符串方法对其进行解码。您将无法将unicode提供给cStringIO,因此您必须编写另一个函数来替换cStringIO.StringIO(text).readline,或者使用更合适的编码将其编码回字节字符串。

答案 2 :(得分:0)

为什么要标记推文?正如docs中所述,“tokenize模块为Python源代码提供了一个词法扫描程序”。许多推文似乎不太可能包含Python源代码。

如果您只想将文字拆分为单词,则应该使用类似re.split的内容。

但无论如何,奇怪结果的原因是你的推文是用UTF-16编码的。