2017-07-04 3 views
1

J'ai formé le PunktSentenceTokenizer dans NLTK et obtenu un fichier cornichon "learnt.pickle":Comment fusionner deux fichiers pickle PunktSentenceTokenizer?

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` 

J'ai un autre fichier cornichon "de 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` 

I vouloir les fusionner pour former un seul fichier .pickle (qui doit être utilisable avec le tokenizer du PunktSentenceTokenizer).
J'utilise le code suivant:

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() 

Mais il montre cette erreur:

TypeError: 'PunkSentenceTokenizer' object is not iterable.

Je ne sais pas ce que cela signifie (je ne suis pas très bon avec la programmation) ... .Mais j'ai vraiment besoin d'une solution ...

+0

@COLDSPEED merci pour l'aide avec le formatage – ashesh

Répondre

1

Vous ne pouvez pas "fusionner deux fichiers pickle". Le décapage est juste un format de fichier ("sérialisation"), donc ce que vous pouvez faire avec le contenu dépend entièrement de la structure des objets que vous avez picklés. Dans votre cas, vous semblez supposer que les objets (dé) décapés sont des dictionnaires; mais en fait, ils sont PunktSentenceTokenizer objets, y compris leurs tables de fréquences internes. Cela représente le TypeError. La seule option viable serait d'étudier les composants internes du PunktSentenceTokenizer, et de déterminer ce qui doit être fusionné et s'il existe un sens significatif de la fusion de deux modèles. Mais pour votre utilisation (apparente), je recommande simplement de concaténer votre corpus d'apprentissage personnalisé à un grand corpus d'anglais normalement ponctué (par exemple, le corpus gutenberg ou toute autre collection de fichiers en texte brut), et de former un modèle de détection simple. sur les données combinées.

+0

chère @alexis, vous êtes mon héros! – ashesh