2017-10-11 2 views
2

Hat gensim.corpora.Dictionary Termhäufigkeit gespeichert?Hat gensim.corpora.Dictionary Worthäufigkeit gespeichert?

Von gensim.corpora.Dictionary, ist es möglich, das Dokument Häufigkeit der Worte zu erhalten (dh wie viel Dokument ein bestimmtes Wort in nicht auftritt):

from nltk.corpus import brown 
from gensim.corpora import Dictionary 

documents = brown.sents() 
brown_dict = Dictionary(documents) 

# The 100th word in the dictionary: 'these' 
print('The word "' + brown_dict[100] + '" appears in', brown_dict.dfs[100],'documents') 

[out]:

The word "these" appears in 1213 documents 

Und Es gibt die Funktion filter_n_most_frequent(remove_n), die die n-ten häufigsten Token entfernen kann:

filter_n_most_frequent(remove_n) Filtern Sie die häufigsten Token "remove_n", die in den Dokumenten angezeigt werden.

Verringern Sie nach dem Beschneiden die Lücken in den Wort-IDs.

Hinweis: Aufgrund der Lücke schrumpft das gleiche Wort möglicherweise eine andere Wort-ID vor und nach dem Aufruf dieser Funktion!

Ist filter_n_most_frequent Funktion der n-ten am häufigsten auf der Grundlage der Dokumentenhäufigkeit oder Zeitfrequenz zu entfernen?

Wenn es das letztere ist, gibt es eine Möglichkeit, den Begriff Häufigkeit der Wörter im gensim.corpora.Dictionary Objekt zuzugreifen?

Antwort

2

Nein, gensim.corpora.Dictionary speichert die Frequenz nicht. Sie können see the source code here. Die Klasse speichert nur die folgenden Membervariablen:

self.token2id = {} # token -> tokenId 
    self.id2token = {} # reverse mapping for token2id; only formed on request, to save memory 
    self.dfs = {} # document frequencies: tokenId -> in how many documents this token appeared 

    self.num_docs = 0 # number of documents processed 
    self.num_pos = 0 # total number of corpus positions 
    self.num_nnz = 0 # total number of non-zeroes in the BOW matrix 

Das bedeutet, alles in der Klasse Frequenz als Dokumentfrequenz definiert, nie Begriff Frequenz, da diese nie global gespeichert. Dies gilt sowohl für filter_n_most_frequent(remove_n) als auch für jede andere Methode.

0

Konnten Sie so etwas tun?

dictionary = corpora.Dictionary(documents) 
corpus = [dictionary.doc2bow(sent) for sent in documents] 
vocab = list(dictionary.values()) #list of terms in the dictionary 
vocab_tf = [dict(i) for i in corpus] 
vocab_tf = list(pd.DataFrame(vocab_tf).sum(axis=0)) #list of term frequencies 
Verwandte Themen