A exibição de pontos é uma espécie de demonstração factual para encontrar os “sujeitos” únicos que acontecem em um sortimento de registros. Inactive Dirichlet Portion (LDA) é um caso de modelo de ponto e é utilizado para encomendar mensagens em um arquivo para um assunto específico. Ele monta um ponto para cada modelo de arquivo e palavras por modelo de assunto, exibido como dispersões Dirichlet.

As Informações

A coleção informativa que utilizaremos é um resumo de mais de um milhão de notícias distribuídas em um período de 15 anos e pode ser baixada da Kaggle.

pandas de importação como pd

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

data_text = data[[‘headline_text’]]

data_text[‘index’] = data_text.index

documentos = data_text

Dê uma olhada nos dados.

imprimir(len(documentos))

imprimir(documentos[:5])

Informações Pré-preparação

Nós vamos executar os avanços que acompanham:

Tokenization: Dividir o conteúdo em frases e as sentenças em palavras. Dividir as palavras em minúsculas e expelir a acentuação.

Palavras que tenham menos de 3 caracteres são evacuadas.

Todas as stopwords são expulsas.

As palavras são lematizadas – as palavras no terceiro indivíduo são mudadas para primeiro indivíduo e as palavras de ação no passado e os tempos futuros são mudados para o presente.

As palavras são de caule – as palavras são diminuídas em sua estrutura de raiz.

Carregamento de bibliotecas gensim e nltk

gensim de importação

de gensim.utils importação simples_pré-processo

de gensim.parsing.pré-processamento de importação STOPWORDS

da nltk.stem import WordNetLemmatizer, SnowballStemmer

de importação nltk.stem.porter *

importação numérica como np

np.random.seed(2018)

importação nltk

nltk.download(‘wordnet’)

[nltk_data] Baixando a wordnet do pacote para

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

[nltk_data] A palavra pacote já está atualizada!

Verdadeiro

Escreva uma função para realizar as etapas de lematização e pré-processamento da haste no conjunto de dados.

def lemmatize_stemming(texto):

    return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos=’v’))

def preprocess(texto):

    resultado = []

    para token em gensim.utils.simple_preprocess(texto):

        if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3:

            result.append(lemmatize_stemming(token))

    resultado do retorno

Selecione um documento para visualizar após o pré-processamento.

doc_sample = documentos[documentos[‘índice’] == 4310].valores[0][0]

imprimir(‘documento original: ‘)

palavras = []

por palavra em doc_sample.split(‘ ‘):

    words.append(palavra)

imprimir(palavras)

impresso (‘documento simbólico e lemmatizado: ‘)

print(preprocess(doc_sample))

documento original:

[‘chuva’, ‘ajuda’, ‘amortece’, ‘fogos de mato’]

documento simbenizado e lemmatizado:

[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]

Pré-processar o texto do cabeçalho, salvando os resultados como ‘processed_docs’.

processed_docs = documentos[‘headline_text’].map(pré-processamento)

processado_docs[:10]

Pacote de Palavras sobre o Índice Informacional

Faça um léxico de ‘processed_docs’ contendo as ocasiões em que uma palavra aparece no conjunto de preparação.

dicionário = gensim.corpora.Dicionário(processed_docs)

contagem = 0

para k, v no dicionário.iteritems():

    imprimir(k, v)

    contagem += 1

    se contar > 10:

        intervalo

0 transmissão

1 comunidade

2 decid

3 licenc

4 prêmios

5 difamação

6 com

7 chamada

8 infra-estrutura

9 proteger

10 cume

Filtro de Gensim_extremos

Menos de 15 relatórios (número supremo) ou

mais de 0,5 relatórios (parte do tamanho do corpus completo, não um número total).

Após as mais de duas etapas, mantenha apenas as 100.000 fichas iniciais mais contínuas.

dictionary.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)

Gensim doc2bow

Para cada documento criamos um dicionário relatando quantos

palavras e quantas vezes essas palavras aparecem. Salve isto em ‘bow_corpus’, depois verifique nosso documento selecionado antes.

bow_corpus = [dicionário.doc2bow(doc) para doc em process_docs].

bow_corpus[4310]

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

Saco de Palavras Prévias para nossa amostra de documento pré-processado.

bow_doc_4310 = bow_corpus[4310]

para i no range(len(bow_doc_4310)):

    imprimir(“Palavra {} ({}”{}”) aparece {} hora”.format(bow_doc_4310[i][0],

                                               dicionário[bow_doc_4310[i][0]],

bow_doc_4310[i][1]))

A palavra 76 (“bushfir”) aparece 1 vez.

A palavra 112 (“ajuda”) aparece 1 vez.

A palavra 483 (“chuva”) aparece 1 vez.

A palavra 3998 (“umedecer”) aparece 1 vez.

TF-IDF

Faça o artigo do modelo tf-idf utilizando modelos.TfidfModel em ‘bow_corpus’ e poupe-o para ‘tfidf’, nesse ponto aplique mudanças em todo o corpus e chame-o de ‘corpus_tfidf’. Finalmente vemos as pontuações do TF-IDF para nosso primeiro relatório.

Crie o objeto modelo tf-idf usando o model.TfidfModel em ‘bow_corpus’ e salve-o em ‘tfidf’, depois aplique transformação em todo o corpus e chame-o de ‘corpus_tfidf’. Finalmente nós pré-visualizamos as partituras TF-IDF para o nosso primeiro documento.

de gensim import corpora, modelos

tfidf = models.TfidfModel(bow_corpus)

corpus_tfidf = tfidf[bow_corpus]

de pprint importação pprint

para doc in corpus_tfidf:

    pprint(doc)

    intervalo

[(0, 0.5907943557842693),

(1, 0.3900924708457926),

(2, 0.49514546614015836),

(3, 0.5036078441840635)]

Executando LDA utilizando Pacote de Palavras

Treine o nosso modelo lda utilizando gensim.models.LdaMulticore e poupe-o ao ‘lda_model’.

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

para idx, tópico em lda_model_tfidf.print_topics(-1):

    print(‘Topic: {} Palavra: {}’.format(idx, tópico))

Avaliação de desempenho através da classificação do documento modelo de amostra utilizando o modelo LDA Bag of Words

Vamos verificar onde o nosso documento de teste seria classificado.

processed_docs[4310]

[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]

para índice, pontuação em sorted(lda_model[bow_corpus[4310]], key=lambda tup: -1*tup[1]):

    print(“{\nScore: {\nTopic: {}”.format(score, lda_model.print_topic(index, 10))

Avaliação de desempenho através da classificação do documento modelo de amostra utilizando o modelo LDA TF-IDF.

para índice, pontuação em sorted(lda_model_tfidf[bow_corpus[4310]], key=lambda tup: -1*tup[1]):

    print(“{\nScore: {\nTopic: {}”.format(score, lda_model_tfidf.print_topic(index, 10)))

Modelo de teste em documento invisível

unseen_document = ‘How a Pentagon deal became an identity crisis for Google’ (Como um negócio do Pentágono se tornou uma crise de identidade para o Google)

bow_vector = dicionário.doc2bow(preprocess(unseen_document))

para índice, pontuação em sorted(lda_model[bow_vector], key=lambda tup: -1*tup[1]):

    print(“Pontuação: {}t Topic: {}”.format(score, lda_model.print_topic(index, 5)))