维基百科主题爬虫加词云可视化

该代码段首先从韩语维基百科抓取足球页面的文本,然后使用Konlpy进行名词提取和停用词移除,生成频率最高的20个名词的词云图。词云图使用了NanumSquareNeo-Variable.ttf字体,并结合Python的WordCloud库进行可视化。
摘要由CSDN通过智能技术生成

请生成wikipedia“足球”文本的word cloud。(1分)

这时请生成这样的。

-如果文字是一个字,就删除

-使用Okt()形态素分析仪(名词提取)

-抽取频率排在前20位的名词

pip install konlpy

#爬取维基百科足球的信息并写入文件

import requests
from bs4 import BeautifulSoup
url = "https://ko.wikipedia.org/wiki/%EC%B6%95%EA%B5%AC"

response = requests.get(url)
html_doc = response.text

soup = BeautifulSoup(html_doc, 'html.parser')
soup
soup.get_text()
soup.find_all('p') #查找p标签
p_list = soup.find_all('p')
len(p_list)
for each_p in p_list: #打印每个list的文本 
  print(each_p.text)
soccer_text = ''

for each_p in p_list:
  soccer_text += each_p.text

soccer_text
# 파일로 축구 문서를 다운로드함.

with open("soccer.txt", "w") as f:
  f.write(soccer_text)
#从英文文本创建词云
# open으로 txt파일을 열고 read()를 이용하여 읽는다.
with open("soccer.txt") as f:
  text = f.read()

#print(text)
word_list = text.split()
word_list

#下载停用词
import nltk
nltk.download('punkt') #分句的模块
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import matplotlib.pyplot as plt

 
stop_words = set(stopwords.words('english'))

text = text.lower()
  
word_tokens = word_tokenize(text)
# converts the words in word_tokens to lower case and then checks whether 
#they are present in stop_words or not

word_list = []
  
for w in word_tokens:
    if w not in stop_words and w.isalpha():
        word_list.append(w)

print(word_list)


from wordcloud import WordCloud, STOPWORDS
from konlpy.tag import Twitter
from collections import Counter

# 가장 많이 나온 단어부터 40개를 저장한다.
counts = Counter(word_list)
word_freq = counts.most_common(20)

word_freq

wc = WordCloud(width=800, height=800, scale=2.0, max_font_size=250, background_color="white", 
              #  font_path='/content/NanumGothicBold.ttf',
               font_path='/content/NanumSquareNeo-Variable.ttf',
               random_state=42)
zq = wc.generate_from_frequencies(dict_frequent_tuple)
plt.figure()
plt.imshow(zq)
cloud.to_file('test.jpg')

# WordCloud를 생성한다.
# wc = WordCloud(background_color="white", max_font_size=60)
# cloud = wc.generate_from_frequencies(dict(word_freq))

# plt.figure()
# plt.imshow(cloud)

# # 생성된 WordCloud를 test.jpg로 보낸다.



##下载一个ttf字体文件吧,韩语搞不来

#请下载并安装所需的字体文件(.ttf)并写入文件位置和名称
# font='/content/DroidSansFallback 2400.ttf'
# word_cloud = WordCloud(font_path=font, background_color='black',max_font_size=400, mask=mask,colormap='prism').generate_from_frequencies(dict(tags))

心形图片

要先现在一个心形透明的背景图片

下载中文.tff文件的字体就可以用词云可视化出来了

from konlpy.tag import Okt
from wordcloud import WordCloud
from collections import Counter

# text 파일 읽어오기
#※※주소불러올때 \를 //로 바꾸어주기※※
blog_text = open('soccer.txt','rt', encoding='UTF-8').read()
#print(blog_text)

# csv 파일일때
# import pandas as pd
# blog_text = pd.read_csv('csv파일.csv',encoding='utf-8')
# blog_text = blog_text['형태소분석할 컬럼명']

# Okt 함수를 이용해 형태소 분석
okt = Okt()
line =[]

line = okt.pos(blog_text)

n_adj =[]
# 명사 또는 형용사인 단어만 n_adj에 넣어주기
for word, tag in line:
    if tag in ['Noun','Adjective']:
        n_adj.append(word)
# 명사 또는 형용사인 단어 및 2글자 이상인 단어 선택 시
# n_adj = [word for word, tag in line if tag in ['Noun','Adjective'] and len(word) > 1]

#제외할 단어 추가
stop_words = "상암맛집 입니다 있어서 입니다." #추가할 때 띄어쓰기로 추가해주기
stop_words = set(stop_words.split(' '))

n_adj = [word for word in n_adj if not word in stop_words]
print(n_adj)

#print(line)
#print(n_adj)

#가장 많이 나온 단어 100개 저장
counts = Counter(n_adj)
tags = counts.most_common(100)

# 이미지 추가(워드크라우드 모양 설정)
import numpy as np
from PIL import Image

mask = Image.new("RGBA",(2555,2275), (255,255,255)) #(2555,2575)는 사진 크기, (255,255,255)는 색을의미
image = Image.open('/content/下载.jpg').convert("RGBA")
x,y = image.size
mask.paste(image,(0,0,x,y),image)
mask = np.array(mask)

###WordCloud(워드크라우드) 만들기###
#폰트지정
#请下载并安装所需的字体文件(.ttf)并写入文件位置和名称
font='/content/NanumSquareNeo-Variable.ttf'
word_cloud = WordCloud(font_path=font, background_color='black',max_font_size=400, mask=mask,colormap='prism').generate_from_frequencies(dict(tags))

# 사이즈 설정 및 화면에 출력
import matplotlib.pyplot as plt
plt.figure(figsize=(10,8))
plt.imshow(word_cloud)
plt.axis('off')
#워드클라우드 사진으로 저장
#cloud.to_file('상암맛집_wc.png')
#또는
plt.savefig('상암맛집.png', bbox_inches='tight')
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈都婆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值