如何合并两个 PunktSentenceTokenizer pickle 文件?

How to merge two PunktSentenceTokenizer pickle files?

我已经在 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`  

我有另一个 pickle 文件 "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' object is not iterable.

我不知道这意味着什么(我不太擅长编程)....但我真的需要一个解决方案....

你不能"merge two pickle files"。 Pickling 只是一种文件 ("serialization") 格式,因此您可以对内容做什么完全取决于您 pickle 的对象的结构。在您的情况下,您似乎假设(未)腌制的对象是字典;但实际上它们是 PunktSentenceTokenizer 个对象,包括它们的内部频率表。这占 TypeError.

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