Je pense avoir vu WordCloud une fois, mais c'était facile quand je l'ai essayé, alors je vais le mettre dans un article. Vous pouvez faire quelque chose comme ça.
·environnement ・ L'exemple le plus simple ・ Essayez un peu ・ Pensez à l'utilisation
Cette fois, j'ai utilisé Jetson-nano. Par conséquent, l'environnement de base est aussi lié, c'est-à-dire l'environnement Ubuntu. Normalement, vous pouvez l'installer avec les éléments suivants.
$ pip3 install wordcloud
Cependant, j'ai eu des erreurs et je n'ai pas pu l'installer, donc
$ sudo pip3 install wordcloud
J'ai pu l'installer avec. Dans le cas du japonais, il faut également Installer MeCab etc. pour analyser la division et une partie du mot. De plus, la police japonaise a été installée comme indiqué dans la référence (2) ci-dessous. Tout d'abord, téléchargez From Link Noto Sans CJK JP.
$ unzip NotoSansCJKjp-hinted.zip
$ mkdir -p ~/.fonts
$ cp *otf ~/.fonts
$ fc-cache -f -v # optional
【référence】 ①amueller/word_cloud ② [Note] Créer un nuage de mots japonais
En regardant le code de référence ci-dessous, WordCloud semble produire en modifiant la taille et la direction de sortie des caractères de manière aléatoire dans une certaine zone en fonction de la fréquence des caractères. 【référence】 ・ Word_cloud / wordcloud / wordcloud.py Ainsi, le code d'utilisation le plus simple est le suivant.
from MeCab import Tagger
import matplotlib.pyplot as plt
from wordcloud import WordCloud
t = Tagger()
text = "Le 25, l'Université Meijo (ville de Nagoya) a décerné le titre de «professeur honoraire spécial» à Akira Yoshino (72 ans), professeur de la même université qui a remporté le prix Nobel de chimie pour le développement de batteries lithium-ion et membre honoraire d'Asahi Kasei. M. Yoshino est professeur à la Graduate School of Science and Engineering depuis 2017 et est chargé de cours une fois par semaine. Selon l'Université Meijo, le professeur honoraire spécial est un titre pour honorer les enseignants qui ont remporté le prix Nobel. Elle a été fondée en 2014 lorsque Isamu Akasaki, professeur de longue date, et Hiroshi Amano, ancien professeur, ont remporté le prix Nobel de physique pour le développement d'une diode électroluminescente (LED) bleue."
splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1]])
print("1",splitted)
wc = WordCloud(font_path="/home/muauan/.fonts/NotoSansCJKjp-Regular.otf")
wc.generate(splitted)
plt.axis("off")
plt.imshow(wc)
plt.pause(1)
plt.savefig('./output_images/yosino0_{}.png'.format(text[0]))
plt.close()
Si vous modifiez la partie t = Tagger () de ce code et la déplacez, vous pouvez générer celle dans la colonne Word Cloud du tableau ci-dessous. Du haut, les mêmes numéros d'article correspondent.
Numéro d'article | dictionnaire | Séparation et suppression des mots de partie |
---|---|---|
0 | t = Tagger() | splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1]]) |
1 | t = Tagger(" -d " + args.dictionary) | splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1]]) |
2 | t = Tagger(" -d " + args.dictionary) | splitted = " ".join([x.split("\t")[0] for x in t.parse(text).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in ["Particule", "Verbe auxiliaire", "adverbe", "Coalm", "verbe"]]) |
Numéro d'article | dictionnaire | Séparation et suppression des mots de partie | Word Cloud |
---|---|---|---|
0 | default dictionary | Le 25, l'Université Meijo (ville de Nagoya) a décerné le titre de "professeur honoraire spécial" à Akira Yoshino (72 ans), membre honoraire d'Asahi Kasei, professeur de la même université qui a reçu le prix Nobel de chimie pour le développement de batteries lithium-ion. M. Yoshino est professeur à la Graduate School of Science and Technology depuis 2017 et est chargé de cours une fois par semaine. Selon l'Université Meijo, le professeur honoraire spécial est un titre pour honorer les membres du corps professoral qui ont reçu le prix Nobel. Il a été fondé en 2014 lorsque Isamu Akasaki, un professeur de longue date, et Hiroshi Amano, un ancien professeur, ont reçu le prix Nobel de physique pour le développement d'une diode électroluminescente (LED) bleue. | |
1 | neologd | Le 25, l'Université Meijo (ville de Nagoya) a décerné le titre de "professeur honoraire spécial" à Akira Yoshino (72 ans), membre honoraire d'Asahi Kasei, professeur de la même université qui a reçu le prix Nobel de chimie pour le développement de batteries lithium-ion. M. Yoshino est professeur à la Graduate School of Science and Engineering depuis 2017 et est chargé de cours une fois par semaine. Selon l'Université Meijo, le professeur honoraire spécial est un titre pour honorer les membres du corps professoral qui ont reçu le prix Nobel. Elle a été fondée en 2014 lorsque Isamu Akasaki, professeur de longue date, et Hiroshi Amano, ancien professeur, ont remporté le prix Nobel de physique pour le développement d'une diode électroluminescente (LED) bleue. | |
2 | neologd +Supprimer les mots auxiliaires, les verbes auxiliaires, etc. | L'université Daijo (ville de Nagoya) a reçu le prix Nobel de chimie pour le développement de batteries au lithium-ion le 25. Professeur de la même université Asahi Kasei Honorary Fellow Akira Yoshino (72) a reçu le titre de "Special Honorary Professor". M. Yoshino, 2017, professeur, École supérieure de sciences et d'ingénierie, donne des conférences une fois par semaine. Université de Meijo, Professeur honoraire spécial Lauréat du prix Nobel Titre du membre du corps professoral. 2014 Professeur à vie Isamu Akasaki Ancien professeur Hiroshi Amano, lauréat du prix Nobel de physique pour le développement des diodes électroluminescentes bleues (LED). |
Pour le moment, j'ai mis le code ci-dessous pour générer WordCloud pour le texte saisi au clavier. WordCloud/wc_input_original.py
Dans ce qui précède, les parties inutiles de la pièce ont été supprimées en utilisant la partie de la pièce écrite en Mecab. Cependant, même avec cela, si seuls les caractères qui représentent la phrase sont extraits, cela reste insuffisant, et je voudrais encore réduire les caractères et les afficher avec plus d'impact. Par conséquent, nous allons introduire un mot d'arrêt pour supprimer des caractères et des chaînes de caractères spécifiques. La fonction à réaliser est la suivante. 【référence】 ③ Tendance de la revue des boutiques de ramen très notées dans TF-IDF (traitement du langage naturel, TF-IDF, Mecab, wordcloud, analyse morphologique, partage) / 14/142128 #% E3% 82% B9% E3% 83% 88% E3% 83% 83% E3% 83% 97% E3% 83% AF% E3% 83% BC% E3% 83% 89) ④ [slothlib --Revision 77: / CSharp / Version1 / SlothLib / NLP / Filter / StopWord / word Japanese.txt](http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/ Filtre / StopWord / mot /) La chaîne de caractères que vous souhaitez supprimer peut être supprimée à l'aide de la fonction exclude_stopword () suivante en plaçant le Japanese.txt ci-dessus dans Dir et en l'ajoutant à ce fichier.
#Fonction de lecture de mots vides
stop_words = []
if args.stop_words:
for line in open(args.stop_words, "r", encoding="utf-8"):
stop_words.append(line.strip())
print(stop_words)
#Une fonction qui convertit une liste en chaîne
def join_list_str(list):
return ' '.join(list)
#Fonction d'exclusion de mots vides
def exclude_stopword(text):
changed_text = [token for token in text.lower().split(" ") if token != "" if token not in stop_words]
#S'il est laissé comme ci-dessus, il sera au format liste, alors convertissez-le en une chaîne de caractères délimitée par un blanc
changed_text = join_list_str(changed_text)
return changed_text
Les fonctions qui génèrent WordCloud sont les suivantes. Le code suivant fait référence aux références ⑤, références ③ et références ① ci-dessous. 【référence】 ⑤ Créer Wordcloud avec une image masquée Tout simplement ・ Définissez d'abord la police japonaise -L'argument sk est utilisé pour identifier le nom du fichier -Lors de l'utilisation de la fonction de masque, l'argument imgpath est le chemin du fichier de l'image de masque dans cet argument. ・ Lors de l'utilisation d'un masque Exécutez la première instruction if ou moins ・ Si vous n'utilisez pas de masque, exécutez autrement ou moins. Ici, les arguments de WordCloud sont presque Defalt et peuvent être redéfinis (l'explication pour chaque élément est décrite comme un bonus)
fpath="/home/muauan/.fonts/NotoSansCJKjp-Regular.otf"
def get_wordcrowd_color_mask(sk, text, imgpath ):
plt.figure(figsize=(6,6), dpi=200)
if imgpath != "":
img_color = np.array(Image.open( imgpath ))
image_colors = ImageColorGenerator(img_color)
wc = WordCloud(width=400,
height=300,
font_path=fpath,
mask=img_color,
collocations=False, #Ne dupliquez pas les mots
).generate( text )
plt.imshow(wc.recolor(color_func=image_colors), #Utilisez la couleur de l'image d'origine
interpolation="bilinear")
else:
#wc = WordCloud(font_path=fpath, regexp="[\w']+").generate( text )
wc = WordCloud(font_path=fpath, width=400, height=200, margin=2,
ranks_only=None, prefer_horizontal=.9, mask=None, scale=1,
color_func=None, max_words=200, min_font_size=4,
stopwords=None, random_state=None, background_color='black',
max_font_size=None, font_step=1, mode="RGB",
relative_scaling='auto', regexp=r"\w[\w']+" , collocations=True,
colormap=None, normalize_plurals=True, contour_width=0,
contour_color='black', repeat=False,
include_numbers=False, min_word_length=0).generate(text)
plt.imshow(wc)
# show
plt.axis("off")
plt.tight_layout()
plt.pause(1)
plt.savefig('./output_images/{}-yosino_{}.png'.format(sk,text[0]))
plt.close()
Générez avec le code suivant en utilisant la fonction ci-dessus. J'ai décidé de copier le texte que je souhaite générer dans WordCloud en ligne. Un traitement en trois étapes a été effectué pour voir l'effet des mots vides et similaires. Ici, le dernier traitement est décrit ci-dessous, et les autres sont décrits dans le bonus 2, de sorte que l'effet est clair lors de la comparaison.
while True:
line = input("> ")
if not line:
break
splitted = " ".join([x.split("\t")[0] for x in t.parse(line).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in ["Particule", "Verbe auxiliaire", "adverbe", "Coalm","conjonction","verbe","symbole"]])
splitted = exclude_stopword(splitted)
print("2",splitted)
get_wordcrowd_color_mask(4,splitted, '')
get_wordcrowd_color_mask(5,splitted, './mask_images/alice_color.png')
・ WordCloud a pu afficher le contour du texte ・ J'ai vu que la précision du contour change en fonction du contrôle par les mots vides et les parties. ・ Si vous utilisez un masque, vous pouvez voir qu'il ne peut être généré que dans une certaine zone. ・ Jetson-nano peut également être généré en peu de temps
・ Je souhaite réfléchir à des scènes d'utilisation efficaces et à des services utilisant une sortie en temps réel, etc.
$ python3 wc_input_original.py -d /usr/lib/aarch64-linux-gnu/mecab/dic/mecab-ipadic-neologd -s japanese.txt
Japanese.txt
['là bas', 'Autour', 'Là', 'Là bas', 'après', 'trou', 'trouた', 'cette', 'Combien', 'Quand', 'Maintenant', 'Désagréable', 'divers', 'domicile', 'Grossièrement', 'Tu', 'je', 'Oh', 'Gai', 'Dessiner', 'Forme', 'Merveille', 'Kayano', 'De', 'Gara', 'Venu', 'Habitude', 'ici', 'ici', 'chose', 'Chaque', 'Ici', 'Foiré', 'cette', 'cetteら', 'Autour', 'Divers', 'Le soulagement', 'M.', 'Comment', 'Essayer', 'Suka', 'Un par un', 'Tibia', 'tout', 'Tout', 'alors', 'Là', 'Là', 'Là bas', 'Sode', 'Il', 'Ilぞれ', 'Ilなり', 'たくM.', 'Etc.', 'À chaque fois', 'Pour', 'Pas bien', 'Cha', 'Chaん', 'Dix', 'とOhり', 'Quand', 'Où', 'Oùか', 'Au fait', 'Lequel', 'Quelque part', 'Lequel', 'laquelle', 'À l'intérieur', 'À l'intérieurば', 'Sans pour autant', 'Quoi', 'Tel', 'Quoi', 'Quoiか', 'À', 'de', 'Commencer', 'Devrait être', 'Haruka', 'Gens', 'Gensつ', 'vêtements', 'Première fois', 'Betsu', 'Étrange', 'Stylo', 'Comment', 'Autre', 'Masa', 'Mieux', 'Décent', 'Tel quel', 'vouloir voir', 'Trois', 'みなM.', 'Toutes les personnes', 'À l'origine', 'もde', 'porte', 'Gars', 'Yo', 'De côté', 'raison', 'je', 'Oui', 'Vers le haut', 'Pendant ~', 'en dessous de', 'Personnage', 'Année', 'Mois', 'journée', 'Temps', 'Minutes', 'Secondes', 'la semaine', 'Feu', 'eau', 'bois', 'Argent', 'sol', 'Pays', 'Capitale', 'route', 'Préfecture', 'Préfecture', 'ville', 'quartier', 'ville', 'village', 'chaque', 'Non.', 'Un', 'quoi', 'Cible', 'À chaque fois', 'Phrase', 'La personne', 'sexe', 'corps', 'Homme', 'autre', 'maintenant', 'département', 'Division', 'Personne en charge', 'À l'extérieur', 'Gentil', 'Tatsu', 'Qi', 'Chambre', 'bouche', 'Qui', 'pour', 'Monde', 'Réunion', 'cou', 'Homme', 'femme', 'Un autre', 'Parler', 'je', 'Boutique', 'boutique', 'Maison', 'Endroit', 'etc', 'Vous voyez', 'Quand', 'Vue', 'Étape', 'Abréviation', 'Exemple', 'système', 'Théorie', 'forme', 'tandis que', 'Sol', 'Membre', 'ligne', 'point', 'livre', 'Des biens', 'Puissance', 'Loi', 'Sentiment', 'Écrit', 'Ancien', 'main', 'nombre', 'il', 'ilfemme', 'Enfant', 'À l'intérieur', 'facile', 'Joie', 'Fâché', 'Chagrin', 'bague', 'Autour', 'À', 'Frontière', 'moi', 'gars', 'Haute', 'école', 'Femme', 'Tibia', 'Ki', 'magazine', 'Les', 'ligne', 'Colonne', 'Chose', 'Shi', 'Supporter', 'Collection', 'm', 'Endroit', 'Histoire', 'navire', 'Nom', 'Émotion', 'Communicant', 'chaque', 'formule', 'Livre', 'Fois', 'Animal', 'Pièces', 'siège', 'paquet', 'âge', 'Œil', 'Connaisseur', 'surface', 'Cercle', 'Balle', 'Feuille', 'Avant', 'arrière', 'la gauche', 'droite', 'Suivant', 'Devant', 'printemps', 'été', 'l'automne', 'hiver', 'un', 'deux', 'Trois', 'quatre', 'Cinq', 'Six', 'Sept', 'Huit', 'Neuf', 'Dix', 'cent', 'mille', 'Dix mille', 'Milliard', 'Mille milliards', 'en dessous de記', 'Vers le haut記', 'Tempstandis que', 'maintenantFois', 'AvantFois', 'Endroit合', 'unつ', 'Année生', '自Minutes', 'ヶEndroit', 'ヵEndroit', 'カEndroit', '箇Endroit', 'ヶMois', 'ヵMois', 'カMois', '箇Mois', 'NomAvant', 'Pour de vrai', 'Certainement', 'Tempspoint', '全département', '関Personne en charge', 'près', 'UnLoi', 'nous', 'la différence', 'Beaucoup', 'Traitement', 'Nouveau', 'そdearrière', 'milieu', 'Après tout', 'm々', '以Avant', '以arrière', 'Ou plus tard', 'Moins que', '以Vers le haut', '以en dessous de', 'combien', 'chaquejournée', '自corps', 'Là bas', 'quoiHomme', 'mainÉtape', 'le même', 'Sentimentじ']
contribution.
>Le 25, l'Université Meijo (ville de Nagoya) a décerné le titre de «professeur honoraire spécial» à Akira Yoshino (72 ans), professeur de la même université qui a remporté le prix Nobel de chimie pour le développement de batteries lithium-ion et membre honoraire d'Asahi Kasei. M. Yoshino est professeur à la Graduate School of Science and Engineering depuis 2017 et est chargé de cours une fois par semaine. Selon l'Université Meijo, le professeur honoraire spécial est un titre pour honorer les enseignants qui ont remporté le prix Nobel. Elle a été fondée en 2014 lorsque Isamu Akasaki, professeur de longue date, et Hiroshi Amano, ancien professeur, ont remporté le prix Nobel de physique pour le développement d'une diode électroluminescente (LED) bleue.
splitted = " ".join([x.split("\t")[0] for x in t.parse(line).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in [""]])
print("0",splitted)
get_wordcrowd_color_mask(0,splitted, '')
get_wordcrowd_color_mask(1,splitted, './mask_images/alice_color.png')
Sortie 0.
0 Le 25, l'Université Meijo (ville de Nagoya) a décerné le titre de "Professeur honoraire spécial" à l'Asahi Kasei Honorary Fellow Akira Yoshino (72 ans), professeur de la même université qui a reçu le prix Nobel de chimie pour le développement de batteries lithium-ion. .. M. Yoshino est professeur à la Graduate School of Science and Engineering depuis 2017 et est chargé de cours une fois par semaine. Selon l'Université Meijo, le professeur honoraire spécial est un titre pour honorer les membres du corps professoral qui ont reçu le prix Nobel. Elle a été fondée en 2014 lorsque Isamu Akasaki, professeur de longue date, et Hiroshi Amano, ancien professeur, ont remporté le prix Nobel de physique pour le développement d'une diode électroluminescente (LED) bleue.
splitted = " ".join([x.split("\t")[0] for x in t.parse(line).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in ["Particule", "Verbe auxiliaire", "adverbe", "Coalm","conjonction","verbe","symbole"]])
print("1",splitted)
get_wordcrowd_color_mask(2,splitted, '')
get_wordcrowd_color_mask(3,splitted, './mask_images/alice_color.png')
Sortie 1.
1 Université Meijo Nagoya City 25th Lithium Ion Battery Development Nobel Chemistry Award Lauréat de la même université Professeur Asahi Kasei Honorary Fellow Akira Yoshino 72 Special Honorary Professor Yoshino 2017 Graduate School of Science and Engineering Professor Weekly Conference Meijo University Special Honorary Professor Nobel Prix pour le titre de faculté 14 ans Professeur à vie Isamu Akasaki Ancien professeur Hiroshi Amano Diode électroluminescente bleue Développement de LED Prix Nobel de physique Fondation
Sortie 2.
2 Université Meijo Nagoya City 25th Lithium Ion Battery Development Nobel Chemistry Award Lauréat de la même université Professeur Asahi Kasei Honorary Fellow Akira Yoshino 72 Special Honorary Professor Yoshino 2017 Graduate School of Science and Engineering Professor 1ère conférence Meijo University Special Honorary Professor Lauréat du prix Nobel Titre 14 ans Professeur à vie Isamu Akasaki Professeur Hiroshi Amano Développement mené par diode électroluminescente bleue Prix Nobel de physique Récompensé pour la fondation
Liste d'arguments WordCloud (référence; à partir de l'explication dans le code ci-dessous) ・ Word_cloud / wordcloud / wordcloud.py
Parameters | |
---|---|
font_path : string | Font path to the font that will be used (OTF or TTF). Defaults to DroidSansMono path on a Linux machine. If you are on another OS or don't have this font, you need to adjust this path. |
width : int (default=400) | Width of the canvas. |
height : int (default=200) | Height of the canvas. |
prefer_horizontal : float (default=0.90) | The ratio of times to try horizontal fitting as opposed to vertical. If prefer_horizontal < 1, the algorithm will try rotating the word if it doesn't fit. (There is currently no built-in way to get only vertical words.) |
mask : nd-array or None (default=None) | If not None, gives a binary mask on where to draw words. If mask is not None, width and height will be ignored and the shape of mask will be used instead. All white (#FF or #FFFFFF) entries will be considerd "masked out" while other entries will be free to draw on. [This changed in the most recent version!] |
contour_width: float (default=0) | If mask is not None and contour_width > 0, draw the mask contour. |
contour_color: color value (default="black") | Mask contour color. |
scale : float (default=1) | Scaling between computation and drawing. For large word-cloud images, using scale instead of larger canvas size is significantly faster, but might lead to a coarser fit for the words. |
min_font_size : int (default=4) | Smallest font size to use. Will stop when there is no more room in this size. |
font_step : int (default=1) | Step size for the font. font_step > 1 might speed up computation but give a worse fit. |
max_words : number (default=200) | The maximum number of words. |
stopwords : set of strings or None | The words that will be eliminated. If None, the build-in STOPWORDS list will be used. Ignored if using generate_from_frequencies. |
background_color : color value (default="black") | Background color for the word cloud image. |
max_font_size : int or None (default=None) | Maximum font size for the largest word. If None, height of the image is used. |
mode : string (default="RGB") | Transparent background will be generated when mode is "RGBA" and background_color is None. |
relative_scaling : float (default='auto') | Importance of relative word frequencies for font-size. With relative_scaling=0, only word-ranks are considered. With relative_scaling=1, a word that is twice as frequent will have twice the size. If you want to consider the word frequencies and not only their rank, relative_scaling around .5 often looks good. If 'auto' it will be set to 0.5 unless repeat is true, in which case it will be set to 0. ..versionchanged: 2.0 Default is now 'auto'. |
color_func : callable, default=None | Callable with parameters word, font_size, position, orientation, font_path, random_state that returns a PIL color for each word. Overwrites "colormap". See colormap for specifying a matplotlib colormap instead. To create a word cloud with a single color, use color_func=lambda *args, **kwargs: "white" . The single color can also be specified using RGB code. For example color_func=lambda *args, **kwargs: (255,0,0) sets color to red. |
regexp : string or None (optional) | Regular expression to split the input text into tokens in process_text. If None is specified, r"\w[\w']+" is used. Ignored if using generate_from_frequencies. |
collocations : bool, default=True | Whether to include collocations (bigrams) of two words. Ignored if using generate_from_frequencies. .. versionadded: 2.0 |
colormap : string or matplotlib colormap, default="viridis" | Matplotlib colormap to randomly draw colors from for each word. Ignored if "color_func" is specified. .. versionadded: 2.0 |
normalize_plurals : bool, default=True | Whether to remove trailing 's' from words. If True and a word appears with and without a trailing 's', the one with trailing 's' is removed and its counts are added to the version without trailing 's' -- unless the word ends with 'ss'. Ignored if using generate_from_frequencies. |
repeat : bool, default=False | Whether to repeat words and phrases until max_words or min_font_size is reached. |
include_numbers : bool, default=False | Whether to include numbers as phrases or not. |
min_word_length : int, default=0 | Minimum number of letters a word must have to be included. |
Recommended Posts