python3使用flask框架搭建線上詞雲應用
阿新 • • 發佈:2019-01-03
詞雲生成
詞雲生成呼叫了python中的幾個功能強大的包,實現文字切割、影象處理和詞雲生成。
- jieba
jieba是python中用於中文文字分詞的模組,支援多種切分模式,並且可以自定義停用詞表,去除無意義的詞。 - scipy
scipy是python中一個用於科學計算的包,其中的misc模組中提供了一些影象處理的函式,這裡主要用了imread()和imsave()函式進行影象讀取、二值化和儲存。 - wordcloud
wordcloud是一個詞雲生成的包,可以根據輸入文字串生成詞雲圖。
下面介紹程式碼(分詞和詞雲生成):
分詞采用python的jieba模組,實現文字清洗,分詞和去停用詞處理。
class word_spliter(): def __init__(self,text,stop_path = sw_path): self.text = text self.stop_word = stop_path def get_stopword(self): stopwords = {}.fromkeys([line.rstrip() for line in open(self.stop_word, encoding='utf-8')]) return stopwords def text_wash(self): self.text = self.text.encode(encoding="utf-8",errors='ignore').decode("utf-8") # print(self.text) return self.text def split_word(self): seq = '' sw_words = self.get_stopword() text = self.text_wash() segs = jieba.cut(text,cut_all=False) for seg in segs: if seg not in sw_words: seq = seq + seg +" " return seq
詞雲生成需要指定一個字型路徑,這裡指定為./utils/msyh.ttc'
class wordclouder(): # get parameter def __init__(self,text,image): self.text = text self.imag = image # generate picture def word_cloud(self): mask_image = imread(self.imag,flatten=False) word_pic = WordCloud( font_path='./utils/msyh.ttc', background_color='white', mask=mask_image ).generate(self.text) imsave(self.imag,word_pic)
flask框架
首先需要建立一個應用,然後新增下面的功能
- 路由
通過裝飾器讓url地址指向對應執行函式 - 重定向
從主地址跳轉向upload - upload & download
完成圖片&文字的上傳,返回生成的詞雲圖片
# Create the application. APP = flask.Flask(__name__) @APP.route('/',methods=['GET', 'POST']) def index(): """ 顯示可在 '/' 訪問的 index 頁面 """ return redirect(url_for('upload')) @APP.route('/upload',methods=['GET', 'POST']) def upload(): err = None if request.method == "POST": pic = request.files['uploadPic'] text = request.form['wordStr'] pic_path = "./static/pic/"+pic.filename pic.save(pic_path) generate_wordcloud(text,pic_path) response = make_response(send_file(pic_path)) response.headers["Content-Disposition"] = "attachment; filename=wordcloud.jpg;" return response # return flask.render_template('wordcloud.html',pic_name = 'pic/'+pic.filename) else: err = "post method required" return flask.render_template('upload.html',error=err)
以上操作就在本地基於python3和flask實現了一個線上的詞雲生成web應用,效果如圖所示:
wordcloud.jpg
maks.jpg
mask2.jpg