所以我今天早上学会了如何使用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()
我非常感谢任何帮助,因为我知道这需要时间。谢谢你的阅读。
答案 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对于说明。