[PYTHON] J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud

introduction

Cet article est le 26e jour du Calendrier de l'Avent de l'Université de Tokyo 2019!

L'article d'hier était [L'histoire de l'exécution de Windows 98 un jour saint] de Lapee (https://rapit.hatenablog.jp/entry/sakurauchiriko).

Aperçu

Cette fois, j'ai essayé de visualiser le texte de la nouvelle version de "Weather Child" </ font> avec wordcloud de python, donc je vais résumer la méthode simple. wordcloud est un outil qui sélectionne les mots qui apparaissent fréquemment dans une phrase et les affiche (visualise) dans une taille en fonction de la fréquence d'apparition. Il est plus rapide de montrer l'image que de l'expliquer avec des mots. C'est comme ça. ↓ (Au fait, cela semble être la page du wiki de Gekiko Pun Pun Maru) Vous avez peut-être vu quelqu'un faire quelque chose comme ça dans votre tweet. Cette fois, je voudrais le faire avec l'enfant météo.

image.png Citation: https://www.pc-koubou.jp/magazine/2646

image.png [Novel Weather Child (Kakugawa Bunko) -Amazon](https://www.amazon.co.jp/s?k=%E5%A4%A9%E6%B0%97%E3%81%AE%E5% Cité de AD% 90 +% E5% B0% 8F% E8% AA% AC & __ mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & ref = nb_sb_noss)

Écoulement brutal

Créer un corpus (données texte)

Tout d'abord, créez un corpus du texte du roman original. J'ai eu une connaissance pour m'aider. Copiez une phrase à la fois depuis Kindle et insérez-la dans Excel. スクリーンショット 2019-12-08 15.38.22.png En outre, sur ce site, vous pouvez télécharger gratuitement des données textuelles de plus de 13 000 œuvres littéraires modernes telles que «cœur» et «disqualification humaine». Vous pouvez le faire, alors je pense que vous devriez l'essayer à la place. Si vous l'essayez dans un roman moderne, vous trouverez des mots savoureux, ce qui est également intéressant. Les derniers romans tels que "The Child of the Weather" ne peuvent pas être téléchargés, alors n'ayez pas peur. ~~ (Si vous voulez le faire, veuillez créer le vôtre) ~~

Installez les bibliothèques requises (Mecab, Neologd)

Installez les bibliothèques nécessaires à l'analyse morphologique. Cette fois, j'utiliserai Mecab. Référence: Analyse morphologique avec Python et MeCab

Aussi, afin de prendre en charge de nouveaux mots sur le Web, nous inclurons également Neologd, un dictionnaire de dictionnaire système pour MeCab. Référence: https://qiita.com/spiderx_jp/items/7f8cbfd762c9abab660b

J'omettrai la méthode d'installation.

Essayez l'analyse morphologique

Premier,

Qu'est-ce que l'analyse morphologique?

Je pense qu'il y a beaucoup de monde, donc pour expliquer, c'est le travail le plus basique dans le traitement du langage naturel, ** Le processus consiste à diviser la phrase en mots et à déterminer la partie de la phrase **.

Par exemple

"Dans le ciel pluvieux de mars, le sifflet qui informe le départ du ferry résonne longtemps" </ font>

Supposons qu'il y ait une phrase. Si vous divisez cela en mots

'Mars', '', 'Rain Sky', 'to', ',', 'Ferry', '', 'Départ', 'Notifier', 'Notifier', ' Sifflet ',' est ',' long ',' son '</ font>

Il peut être divisé comme ça. Cela s'appelle ** «écriture séparée» **. Et si vous identifiez la partie de ces mots, Mars: Nomenclature : Auxiliaire Ciel pluvieux: nomenclature À: Auxiliaire ,: Symbole Ferry: Nomenclature : Auxiliaire Départ: Nomenclature A: auxiliaire Informer: verbe Sifflet: Nom G: Auxiliaire Adjectifs longs Sons: verbes </ font>

Vous pouvez l'analyser comme ça. Le processus jusqu'à présent est l'analyse morphologique. Pour la visualisation, je pense que les caractéristiques de l'enfant météo apparaissent dans les mots de la phrase, après tout, ** nomenclature **, donc je vais extraire uniquement ** nomenclature ** des mots analysés morphologiquement. Le code ressemble à ceci

import numpy as np
import pandas as pd
import MeCab

#Appliquer Neologd à Mecab
tagger = MeCab.Tagger('-Owakati -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

tagger.parse('')
def tokenize_ja(text, lower):
    node = tagger.parseToNode(str(text))
    while node:
        if lower and node.feature.split(',')[0] in ["nom"]:#Spécifiez les mots de pièce à acquérir en divisant
            yield node.surface.lower()
        node = node.next
def tokenize(content, token_min_len, token_max_len, lower):
    return [
        str(token) for token in tokenize_ja(content, lower)
        if token_min_len <= len(token) <= token_max_len and not token.startswith('_')
    ]

#Lecture des données d'entraînement
path='../data/tenkinoko.csv'
df_tenki=pd.read_csv(path,encoding="SHIFT-JIS")


wakati_tenkinoko_text = []
for i in df_tenki['text']:
    txt = tokenize(i, 1, 10000, True)
    wakati_tenkinoko_text.append(txt)
np.savetxt("../work/tenki_corpus.txt", wakati_tenkinoko_text,fmt='%s', delimiter=',')

df_tenki['wakati_tenkinoko'] = wakati_tenkinoko_text

Le résultat ressemble à ceci ↓ スクリーンショット 2019-12-08 17.23.34.png Désormais, vous ne pouvez extraire que la nomenclature de la phrase!

Visualisez avec wordclud

Une fois que vous avez fait l'analyse morphologique, il est enfin temps pour wordcloud! Donc, cela ne ressemble pas à un nuage de mots comme "ceci" ou "là" ~~ (je veux juste dire) ~~ Certains mots absurdes sortent, donc ils sont supprimés en tant que mots d'arrêt. Le code ressemble à ceci

from wordcloud import WordCloud

tenki_wordlist = df_tenki['wakati_tenkinoko'].values.tolist()
word_cloud_list = []
for i in tenki_wordlist:
    for j in i:
        word_cloud_list.append(j)
        
result = ','.join(word_cloud_list)

#Chemin de la police japonaise
fpath = "../data/ipaexg.ttf"

stop_words = ["de","Hmm","quoi","Sa","!?","de","SaHmm","Yo","Etc.","chose","Il","alors","ちゃHmm","Quoi","vouloir voir","Tel quel","くHmm","もde","!?」","Là","Où","Au fait","cette","tarte","なHmm","ici"]

wordcloud = WordCloud(background_color='white',
    font_path=fpath, width=800, height=600, stopwords=set(stop_words)).generate(result)

#Enregistrer l'image
wordcloud.to_file('./wordcloud.png')

Résultat d'exécution

Voici les résultats! Hey!

image.png ** Ça y ressemble! !! !! !! ** ** Après tout, la revendication du nom du personnage est très intense. C'est vrai parce que c'est un roman. En plus, "Sempai", "Sunny woman", "Roof" et ainsi de suite. Il y a quelques mots dont vous avez une bonne idée. Je n'ai pas l'impression que la scène du film me vient à l'esprit simplement en regardant cette image. Oui. ~~ (je ne sais pas ce que c'est, mais j'ai été un peu impressionné) ~~

Résumé

Je pense que le résultat était plutôt bon. C'est amusant de jouer avec les données. Ensuite, je vais l'analyser avec word2vec. Puis ~

Recommended Posts