小编tyl*_*eha的帖子

酸洗经过训练的 NLTK 模型

所以我目前正在对一组手术数据训练一个隐马尔可夫模型,如下所示:

nltkTrainer = nltk.tag.hmm.HiddenMarkovModelTrainer(range(15),range(90))
model = nltkTrainer.train_unsupervised(data, max_iterations=3)
Run Code Online (Sandbox Code Playgroud)

如果有帮助,“模型”将作为“HiddenMarkovModelTagger 15 个状态和 90 个输出符号”给出

然而,在我的机器上运行这个完整的训练需要将近一个小时。我希望能够序列化 nltk 模型输出“模型”以在会话之间加载和保存。我已经阅读过,似乎每个人都在使用 Python 的内置 pickle,它对已知数据类型工作得很好。我什至可以使用以下代码腌制我训练的模型变量:

f = open('my_classifier.pickle', 'wb')
pickle.dump(model, f)
f.close()
Run Code Online (Sandbox Code Playgroud)

但是在尝试加载腌制文件时,出现错误:

/usr/local/lib/python2.7/dist-packages/nltk/probability.pyc in __init__(self, probdist_dict)
   1971         """
   1972         defaultdict.__init__(self, DictionaryProbDist)
-> 1973         self.update(probdist_dict)
   1974 
   1975 ##//////////////////////////////////////////////////////

TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)

有没有人找到解决这个问题的方法?这是 NLTK 的问题吗?

python pickle nltk python-2.7 hidden-markov-models

6
推荐指数
0
解决办法
2041
查看次数

为什么 imaplib 在每封电子邮件后返回一个单括号?

概述:当在 Python 中通过 imap 获取电子邮件时imaplib,返回的有效负载是电子邮件元组列表......b')'每个元组之间有一个字节。

我使用您的标准 imaplibfetch调用,并给出以逗号分隔的 UID 字节字符串:

resp, data = mailbox.fetch(b'1,2,3'), 'RFC822')
Run Code Online (Sandbox Code Playgroud)

然而,data看起来像:

[ 
  (b'1 (BODY[HEADER.FIELDS (DATE TO CC FROM SUBJECT)] {181}',
    b'Date: Thu, 18 Jul 2013 16:08:07 -0700 From: Blah Blah\r\n\r\n'
  ),
  b')',
  (b'1 (BODY[HEADER.FIELDS (DATE TO CC FROM SUBJECT)] {181}',
    b'Date: Thu, 18 Jul 2013 16:08:07 -0700 From: Blah Blah\r\n\r\n'
  ),
  b')',
  ...
]
Run Code Online (Sandbox Code Playgroud)

所以现在,当我迭代该列表时,我必须跳过所有其他元素以避免b')'. 显然,这并不难……但感觉好像我做错了什么,或者imaplib应该更好地解析这个右括号。

为什么会有这个括号,有没有办法更正确地使用 IMAP 来消除它?


想法:

看起来右括号是RFC822 的内置部分 …

python imap imaplib

4
推荐指数
1
解决办法
566
查看次数

标签 统计

python ×2

hidden-markov-models ×1

imap ×1

imaplib ×1

nltk ×1

pickle ×1

python-2.7 ×1