WordPress中文词云

WordPress 词云

最近空下来了,借着空闲的时候,做了两个工具,一个是世界时钟小工具(以后有空再讲),另一个就是词云啦。WordPress貌似目前没找到词云的插件,要有的话,估计也是针对英文的,更何况自己动手才有乐趣。一顿美化下来,作为一个调包侠,JavaScript,PHP,Python全折腾了一个遍。

下面说说WordPress词云怎么干吧,简单的说,就是从/wp-json/wp/v2/posts拉取json数据,然后丢给Python,Python处理完了,再存在网站目录下,连接到这个图片就可以了。

具体步骤如下:

1、urllib库抓取json内容

2、json库把json文件转成utf-8可认的汉字格式

3、jsonpath库抽出content字段,即正文内容

4、去除[]{}等无意义字符

5、BeautifulSoup抽取<p></p>的正文段落

6、正则去除<img><a href>等图片,超链接等元素

7、去除<p></p>的段落标志,大体得到所有文章的正文内容了,毕竟只是词云,不需要那么精确,大抵有个正文内容就行了

8、送入jieba(这个名字。。啧啧)库,进行中文分词

9、送入wordcloud包,输出图像

毕竟是调包拼起来的代码,变量名很随意,有拉低我代码水平的嫌疑,将就看看吧。

  
#encoding=utf-8
import jieba
import urllib.request
import matplotlib
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jsonpath
import numpy as np
import json
import random
import re
import html5lib
import shutil
from PIL import Image
from bs4 import BeautifulSoup
def grey_color_func(word, font_size, position, orientation, random_state=None,**kwargs):
    return "hsl(0, 0%%, %d%%)" % random.randint(60, 100)
#拉取网页内容
req = urllib.request.Request('https://www.xuzp.net/wp-json/wp/v2/posts')
with urllib.request.urlopen(req) as response:
   the_page = response.read().decode("utf-8")
#载入json
json_str = json.loads(the_page)
#抽取content正文内容
citylist = jsonpath.jsonpath(json_str,'$..content')
#去除[]{}
citylist=str(citylist).strip('[]')
citylist=citylist.strip('{}')
soup = BeautifulSoup(citylist,"html5lib")
#提取所有<p></p>的段落
p   = soup.find_all('p')
p2  = str(p);
#删去图片超链接
pd1 = re.compile(r'<img.*?/>') #正则匹配img
p2 =  pd1.sub('', p2)
pd2 = re.compile(r'<a href.*?</a>') #正则匹配href
p2 =  pd2.sub('', p2)
pa  = str(p2);
#删除段落标志
pa  =pa.replace("<p>","")
pa  =pa.replace("</p>","")
text_from_file= pa
#丢给jieba分词
Word_spilt_jieba = jieba.cut(text_from_file,cut_all = False)
word_space = ' '.join(Word_spilt_jieba)
#词云的背景图片
img=imread('back.jpg')
img = np.array(Image.open('back.jpg'))
my_wordcloud = WordCloud(
	contour_color='white',
    background_color="rgba(255, 255, 255, 0)", mode="RGBA",
    mask=img,  #背景图片
    max_words = 200, #设置最大显示的词数
    stopwords = STOPWORDS, #设置停用词
    #设置字体格式,字体格式 .ttf文件需自己网上下载,最好将名字改为英文,中文名路径加载会出现问题。
    font_path = 'msyh.ttc', 
    max_font_size = 100, #设置字体最大值
   # random_state=50, #设置随机生成状态,即多少种配色方案
     width=800, height=400,
     random_state=1
    ).generate(word_space)
iamge_colors = ImageColorGenerator(img)
plt.imshow(my_wordcloud.recolor(color_func=grey_color_func, random_state=3),
interpolation="bilinear")
plt.axis('off')
plt.show()
#输出到网站目录
my_wordcloud.to_file('/image/wordcloud.png')
#修改文件权限
shutil.chown("/image/wordcloud.png", user="www-data", group="www-data")

需要安装requirements.txt如下

scipy==1.1.0 (注意,必须1.1.0,否则代码会出错)
jsonpath==0.82
html5lib==1.0.1
wordcloud==1.5.0
matplotlib==3.1.1
jieba==0.39
numpy==1.17.3
Pillow==6.2.1
beautifulsoup4==4.8.1

最后跑个定时任务,或者并到docker里面,定时运行都可以,至于怎么在docker里面跑定时任务,可以参考这个链接

这词云,看来对我来说,还是“问题”最多啊,哈哈哈哈

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注