成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端小白的python實(shí)戰(zhàn): 報(bào)紙分詞排序

cncoder / 3305人閱讀

摘要:先看效果環(huán)境位目標(biāo)抓取一篇報(bào)紙,并提取出關(guān)鍵字,然后按照出現(xiàn)次數(shù)排序,用在頁(yè)面上顯示出來(lái)。首先要抓取網(wǎng)頁(yè),但是網(wǎng)頁(yè)在控制臺(tái)輸出的時(shí)候,中文總是亂碼。但是不得不承認(rèn),上有很多非常優(yōu)秀的庫(kù)。例如但是這些包我在上安裝的時(shí)候總是報(bào)錯(cuò)。

先看效果:

環(huán)境

win7 64位

python 3.5

目標(biāo)

抓取一篇報(bào)紙,并提取出關(guān)鍵字,然后按照出現(xiàn)次數(shù)排序,用echarts在頁(yè)面上顯示出來(lái)。

工具選擇

因?yàn)橹皩?duì)nodejs的相關(guān)工具比較熟悉,在用python的時(shí)候,也想有類似的工具。所以就做了一個(gè)對(duì)比的表格。

功能 nodejs版 python版
http工具 request requests
中文分詞工具 node-segment, nodejieba(一直沒(méi)有安裝成功過(guò)) jieba(分詞準(zhǔn)確度比node-segment好)
DOM解析工具 cheeio pyquery(這兩個(gè)工具都是有類似jQuery那種選擇DOM的接口,很方便)
函數(shù)編程工具 underscore.js underscore.py(underscore來(lái)處理集合比較方便)
服務(wù)器 express flask
開始的噩夢(mèng):中文亂碼

感覺(jué)每個(gè)學(xué)python的人都遇到過(guò)中文亂碼的問(wèn)題。我也不例外。

首先要抓取網(wǎng)頁(yè),但是網(wǎng)頁(yè)在控制臺(tái)輸出的時(shí)候,中文總是亂碼。搞了好久,搞得我差點(diǎn)要放棄python。最終找到解決方法。 解決python3 UnicodeEncodeError: "gbk" codec can"t encode character "xXX" in position XX

過(guò)程很艱辛,但是從中也學(xué)到很多知識(shí)。

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stoodout.buffer,encoding="gb18030")
函數(shù)式編程: 順享絲滑
#filename word_rank.py
import requests
import io
import re
import sys
import jieba as _jieba # 中文分詞比較優(yōu)秀的一個(gè)庫(kù)
from pyquery import PyQuery as pq #類似于jquery、cheerio的庫(kù)
from underscore import _ # underscore.js python版本
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding="gb18030") # 解決控制臺(tái)中文亂碼

USELESSWORDS = ["的","要","了","在","和","是","把","向","上","為","等","個(gè)"] # 標(biāo)記一些無(wú)用的單詞
TOP = 30 # 只要前面的30個(gè)就可以了

def _remove_punctuation(line): # 移除非中文字符
    # rule = re.compile("[^a-zA-Z0-9u4e00-u9fa5]")
    rule = re.compile("[^u4e00-u9fa5]")
    line = rule.sub("",line)
    return line

def _calculate_frequency(words): # 計(jì)算分詞出現(xiàn)的次數(shù)
    result = {}
    res = []

    for word in words:
        if result.get(word, -1) == -1:
            result[word] = 1
        else:
            result[word] += 1

    for word in result:
        if _.contains(USELESSWORDS, word): # 排除無(wú)用的分詞
            continue

        res.append({
                "word": word,
                "fre": result[word]
            })

    return _.sortBy(res, "fre")[::-1][:TOP] # 降序排列

def _get_page(url): # 獲取頁(yè)面
    return requests.get(url)

def _get_text(req): # 獲取文章部分
    return pq(req.content)("#ozoom").text()

def main(url): # 入口函數(shù),函數(shù)組合
    return _.compose(
        _get_page,
        _get_text,
        _remove_punctuation,
        _jieba.cut,
        _calculate_frequency
        )(url)
python服務(wù)端:Flask淺入淺出
import word_rank
from flask import Flask, request, jsonify, render_template
app = Flask(__name__)
app.debug = True

