资讯专栏INFORMATION COLUMN

前端小白的python实战: 报纸分词排序

cncoder / 3173人阅读

摘要:先看效果环境位目标抓取一篇报纸,并提取出关键字,然后按照出现次数排序,用在页面上显示出来。首先要抓取网页,但是网页在控制台输出的时候,中文总是乱码。但是不得不承认,上有很多非常优秀的库。例如但是这些包我在上安装的时候总是报错。

先看效果:

环境

win7 64位

python 3.5

目标

抓取一篇报纸,并提取出关键字,然后按照出现次数排序,用echarts在页面上显示出来。

工具选择

因为之前对nodejs的相关工具比较熟悉,在用python的时候,也想有类似的工具。所以就做了一个对比的表格。

功能 nodejs版 python版
http工具 request requests
中文分词工具 node-segment, nodejieba(一直没有安装成功过) jieba(分词准确度比node-segment好)
DOM解析工具 cheeio pyquery(这两个工具都是有类似jQuery那种选择DOM的接口,很方便)
函数编程工具 underscore.js underscore.py(underscore来处理集合比较方便)
服务器 express flask
开始的噩梦:中文乱码

感觉每个学python的人都遇到过中文乱码的问题。我也不例外。

首先要抓取网页,但是网页在控制台输出的时候,中文总是乱码。搞了好久,搞得我差点要放弃python。最终找到解决方法。 解决python3 UnicodeEncodeError: "gbk" codec can"t encode character "xXX" in position XX

过程很艰辛,但是从中也学到很多知识。

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stoodout.buffer,encoding="gb18030")
函数式编程: 顺享丝滑
#filename word_rank.py
import requests
import io
import re
import sys
import jieba as _jieba # 中文分词比较优秀的一个库
from pyquery import PyQuery as pq #类似于jquery、cheerio的库
from underscore import _ # underscore.js python版本
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding="gb18030") # 解决控制台中文乱码

USELESSWORDS = ["的","要","了","在","和","是","把","向","上","为","等","个"] # 标记一些无用的单词
TOP = 30 # 只要前面的30个就可以了

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): # 计算分词出现的次数
    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): # 排除无用的分词
            continue

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

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

def _get_page(url): # 获取页面
    return requests.get(url)

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

def main(url): # 入口函数,函数组合
    return _.compose(
        _get_page,
        _get_text,
        _remove_punctuation,
        _jieba.cut,
        _calculate_frequency
        )(url)
python服务端:Flask浅入浅出
import word_rank
from flask import Flask, request, jsonify, render_template
app = Flask(__name__)
app.debug = True

@app.route("/rank") # 从query参数里获取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("/") # 主页面
def getHome():
    return render_template("home.html")

if __name__ == "__main__":
    app.run()
总结

据说有个定律:凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 我是很希望这样啦。但是不得不承认,python上有很多非常优秀的库。
这些库在npm上并没有找到合适的替代品。

所以,我就想: 如何能用nodejs直接调用python的第三方库

目前的解决方案有两种,第一,只用nodejs的child_processes。这个方案我试过,但是不太好用。

第二,npm里面有一些包,可以直接调用python的库。例如:node-python, python.js, 但是这些包我在win7上安装的时候总是报错。而且解决方法也蛮麻烦的。索性我就直接用python了。

最后附上项目地址:https://github.com/wangduandu...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40666.html

相关文章

  • python 实现中文分词统计

    摘要:利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库约含万字训练而成,模型标注能力强大。据说是最好的中文分词组件,支持等多种语言。 总是看到别人用Python搞各种统计,前端菜鸟的我也来尝试了一把。有各种语义分析库在,一切好像并不是很复杂。不过Python刚开始看,估计代码有点丑。 一、两种中文分词开发包 thulac (http://thulac.thunlp.org/)...

    Honwhy 评论0 收藏0
  • 第7期 Datawhale 组队学习计划

    马上就要开始啦这次共组织15个组队学习 涵盖了AI领域从理论知识到动手实践的内容 按照下面给出的最完备学习路线分类 难度系数分为低、中、高三档 可以按照需要参加 - 学习路线 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 评论0 收藏0
  • python 让挑选家具更方便

    摘要:也浏览过家具城的官网,本着在一定的预算范围之类挑选最合适的,作为一个程序猿,一颗不安分的心,决定自己爬虫下网站,列出个表格,也方便给父母辈们查看,顺带再练习下爬虫的。根据行列坐标将数据写入单元格。设置列宽,指定开始列位置,指定结束列位置。 原文链接:https://mp.weixin.qq.com/s/tQ... 家中想置办些家具,听朋友介绍说苏州蠡(li第二声)口的家具比较出名,因...

    ermaoL 评论0 收藏0
  • Python 小白从零开始 PyQt5 项目实战(4)基本控件

    摘要:本系列面向小白,从零开始实战解说应用进行的项目实战。本文介绍通过工具栏创建常用的基本控件,包括各种按钮控件文本输入控件和调节输入控件。是主窗口大小拉伸后,控件对象的最小尺寸最大尺寸。 ...

    Awbeci 评论0 收藏0
  • 什么是 Python 编程语言?

    摘要:由设计,作为编程语言的继承者,于年首次发布。表达式表达式是编程语言中的语法实体,可以对其进行评估以确定其值。它是编程语言解释和计算以产生值的常量变量函数和运算符的组合。它在年年年和年被评为年度编程语言,是唯一四次获得该奖项的语言。 ...

    1treeS 评论0 收藏0

发表评论

0条评论

cncoder

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<