05 Non_Negative Matrix Factorization Text


In [1]:
from __future__ import print_function
from time import time
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.decomposition import NMF, LatentDirichletAllocation
from sklearn.datasets import fetch_20newsgroups
import numpy as np
np.set_printoptions(suppress=True)

In [2]:
data_samples = ["Llegar tiempo citas reunion una fase autodisciplina evidencia respeto si mismo. puntualidad cumplido persona cortés paga sus asociados ",
               "puntualidad educación reyes ",
               "preparación puntualidad son dos cualidad más importante líder ",
               "Nunca hubiese podido hacer todo lo hecho sin hábitos puntualidad, orden diligencia, sin determinación concentrarme tarea mismo tiempo ",
               "amigo uno lo sabe todo ti pesar ello quiere ",
               "Si sientes todo perdió su sentido, siempre habrá quiero, siempre habrá amigo ",
               "hermano puede no ser amigo, pero amigo será siempre hermano ",
               "busca amigo sin defectos queda sin amigo ",
               "amigo alma habita dos cuerpos; corazón habita dos alma ",
               "amigo tienes cuya amigo has puesto prueba engánchalos tu alma con ganchos acero ",
               "Verdadera amistad como fosforescencia, resplandece mejor cuando todo oscurecido "]

In [3]:
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(data_samples)
tfidf_feature_names = tfidf_vectorizer.get_feature_names()
print(tfidf_feature_names)


['acero', 'alma', 'amigo', 'amistad', 'asociados', 'autodisciplina', 'busca', 'citas', 'como', 'con', 'concentrarme', 'corazón', 'cortés', 'cualidad', 'cuando', 'cuerpos', 'cumplido', 'cuya', 'defectos', 'determinación', 'diligencia', 'dos', 'educación', 'ello', 'engánchalos', 'evidencia', 'fase', 'fosforescencia', 'ganchos', 'habita', 'habrá', 'hacer', 'has', 'hecho', 'hermano', 'hubiese', 'hábitos', 'importante', 'llegar', 'lo', 'líder', 'mejor', 'mismo', 'más', 'no', 'nunca', 'orden', 'oscurecido', 'paga', 'perdió', 'pero', 'persona', 'pesar', 'podido', 'preparación', 'prueba', 'puede', 'puesto', 'puntualidad', 'queda', 'quiere', 'quiero', 'respeto', 'resplandece', 'reunion', 'reyes', 'sabe', 'sentido', 'ser', 'será', 'si', 'siempre', 'sientes', 'sin', 'son', 'su', 'sus', 'tarea', 'ti', 'tiempo', 'tienes', 'todo', 'tu', 'una', 'uno', 'verdadera']

In [4]:
n_components = 4
model = NMF(n_components=n_components, random_state=1,alpha=.1, l1_ratio=.5)
W = model.fit_transform(tfidf[:tfidf.shape[0]-1])

In [13]:
def print_top_words(model, feature_names, n_top_words):
    for topic_idx, topic in enumerate(model.components_):
        message = "Topic #%d: " % topic_idx
        message += ", ".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]])
        print(message)
    print()

In [14]:
n_top_words = 10
print_top_words(model, tfidf_feature_names, n_top_words)


Topic #0: sin, amigo, queda, busca, defectos, determinación, concentrarme, hubiese, hecho, hacer
Topic #1: educación, reyes, puntualidad, dos, ello, engánchalos, evidencia, fase, fosforescencia, ganchos
Topic #2: habita, dos, alma, corazón, cuerpos, amigo, has, evidencia, fase, fosforescencia
Topic #3: siempre, hermano, amigo, habrá, no, pero, puede, ser, será, sientes


In [16]:
print(model.components_)


[[ 0.          0.          0.26143017  0.          0.          0.
   0.22126201  0.          0.          0.          0.07091616  0.          0.
   0.          0.          0.          0.          0.          0.22126201
   0.07091616  0.07091616  0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.07091616
   0.          0.07091616  0.          0.07091616  0.07091616  0.          0.
   0.06589521  0.          0.          0.05571293  0.          0.
   0.07091616  0.07091616  0.          0.          0.          0.          0.
   0.          0.07091616  0.          0.          0.          0.
   0.03637754  0.22126201  0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.58116119  0.          0.          0.          0.07091616
   0.          0.05571293  0.          0.04443755  0.          0.          0.
   0.        ]
 [ 0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.5436532   0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.36458826  0.          0.          0.          0.
   0.          0.          0.5436532   0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.        ]
 [ 0.          0.41237346  0.12795203  0.          0.          0.          0.
   0.          0.          0.          0.          0.20943882  0.          0.
   0.          0.20943882  0.          0.          0.          0.          0.
   0.41720213  0.          0.          0.          0.          0.          0.
   0.          0.45949393  0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.        ]
 [ 0.          0.          0.26000671  0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.          0.
   0.          0.          0.24753817  0.          0.          0.
   0.33780497  0.          0.          0.          0.          0.          0.
   0.          0.          0.          0.15230375  0.          0.          0.
   0.          0.10717035  0.15230375  0.          0.          0.          0.
   0.          0.15230375  0.          0.          0.          0.
   0.10717035  0.          0.          0.          0.          0.
   0.10717035  0.15230375  0.15230375  0.08678384  0.36532482  0.10717035
   0.          0.          0.10717035  0.          0.          0.          0.
   0.          0.06499501  0.          0.          0.          0.        ]]

In [8]:
W_new = model.transform(tfidf[1])
print(W_new)


[[ 0.          1.03470651  0.          0.        ]]

In [ ]: