1. 程式人生 > >python3使用flask框架搭建線上詞雲應用

python3使用flask框架搭建線上詞雲應用

詞雲生成

詞雲生成呼叫了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