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)))
