La visualizzazione dei punti è una sorta di dimostrazione dei fatti per trovare i “soggetti” unici che accadono in un assortimento di dischi. La porzione inattiva di Dirichlet Portion (LDA) è un caso di modello a punti ed è utilizzata per ordinare i messaggi in un archivio ad un soggetto specifico. Essa assembla un punto per ogni modello di archivio e parole per modello di soggetto, visualizzate come dispersioni Dirichlet.

Le informazioni

La raccolta di informazioni che utilizzeremo è una raccolta di oltre un milione di notizie distribuite nell’arco di 15 anni e può essere scaricata da Kaggle.

importare panda come pd

data = pd.read_csv(‘abcnews-date-text.csv’, error_bad_lines=Falso);

data_text = dati[[[‘headline_text’]]]]

data_text[‘index’] = data_text.index

documenti = dati_testo

Dai un’occhiata ai dati.

stampa(len(documenti))

stampa(documenti[:5])

Informazioni Pre-preparazione

Giocheremo gli anticipi che l’accompagnano:

Tokenizzazione: Dividere il contenuto in frasi e le frasi in parole. Minuscole le parole ed espellere l’accentuazione.

Le parole che hanno meno di 3 caratteri vengono evacuate.

Tutte le parole d’ordine vengono espulse.

Le parole sono lemmatized – le parole nei terzi individui sono cambiate in primo individuo e le parole di azione nel passato e i tempi futuri sono cambiati nel presente.

Le parole vengono stemmate – le parole vengono ridotte alla loro struttura di base.

Caricamento delle biblioteche gensim e nltk

importazione gensim

da gensim.utils importa simple_preprocess

da gensim.parsing.preprocessing importazione STOPWORDS

da nltk.stem importazione WordNetLemmatizer, SnowballStemmer

dall’importazione di nltk.stem.porter *

importare intorpidito come np

np.random.seed(2018)

importazione nltk

nltk.download(‘wordnet’)

[nltk_data] Scaricare il pacchetto wordnet a

[nltk_data] C:\ \SusanLi \SusanLi\AppData\Roaming\nltk_data…

[nltk_data] Pacchetto wordnet è già aggiornato!

Vero

Scrivere una funzione per eseguire le fasi di lemmatizzazione e di preelaborazione dello stelo sul set di dati.

def lemmatize_stemming(testo):

    ritorno stemmer.stem(WordNetLemmatizer().lemmatize(testo, pos=’v’))

def preprocesso(testo):

    risultato = []

    per token in gensim.utils.simple_preprocess(text):

        se token non in gensim.parsing.preprocessing.STOPWORDS e len(token) > 3:

            risultato.append(lemmatizzare_stampaggio(gettone))

    risultato di ritorno

Selezionare un documento da visualizzare in anteprima dopo la preelaborazione.

doc_sample = documenti[documenti[‘indice’] == 4310].valori[0][0].

stampa (“documento originale: ‘)

parole = []

per parola in doc_sample.split(‘ ‘ ‘):

    parole.append(parola)

stampa(parole)

stampa (‘n documento gettonato e lemmatizzato: ‘)

stampa(preprocesso(doc_campione))

documento originale:

[‘pioggia’, ‘aiuta’, ‘smorza’, ‘smorza’, ‘incendi boschivi’]

documento gettonato e lemmatizzato:

[‘pioggia’, ‘aiuto’, ‘umido’, ‘bushfir’]

Preprocessare il testo del titolo, salvando i risultati come ‘processed_docs’.

processed_docs = documenti[‘headline_text’].map(preprocess)

elaborati_doc[:10]

Pacchetto di parole sull’indice informativo

Creare un lessico da ‘processed_docs’ contenente le occasioni in cui una parola appare nel set di preparazione.

dizionario = gensim.corpora.Dictionary(processed_docs)

conteggio = 0

per k, v in dictionary.iteritems():

    stampa(k, v)

    conteggio += 1

    se il conteggio è > 10:

        pausa

0 trasmissione

1 communiti

2 decidono

3 licenza

4 guerra

5 diffamazione

6 spirito

7 chiamata

8 infrastrutture

9 proteggere

10 vertice

Filtro Gensim_extremes

Meno di 15 rapporti (numero supremo) o