@app.route("/rank") # 從query參數(shù)里獲取pageUrl,并給分詞排序
def getRank():
    pageUrl = request.args.get("pageUrl")
    app.logger.debug(pageUrl)

    rank = word_rank.main(pageUrl)
    app.logger.debug(rank)
    return jsonify(rank)

@app.route("/") # 主頁(yè)面
def getHome():
    return render_template("home.html")

if __name__ == "__main__":
    app.run()
總結(jié)

據(jù)說(shuō)有個(gè)定律:凡是能用JavaScript寫出來(lái)的,最終都會(huì)用JavaScript寫出來(lái)。 我是很希望這樣啦。但是不得不承認(rèn),python上有很多非常優(yōu)秀的庫(kù)。
這些庫(kù)在npm上并沒(méi)有找到合適的替代品。

所以,我就想: 如何能用nodejs直接調(diào)用python的第三方庫(kù)

目前的解決方案有兩種,第一,只用nodejs的child_processes。這個(gè)方案我試過(guò),但是不太好用。

第二,npm里面有一些包,可以直接調(diào)用python的庫(kù)。例如:node-python, python.js, 但是這些包我在win7上安裝的時(shí)候總是報(bào)錯(cuò)。而且解決方法也蠻麻煩的。索性我就直接用python了。

最后附上項(xiàng)目地址:https://github.com/wangduandu...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40666.html

相關(guān)文章

  • python 實(shí)現(xiàn)中文分詞統(tǒng)計(jì)

    摘要:利用我們集成的目前世界上規(guī)模最大的人工分詞和詞性標(biāo)注中文語(yǔ)料庫(kù)約含萬(wàn)字訓(xùn)練而成,模型標(biāo)注能力強(qiáng)大。據(jù)說(shuō)是最好的中文分詞組件,支持等多種語(yǔ)言。 總是看到別人用Python搞各種統(tǒng)計(jì),前端菜鳥的我也來(lái)嘗試了一把。有各種語(yǔ)義分析庫(kù)在,一切好像并不是很復(fù)雜。不過(guò)Python剛開始看,估計(jì)代碼有點(diǎn)丑。 一、兩種中文分詞開發(fā)包 thulac (http://thulac.thunlp.org/)...

    Honwhy 評(píng)論0 收藏0
  • 第7期 Datawhale 組隊(duì)學(xué)習(xí)計(jì)劃

    馬上就要開始啦這次共組織15個(gè)組隊(duì)學(xué)習(xí) 涵蓋了AI領(lǐng)域從理論知識(shí)到動(dòng)手實(shí)踐的內(nèi)容 按照下面給出的最完備學(xué)習(xí)路線分類 難度系數(shù)分為低、中、高三檔 可以按照需要參加 - 學(xué)習(xí)路線 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 評(píng)論0 收藏0
  • python 讓挑選家具更方便

    摘要:也瀏覽過(guò)家具城的官網(wǎng),本著在一定的預(yù)算范圍之類挑選最合適的,作為一個(gè)程序猿,一顆不安分的心,決定自己爬蟲下網(wǎng)站,列出個(gè)表格,也方便給父母輩們查看,順帶再練習(xí)下爬蟲的。根據(jù)行列坐標(biāo)將數(shù)據(jù)寫入單元格。設(shè)置列寬,指定開始列位置,指定結(jié)束列位置。 原文鏈接:https://mp.weixin.qq.com/s/tQ... 家中想置辦些家具,聽朋友介紹說(shuō)蘇州蠡(li第二聲)口的家具比較出名,因...

    ermaoL 評(píng)論0 收藏0
  • 什么是 Python 編程語(yǔ)言?

    摘要:由設(shè)計(jì),作為編程語(yǔ)言的繼承者,于年首次發(fā)布。表達(dá)式表達(dá)式是編程語(yǔ)言中的語(yǔ)法實(shí)體,可以對(duì)其進(jìn)行評(píng)估以確定其值。它是編程語(yǔ)言解釋和計(jì)算以產(chǎn)生值的常量變量函數(shù)和運(yùn)算符的組合。它在年年年和年被評(píng)為年度編程語(yǔ)言,是唯一四次獲得該獎(jiǎng)項(xiàng)的語(yǔ)言。 ...

    1treeS 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

cncoder

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<