[PYTHON] Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud

mémo de nuage de mot

Préparer un dictionnaire de mots (vocabulaire) et TF-IDF

#Tous les mots(Ci-dessous un exemple)
$ vocab
array(['a', 'able', 'at', ..., 'zebra', 'zone', 'zoo'], dtype='<U79')

#TF pour chaque document-Vecteur IDF
$ TF_IDF
array([[ 0.        ,  0.        ,  0.        , ...,  0.        ,
         0.        ,  0.        ],
       [61.9792226 ,  0.        ,  3.38385083, ...,  0.        ,
         0.        ,  0.        ],
       [ 0.        ,  0.        ,  6.76770166, ...,  0.        ,
         0.        ,  0.        ],
       ...,
       [ 0.        ,  0.        ,  0.        , ...,  0.        ,
         0.        ,  0.        ],
       [ 2.75463212,  0.        ,  0.        , ...,  0.        ,
         0.        ,  0.        ],
       [ 1.37731606,  2.84060202,  0.        , ...,  0.        ,
         0.        ,  0.        ]])

Créer dic [word] = vec

words = vocab.tolist()
vecs = TF_IDF.tolist()
temp_dic = {}
vecs_dic = []
for vec in vecs:
    for i in range(len(vec)):
        temp_dic[words[i]] = vec[i] 
    vecs_dic.append(temp_dic)
    temp_dic = {} 
$ len(vecs_dic)
(Nombre de documents)

$ len(vecs_dic[0])
(Nombre de dimensions du vecteur)

Visualisation

#Visualisez le 89e document à partir de la liste des documents
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import sys

wordcloud = WordCloud(background_color='white', width=1024, height=674)
wordcloud.generate_from_frequencies(vecs_dic[88])
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.show()

image.png

Si vous obtenez une erreur de division zéro dans Word Cloud

Résolu en ajoutant de petites valeurs en référence à la référence [2]

words = vocab.tolist()
vecs = TF_IDF.tolist()
temp_dic = {}
vecs_dic = []
for vec in vecs:
    for i in range(len(vec)):
        temp_dic[words[i]] = vec[i] + 1e-5 #Empêcher l'élément de devenir 0
    vecs_dic.append(temp_dic)
    temp_dic = {} 

Créer et enregistrer une image pour chaque document

Pour l'enregistrer, ajoutez wordcloud.to_file et modifiez-le comme suit.

i=0
for v in vecs_dic:
  i+=1
  wordcloud = WordCloud(background_color='white', width=1024, height=674)
  wordcloud.generate_from_frequencies(v)
  wordcloud.to_file([PATH] + str(i) + ".png ")

Les références

[1] https://qiita.com/pma1013/items/d183b4b2504173ba037e [2] https://github.com/amueller/word_cloud/issues/456

Recommended Posts

Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
Générez Word Cloud à partir de données de cas d'essai avec python3
Jupyter dans l'IDE Cloud9
Analyse de texte pouvant être effectuée en 5 minutes [Word Cloud]
[Flask & Bootstrap] Visualisez le contenu des paroles avec Word Cloud ~ Lyrics Word Cloud ~
[Flask & Bootstrap] Visualisez le contenu des paroles avec Word Cloud ~ Lyrics Word Cloud ~
Visualisez des graphiques avec des arêtes étiquetées en japonais sur NetworkX et PyGraphviz / Gephi
Gérer les "années et mois" en Python
Text mining avec Python ② Visualisation avec Word Cloud
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
[Python] Visualisez et identifiez les pièces lentes avec pytest
Visualisez les données d'infection corona à Tokyo avec matplotlib
Créez automatiquement des rapports Word et Excel avec Python
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.