più di 0,5 rapporti (parte delle dimensioni del corpus completo, non un numero totale).

dopo le oltre due fasi, mantenere solo i 100000 gettoni iniziali più continui.

dizionario.filtro_extremes(no_sotto=15, no_sopra=0.5, keep_n=100000)

Gensim doc2bow

Per ogni documento creiamo un dizionario che riporta quanti

parole e quante volte queste parole appaiono. Salvarlo in ‘bow_corpus’, quindi controllare prima il documento selezionato.

bow_corpus = [dizionario.doc2bow(doc) per doc in process_docs]

arco_corpo[4310]

[(76, 1), (112, 1), (483, 1), (3998, 1)]

Anteprima Borsa delle parole per il nostro documento preelaborato campione.

bow_doc_4310 = bow_corpus[4310]

per i nella gamma(len(bow_doc_4310)):

    stampa(“Parola {} (\”{}}”) appare {} tempo.”.format(bow_doc_4310[i][0],

                                               dizionario[bow_doc_4310[i][0]],

bow_doc_4310[i][1]))

La parola 76 (“bushfir”) appare 1 volta.

La parola 112 (“aiuto”) appare 1 volta.

La parola 483 (“pioggia”) appare 1 volta.

La parola 3998 (“smorzare”) appare 1 volta.

TF-IDF

Fare l’articolo del modello tf-idf utilizzando i modelli.TfidfModello su ‘bow_corpus’ e risparmiarlo a ‘tfidf’, a quel punto applicare la modifica a tutto il corpus e chiamarlo ‘corpus_tfidf’. Finalmente vediamo i punteggi TF-IDF per il nostro primo rapporto.

Creare l’oggetto modello tf-idf usando i modelli.TfidfModel su ‘bow_corpus’ e salvarlo in ‘tfidf’, quindi applicare la trasformazione all’intero corpus e chiamarlo ‘corpus_tfidf’. Infine, vediamo in anteprima i punteggi TF-IDF per il nostro primo documento.

da corpora di importazione gensim, modelli

tfidf = modelli.TfidfModello(bow_corpus)

corpus_tfidf = tfidf[bow_corpus]

da pprint import pprint

per doc in corpus_tfidf:

    pprint(doc)

    pausa

[(0, 0.5907943557842693),

(1, 0.3900924708457926),

(2, 0.49514546614015836),

(3, 0.5036078441840635)]

Esecuzione LDA utilizzando Pack of Words

Allena il nostro modello lda utilizzando gensim.models.LdaMulticore e risparmialo a ‘lda_model’.

lda_model_tfidf = gensim.models.LdaMulticore(corpus_tfidf, num_topics=10, id2word=dizionario, pass=2, workers=4)

per idx, argomento in lda_model_tfidf.print_topics(-1):

    stampa(‘Argomento: {} Parola: {}’.format(idx, topic))

Valutazione delle prestazioni mediante la classificazione di un documento campione utilizzando il modello LDA Bag of Words

Verificheremo dove verrà classificato il nostro documento di prova.

elaborati_doc[4310]

[‘pioggia’, ‘aiuto’, ‘umido’, ‘bushfir’]

per indice, punteggio in ordinamento(lda_modello_modello[bow_corpus[4310]]], key=lambda tup: -1*tup[1]):

    stampa(“\nScore: \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nNTopica: {}”.format(punteggio, lda_modello.print_topic(indice, 10)))

Valutazione delle prestazioni mediante la classificazione di un documento campione utilizzando il modello TF-IDF della LDA.

per indice, punteggio in ordinamento(lda_model_tfidf[bow_corpus[4310]]], key=lambda tup: -1*tup[1]):

    stampa(“\nScore: \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nTopic \nNTopica: {}”.format(punteggio, lda_model_tfidf.print_topic(indice, 10)))

Modello di test su documento non visto

unseen_document = ‘Come un affare del Pentagono è diventato una crisi di identità per Google’.

bow_vector = dizionario.doc2bow(preprocesso(documento_non visto))

per indice, punteggio in ordinamento(lda_model[bow_vector], key=lambda tup: -1*tup[1]):

    stampa(“Punteggio: {\a6}t Argomento: {}”.formato(punteggio, modello.lda_modello.stampa_topic(indice, 5)))