2016-06-14 22 views
0

Ich habe auf latente semantische Analyse arbeiten (lsa) und dieses Beispiel angewandt: https://radimrehurek.com/gensim/tut2.htmlWie Dokumente unter Themen clustern latent semantische Analyse unter Verwendung von (lsa)

Es enthält die Begriffe Clustering unter Themen aber nicht finden konnte alles, wie wir Dokumente unter Themen bündeln können.

In diesem Beispiel heißt es, dass "Es scheint, dass nach LSI" Bäume "," Graph "und" Minderjährige "sind alle verwandte Wörter (und tragen am meisten zur Richtung des ersten Themas), während die Das zweite Thema beschäftigt sich praktisch mit allen anderen Wörtern. Wie erwartet, hängen die ersten fünf Dokumente stärker mit dem zweiten Thema zusammen, während die verbleibenden vier Dokumente mit dem ersten Thema in Zusammenhang stehen.

Wie können wir diese fünf Dokumente mit Python-Code zum verwandten Thema in Beziehung setzen?

Sie können meinen Python-Code unten finden. Ich würde jede Hilfe schätzen.

from numpy import asarray 
from gensim import corpora, models, similarities 

#https://radimrehurek.com/gensim/tut2.html 
documents = ["Human machine interface for lab abc computer applications", 
      "A survey of user opinion of computer system response time", 
      "The EPS user interface management system", 
      "System and human system engineering testing of EPS", 
      "Relation of user perceived response time to error measurement", 
      "The generation of random binary unordered trees", 
      "The intersection graph of paths in trees", 
      "Graph minors IV Widths of trees and well quasi ordering", 
      "Graph minors A survey"] 

# remove common words and tokenize 
stoplist = set('for a of the and to in'.split()) 
texts = [[word for word in document.lower().split() if word not in stoplist] 
     for document in documents] 

# remove words that appear only once 
all_tokens = sum(texts, []) 
tokens_once = set(word for word in set(all_tokens) if all_tokens.count(word) == 1) 

texts = [[word for word in text if word not in tokens_once] for text in texts] 

dictionary = corpora.Dictionary(texts) 
corp = [dictionary.doc2bow(text) for text in texts] 

tfidf = models.TfidfModel(corp) # step 1 -- initialize a model 
corpus_tfidf = tfidf[corp] 

# extract 400 LSI topics; use the default one-pass algorithm 
lsi = models.lsimodel.LsiModel(corpus=corp, id2word=dictionary, num_topics=2) 

corpus_lsi = lsi[corpus_tfidf] 


#for i in range(0, lsi.num_topics-1): 
for i in range(0, 3): 
    print lsi.print_topics(i) 

for doc in corpus_lsi: # both bow->tfidf and tfidf->lsi transformations are actually executed here, on the fly 
    print(doc) 

Antwort

1

corpus_lsi hat eine Liste von 9 Vektoren, das ist die Anzahl der Dokumente. Jeder Vektor speichert an seinem i-ten Index die Wahrscheinlichkeit, dass dieses Dokument zu Thema i gehört. Wenn Sie ein Dokument nur einem Thema zuweisen möchten, wählen Sie den Themenindex mit dem höchsten Wert in Ihrem Vektor.