A szófelhő egy formába rendezett, szavakból álló illusztrációs megjelenítés, ahol a megjelenített forma és a szavak jelentése, előfordulási gyakorisága közötti információ függés megjelenítése történik.
Nagyon jól használható az emberi képfeldolgozás kihasználásával ad információt kapcsolatot hangsúlyt az illusztrációként megjelenített kép.
Lényegében sugallja az információt mivel a kiaknázásban a képet néző személy be van vonva és egy aha (ráismerés élménnyel) is mélyíti a fontos a szavakban rejlő információ felismerését, rögzülését.
Többféle online portál is nyújt ilyen szolgáltatást, de most a Python nyelvbe rejlő lehetőséget villantjuk meg.
## source : https://github.com/amueller/word_cloud/
## tutorial: https://www.datacamp.com/community/tutorials/wordcloud-python
## modul installálás : conda install -c conda-forge wordcloud // pip install wordcloud
## Maszk képre ráültette szó felhő készítése Python-ban
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from wordcloud import WordCloud
# get data directory (using getcwd()
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
## Kulcsszavak közvetlen megadása
text=("""szeretet szeretet szeretet béke béke megbocsátás megbocsátás megnyugvás elmélyedés család család
kapcsolatok emlékezés feltöltődés család szeretet egység béke közeledés megbékélés elfogadás
mult mult jövő jövő jelen ma holnap megbocsátás elengedés befogadás megértés elfogadás támogatás
ölelés megértés szeretet
""") ## Ezt kari_szofelho.txt -be is lementjük a 2. teszthez (állomány karakterkódolására figyelni kell)
# masz képfile beolvasása
mask = np.array(Image.open( "kari_fa.png"))
## Szófelhő készítés paramétere beállítása
## wc = WordCloud(mask=mask) ## Beállítás nélkül normál fekete háttér
wc = WordCloud(background_color="white", max_words=2000, mask=mask,
max_font_size=50, contour_width=3, contour_color='red')
## (fehér háttér, piros kontur. 3-mas vonla vastagság)
# Szó felhő generálás
wc.generate(text)
# Eredmény képfile-be mantése
wc.to_file(path.join(d, "KL_karacsonyi_szofelho.png"))
## plt.figure() ## Normál
plt.figure(figsize=[8,8]) # nagyított
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.margins(x=0, y=0)
plt.tight_layout(pad = 0) ## réteg beállítás
plt.show() ## megjelenítés
## source : https://github.com/amueller/word_cloud/
## installálás : conda install -c conda-forge wordcloud // pip install wordcloud
## Maszk képre ráültette szó felhő készítése Python-ban
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
from wordcloud import WordCloud, STOPWORDS
# Munka könyvtár kiolvasásaget ( getcwd()
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
# szöveges állományból beolvasás.
text = open(path.join(d, 'kari_szofelho.txt')).read()
# Kép kontor masz beolvasása
mask = np.array(Image.open(path.join(d, "kari_fa.png")))
stopwords = set(STOPWORDS)
##stopwords.add("gyölőlet") ## nem kivánt szavak kihagyása a feldolgozásból
##stopwords.add( "gonoszság") ...
stopwords.update(["gyölőlet","gonoszság", "elbukás","hanyatlás"])
## Szófelhő készítés paramétere beállítása (fehér háttér, kék kontur. 2-mas vonla vastagság)
wc = WordCloud(background_color="white", max_words=200, mask=mask,
stopwords=stopwords, contour_width=3, contour_color='steelblue')
# Szó felhő generálás
wc.generate(text)
# Eredmény képfile-be mantése
wc.to_file(path.join(d, "KL_karacsonyi_szofelho.png"))
# Szó felhő kirajzolása
## plt.figure() ## Normál
plt.figure(figsize=[8,8]) # nagyított
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show() ## megjelenítés
## Szovegelemzési minta filmsorozat szöveg listájában
## Tronok harca subtitle : th8e6.txt
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
from wordcloud import WordCloud, STOPWORDS
# get data directory (using getcwd() is needed to support running example in generated IPython notebook)
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
# szöveges állományból beolvasás.
text = open(path.join(d, 'th8e6.txt')).read()
# Kép kontor masz beolvasása
mask = np.array(Image.open(path.join(d, "tronok_harca.png")))
stopwords = set(STOPWORDS)
## Szófelhő készítés paramétere beállítása (fehér háttér, kék kontur. 2-mas vonla vastagság)
wc = WordCloud(background_color="white", max_words=500, mask=mask,
stopwords=stopwords, contour_width=3, contour_color='black')
# Szó felhő generálás
wc.generate(text)
# Eredmény képfile-be mantése
wc.to_file(path.join(d, "KL_tonok_harca_veg_szo_felho.png"))
# Szó felhő kirajzolása
plt.figure(figsize=[8,8]) # nagyított
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show() ## megjelenítés
## Képből átvett szin és kontoron a szofelhő megjelenítése
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# get data directory (using getcwd() is needed to support running example in generated IPython notebook)
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
text = open(path.join(d, 'kari_szofelho.txt')).read()
stopwords = set(STOPWORDS)
# Generate a word cloud image
mask = np.array(Image.open("kari_fa_sz.png"))
## Szófelhő készítés paramétere beállítása (fehér háttér, kék kontur. 2-mas vonla vastagság)
wc = WordCloud(stopwords=stopwords, background_color="white", max_words=1000,
mask=mask, contour_width=3, contour_color='gold')
# Szó felhő generálás
wc.generate(text)
# Képből szingenerálás
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[7,7])
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# mentés file-be
plt.savefig("kari_fa_word_cloud_szines.png", format="png")
plt.show() ## megjelenítés
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# get data directory (using getcwd() is needed to support running example in generated IPython notebook)
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
text = open(path.join(d, 'python_szofelho.txt')).read()
stopwords = set(STOPWORDS)
# Generate a word cloud image
mask = np.array(Image.open("kepek\python-programming-basics.jpg"))
## Szófelhő készítés paramétere beállítása (fehér háttér, kék kontur. 2-mas vonla vastagság)
wc = WordCloud(stopwords=stopwords, background_color="white", max_words=1000,
mask=mask, contour_width=3, contour_color='blue')
# Szó felhő generálás
wc.generate(text)
# Képből szingenerálás
image_colors = ImageColorGenerator(mask)
plt.figure(figsize=[3,3])
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
# mentés file-be
plt.savefig("Python.svg.cloud.png", format="png")
plt.show() ## megjelenítés
# beolvasás kisbetűs szavak listájába
words = open('hamlet.txt').read().lower().split()
## központozás eltávolítása
import string
words2 = [w.strip(string.punctuation) for w in words]
## szógyakoriságok kiszámítása
freq = {}
for w in words2:
if w in freq:
freq[w] += 1
else:
freq[w] = 1
## rendezés gyakoriság szerint
freq2 = sorted([(x[1], x[0]) for x in freq.items()], reverse=True)
## leggyakoribb 10 szó kiírása
for i in range(10):
print(freq2[i])
print('vége')
(1090, 'the') (964, 'and') (742, 'to') (675, 'of') (577, 'i') (558, 'a') (554, 'you') (520, 'my') (434, 'in') (419, 'it') vége
# A szavak gyakorisága a Hamletben, Counterrel kiszámolva:
import string
import collections
words = open('hamlet.txt').read().strip().split()
words = [word.lower().strip(string.punctuation) for word in words]
freq = collections.Counter(words)
freq.most_common(10)
print('vége')
[('the', 1090), ('and', 964), ('to', 742), ('of', 675), ('i', 577), ('a', 558), ('you', 554), ('my', 520), ('in', 434), ('it', 419)]
# Feladat: Készítsünk programot, amely n db kockadobást szimulál 2 kockával,
# majd kiírja hogy a dobások összege hányszor volt 2, 3, ..., ill. 12!
from collections import Counter
from random import randint
n = 10000
data = [randint(1, 6) + randint(1, 6) for i in range(n)]
a=Counter(data)
print(a)
Counter({7: 1648, 6: 1496, 8: 1367, 9: 1168, 5: 1091, 10: 815, 4: 774, 11: 559, 3: 542, 2: 275, 12: 265})