2013-08-12 25 views
5

Ero solo curioso di conoscere l'implementazione del dizionario gensim. Ho il seguente codice:Implementazione del dizionario Gensim

def build_dictionary(documents): 
     dictionary = corpora.Dictionary(documents) 
     dictionary.save('/tmp/deerwester.dict') # store the dictionary 
     return dictionary  

e ho guardato dentro il file deerwester.dict e sembra che questo:

8002 6367 656e 7369 6d2e 636f 7270 6f72 
612e 6469 6374 696f 6e61 7279 0a44 6963 
7469 6f6e 6172 790a 7101 2981 7102 7d71 
0328 5508 6e75 6d5f 646f 6373 7104 4b09 
5508 ... 

il seguente codice, tuttavia,

my_dict = dictionary.load('/tmp/deerwester.dict') 
print my_dict.token2id #view dictionary 

cede questo :

{'minors': 30, 'generation': 22, 'testing': 16, 'iv': 29, 'engineering': 15, 'computer': 2, 'relation': 20, 'human': 3, 'measurement': 18, 'unordered': 25, 'binary': 21, 'abc': 0, 'ordering': 31, 'graph': 26, 'system': 10, 'machine': 6, 'quasi': 32, 'random': 23, 'paths': 28, 'error': 17, 'trees': 24, 'lab': 5, 'applications': 1, 'management': 14, 'user': 12, 'interface': 4, 'intersection': 27, 'response': 8, 'perceived': 19, 'widths': 34, 'well': 33, 'eps': 13, 'survey': 9, 'time': 11, 'opinion': 7} 

Quindi il mio la domanda è, dal momento che non vedo le parole effettive all'interno del file .dict, quali sono tutti i valori esadecimali memorizzati lì? È una specie di formato super-compresso? Sono curioso perché mi sento come se fosse, dovrei prendere in considerazione l'utilizzo da ora in poi.

risposta

8

dato l'esempio:

>>> from gensim import corpora 
>>> docs = ["this is a foo bar", "you are a foo"] 
>>> texts = [[i for i in doc.lower().split()] for doc in docs] 
>>> print texts 
[['this', 'is', 'a', 'foo', 'bar'], ['you', 'are', 'a', 'foo']] 

>>> dictionary = corpora.Dictionary(texts) 
>>> dictionary.save('foobar.txtdic') 

Se si utilizza il gensim.corpora.dictionary.save_as_text() (vedi https://github.com/piskvorky/gensim/blob/develop/gensim/corpora/dictionary.py), si dovrebbe aver ricevuto il file di testo di seguito:

0 a 2 
5 are 1 
1 bar 1 
2 foo 2 
3 is 1 
4 this 1 
6 you 1 

Se si utilizza il valore di default gensim.corpora.dictionary.save(), fa risparmiare in un file binario decapitato. Vedere class SaveLoad(object) in https://github.com/piskvorky/gensim/blob/develop/gensim/utils.py

Per informazioni su pickle, vedere http://docs.python.org/2/library/pickle.html#pickle-example