与终端输出相比,保存到文件时使用pickle的奇怪输出

时间:2018-02-04 16:38:46

标签: python python-3.x nltk pickle

所以我今天早上学会了如何使用pickle将列表转储到文本文件bc,你不能使用.write将列表发送到文件。我正在观看youtube上的视频,使用Python进行自然语言处理和NLTK第4页。你可以看到完整的输出应该是什么。他没有将数据推送到txt文件,但我想更深入地了解更多信息。

示例终端输出:     [(' PRESIDENT',' NNP'),(' GEORGE',' NNP'),(' W。&# 39;,' NNP'),(' BUSH',' NNP'),     ("' S",' POS')注意:这假设继续整个演讲并在终端中进行。

完整文件输出: q(q(qh†qX ApplauseqX NNPq†qX .qh†qX)qh†q e。

我的代码:

import nltk
from nltk.corpus import state_union
from nltk.tokenize import PunktSentenceTokenizer
import pickle

output = open('stoutput.txt', 'wb')
train_text = state_union.raw('2005-GWBush.txt')
sample_text = state_union.raw('2006-GWBush.txt')

custom_sent_tokenizer = PunktSentenceTokenizer(train_text)

tokenized = custom_sent_tokenizer.tokenize(sample_text)

def process_content():

    try:
        for i in tokenized:
            words = nltk.word_tokenize(i)
            tagged = nltk.pos_tag(words)
            print(tagged)
            pickle.dump(tagged, open('stoutput.txt', 'wb'))
    except Exception as e:
           pickle.dump(e, open('stoutput.txt', 'wb'))
           print(str(e))


process_content()

我非常感谢任何帮助,因为我知道这需要时间。谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

pickle用于序列化Python对象,tagged是一个列表对象,所以你要看的是强制转换为字符编码的列表的字节流表示,这解释了为什么你有字符串'掌声'和'NNP'(列表中的元素)被一堆胡言乱语包围着。如果你想要使用print(l)获得的表示,那么忘记pickle并将列表强制写入字符串

with open('stoutput.txt', 'wb') as f:
    f.write(str(tagged))

虽然您可能希望在for循环之外使用with语句。

编辑:如果您的目标是能够在以后的Python会话或脚本中使用此数据,但是您希望它以比pickle更易读的形式提供给您,我建议您将列表转换为CSV - 请参阅{{3对于说明。