如何合并两个PunktSentenceTokenizer pickle文件?

时间:2017-07-04 23:11:46

标签: python-2.7 nltk pickle tokenize text-segmentation

我已经在 NLTK 中训练了 PunktSentenceTokenizer 并获得了一个pickle文件" learnt.pickle":

ccopy_reg
_reconstructor
p0
(cnltk.tokenize.punkt
PunktSentenceTokenizer
p1
c__builtin__
object
p2
Ntp3
Rp4
(dp5
S'_Token'
p6
cnltk.tokenize.punkt
PunktToken
p7
sS'_lang_vars'
p8
g0
(cnltk.tokenize.punkt
PunktLanguageVars
p9
g2
Ntp10
Rp11
I1
bsS'_params'
p12
g0
(cnltk.tokenize.punkt
PunktParameters
p13
g2
Ntp14
Rp15
(dp16
S'sent_starters'
p17
c__builtin__
set
p18
((lp19
tp20
Rp21
sS'collocations'
p22
g18
((lp23
tp24
Rp25
sS'abbrev_types'
p26
g18
((lp27
Vago
p28
aVgca
p29
aVe.g`  

我有另一个泡菜文件" english.pickle":

ccopy_reg
_reconstructor
p0
(cnltk.tokenize.punkt
PunktSentenceTokenizer
p1
c__builtin__
object
p2
Ntp3
Rp4
(dp5
S'_Token'
p6
cnltk.tokenize.punkt
PunktToken
p7
sS'_lang_vars'
p8
g0
(cnltk.tokenize.punkt
PunktLanguageVars
p9
g2
Ntp10
Rp11
I1
bsS'_params'
p12
g0
(cnltk.tokenize.punkt
PunktParameters
p13
g2
Ntp14
Rp15
(dp16
S'sent_starters'
p17
c__builtin__
set
p18
((lp19
Vamong
p20
aVsince
p21
aVthey
p22
aVindeed
p23
aVsome
p24
aVsales
p25
aVin
p26
aVmoreover
p27
aVyet`

我想合并它们以形成单个.pickle文件(必须使用PunktSentenceTokenizer的 tokenizer 才能使用。)
我使用以下代码:

import pickle
my_dict_final = {}
with open('english.pickle', 'rb') as f:
     my_dict_final.update(pickle.load(f))
 with open('learnt.pickle', 'rb') as f:
     my_dict_final.update(pickle.load(f))
out = open("finaldict.pickle","wb")
pickle.dump(my_dict_final, out)
out.close()

但它显示了这个错误:

  

TypeError:' PunkSentenceTokenizer'对象不可迭代。

我不知道这意味着什么(我对编程不是很好)....但我真的需要一个解决方案....

1 个答案:

答案 0 :(得分:2)

您无法合并两个pickle文件"。酸洗只是一种文件("序列化")格式,因此您可以对内容进行的操作完全取决于您所腌制的对象的结构。在你的情况下,你似乎认为(un)pickle对象是字典;但实际上它们是PunktSentenceTokenizer个对象,包括它们的内部频率表。这说明了TypeError

唯一可行的选择是研究PunktSentenceTokenizer的内部结构,找出需要合并的内容以及是否存在合并两个模型的任何有意义的感觉。但是对于你的(明显的)预期用途,我建议简单地将你的自定义训练语料库连接到一个大型的正常标点英语语料库(例如gutenberg语料库或任何其他纯文本文件集合),并训练一个组合数据的单句检测模型。