La exhibición de puntos es una especie de demostración de hechos para encontrar los “sujetos” únicos que suceden en un surtido de registros. La porción inactiva de Dirichlet (LDA) es un caso de modelo de puntos y se utiliza para ordenar los mensajes de un archivo a un tema específico. Reúne un punto por cada modelo de archivo y palabras por modelo de asunto, mostradas como dispersiones de Dirichlet.

La información

La colección de información que utilizaremos es un resumen de más de un millón de noticias distribuidas en un período de 15 años y puede ser descargada de Kaggle.

importar pandas como pd

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

data_text = data[[‘headline_text’]]

data_text[‘index’] = data_text.index

documentos = texto_datos

Echa un vistazo a los datos.

print(len(documentos))

imprimir(documentos[:5])

Información Preparación de la información

Vamos a reproducir los avances que acompañan:

Tokenización: Dividir el contenido en frases y las frases en palabras. Poner las palabras en minúsculas y expulsar la acentuación.

Las palabras que tienen menos de 3 caracteres son evacuadas.

Todas las palabras clave son expulsadas.

Las palabras se lemmatizan – las palabras en el tercer individuo se cambian a primer individuo y las palabras de acción en tiempos pasados y futuros se cambian a presente.

Las palabras se reducen a su estructura de raíz.

Cargando las bibliotecas de Gensim y Nltk

gensim de importación

de gensim.utils import simple_preprocess

de gensim.parsing.preprocessing importación PALABRAS DE PARADA

de la importación nltk.stem WordNetLemmatizer, SnowballStemmer

de nltk.stem.porter import *

importar numpy como np

np.random.seed(2018)

importación nltk

nltk.download(‘wordnet’)

[nltk_data] Descargando el paquete wordnet a

[nltk_data] C:\N-UsuariosSusanLi\N-Aplicación de datos…

¡La red de paquetes ya está actualizada!

Verdadero

Escribir una función para realizar lemmatizar y frenar los pasos de preprocesamiento en el conjunto de datos.

def lemmatize_stemming(texto):

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

def preproceso(texto):

    resultado = []

    para la ficha en gensim.utils.simple_preprocess(texto):

        si no está en gensim.parsing.preprocessing.STOPWORDS y len(token) > 3:

            result.append(lemmatize_stemming(token))

    resultado de la devolución

Selecciona un documento para previsualizarlo después del preprocesamiento.

doc_sample = documents[documents[‘index’] == 4310].values[0][0]

print(‘documento original: ‘)

palabras = []

por palabra en doc_sample.split(‘ ‘):

    words.append(word)

letra(s) impresa(s)

imprimir (‘documento simbólico y lematizado: ‘)

print(preprocess(doc_sample))

documento original:

[“lluvia”, “ayuda”, “humedecer”, “incendios forestales”]

documento simbólico y lematizado:

[‘lluvia’, ‘ayuda’, ‘humedecer’, ‘bushfir’]

Preprocesar el texto del titular, guardando los resultados como ‘processed_docs’.

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

processed_docs[:10]

Paquete de palabras en el índice de información

Hacer un léxico de ‘processed_docs’ que contenga las ocasiones en que una palabra aparece en el conjunto de la preparación.

diccionario = gensim.corpora.Diccionario(processed_docs)

cuenta = 0

para k, v en dictionary.iteritems():

    print(k, v)

    cuenta += 1

    si cuenta > 10:

        break

0 emisión

1 comunidad

2 decide

3 licenciados.

4 awar

5 difamación

6 ingenio

7 llamada

8 infrastructur

9 proteger

10 cumbre

Gensim filter_extremes

Menos de 15 informes (número supremo) o

más de 0,5 informes (parte del tamaño completo del corpus, no un número total).

después de las dos etapas, guarda sólo las 100.000 fichas más continuas iniciales.

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

Gensim doc2bow

Para cada documento creamos un diccionario que informa de cuántos

palabras y cuántas veces aparecen esas palabras. Guarda esto en ‘bow_corpus’, y luego revisa nuestro documento seleccionado antes.

corpus_de_arco = [dictionary.doc2bow(doc) for doc in processed_docs]

bow_corpus[4310]

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

Previsualización de la Bolsa de Palabras para nuestra muestra de documento preprocesado.

bow_doc_4310 = bow_corpus[4310]

para i en el rango(len(bow_doc_4310)):

    print(“Word {} (\ “{ {}}”) aparece {} la hora.”.formato(bow_doc_4310[i][0],

                                               diccionario[bow_doc_4310[i][0]],

bow_doc_4310[i][1]))

La palabra 76 (“bushfir”) aparece una vez.

La palabra 112 (“ayuda”) aparece una vez.

La palabra 483 (“lluvia”) aparece una vez.

La palabra 3998 (“humedecer”) aparece una vez.

TF-IDF

Hacer el artículo modelo de tf-idf utilizando modelos.TfidfModelo en ‘bow_corpus’ y ahorrarlo a ‘tfidf’, en ese punto aplicar el cambio a todo el corpus y llamarlo ‘corpus_tfidf’. Por fin vemos los resultados de TF-IDF para nuestro primer informe.

Crear el objeto modelo tf-idf usando models.TfidfModel en ‘bow_corpus’ y guardarlo en ‘tfidf’, luego aplicar la transformación a todo el corpus y llamarlo ‘corpus_tfidf’. Por último, previsualizamos las puntuaciones de TF-IDF para nuestro primer documento.

de gensim import corpora, modelos

tfidf = models.TfidfModel(bow_corpus)

corpus_tfidf = tfidf[bow_corpus]

de pprint importar pprint

para doc en corpus_fidf:

    pprint(doc)

    break

[(0, 0.5907943557842693),

(1, 0.3900924708457926),

(2, 0.49514546614015836),

(3, 0.5036078441840635)]

Ejecutando LDA utilizando Pack of Words

Entrena nuestro modelo lda utilizando gensim.models.LdaMulticore y relájate con ‘lda_model’.

lda_model_tfidf = gensim.models.LdaMulticore(corpus_tfidf, num_topics=10, id2word=diccionario, pases=2, trabajadores=4)

para idx, tema en lda_model_tfidf.print_topics(-1):

    print(‘Tema: {} Palabra: {}’.format(idx, tema))

Evaluación del rendimiento mediante la clasificación de un documento de muestra utilizando el modelo de Bolsa de Palabras de LDA

Comprobaremos dónde se clasificaría nuestro documento de prueba.

processed_docs[4310]

[‘lluvia’, ‘ayuda’, ‘humedecer’, ‘bushfir’]

para el índice, la puntuación en sorted(lda_model[bow_corpus[4310]]], key=lambda tup: -1*tup[1]):

    Imprimir: {}”.format(score, lda_model.print_topic(index, 10)))

Evaluación del rendimiento mediante la clasificación de un documento de muestra utilizando el modelo LDA TF-IDF.

para el índice, la puntuación en sorted(lda_model_tfidf[bow_corpus[4310]]], key=lambda tup: -1*tup[1]):

    Imprimir: {}”.format(score, lda_model_tfidf.print_topic(index, 10)))

Modelo de prueba en un documento no visto

unseen_document = ‘Cómo un acuerdo del Pentágono se convirtió en una crisis de identidad para Google’.

bow_vector = dictionary.doc2bow(preprocess(unseen_document))

para el índice, la puntuación en sorted(lda_model[bow_vector], key=lambda tup: -1*tup[1]):

    print(“Score: {\a6}Tema: {}”.format(score, lda_model.print_topic(index, 5)))