前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python杂谈(2)——词频分析工具

Python杂谈(2)——词频分析工具

作者头像
背雷管的小青年
发布2020-06-09 15:27:49
9940
发布2020-06-09 15:27:49
举报
文章被收录于专栏:技术开发——你我他

工具介绍

1.在互联网上截取一段新闻,从新闻中提取各种实词和虚词,统计词频,制作文本知识库。

2.该爬虫适用与中国新闻网http://www.chinanews.com/ 中的文章的分析与爬取

3.技术核心:Pyqt5、jieba、requests、Counter、bs4

4.我们这里是先使用Qtdesigner来设计我们的界面ui文件,然后使用Pycharm来把ui文件转化成我们的py文件,方便执行

这一步我们以后再介绍如何使用

首先导入相关的库

这里需要注意一下,当我们把这个文件打成exe可执行文件,会导致缺失字典文件,我们就需要把jieba库里面的文件给取出来, 在导入的时候直接更换文件

代码语言:javascript
复制
import sys

import jieba   #打成可执行的exe文件防止文件缺失
jieba.set_dictionary("dict.txt")
jieba.initialize()

import requests
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from bs4 import BeautifulSoup
import jieba.posseg as peg
from collections import Counter

接下来就是界面ui的设计

这个已经由我们的Qtdesigner设计好了,我们就是编写模块

编写对应的模块

1.爬虫部分--网页获取

代码语言:javascript
复制
def geHTMLText(self,url):
    try:
        r = requests.get(url, timeout=300)
        r.raise_for_status()
        r.encoding = "UTF-8"
        return r.text
    except Exception as e:
        print(e)
        return "ERROR"

2.爬虫部分--网页分析

代码语言:javascript
复制
def content(self,html):
    ls = []
    soup = BeautifulSoup(html, 'html.parser')
    #适用与中国新闻网http://www.chinanews.com/
    tag_div = soup.find_all("div", attrs={"class": "left_zw"})
    for i in tag_div:
        #print(i.get_text())
        ls.append(i)
    return ls

3.文本分析部分--词性分析

由于结巴库自带词性分析,我们只需要将其转为相应的中文即可

jieba库之词性分析

代码语言:javascript
复制
  #调用jieba中的   import jieba.posseg as peg   
  words = peg.cut(text)
  for word, flag in words:
      print(str(flag))  #flag就是词性的英文

4.文本分析部分--判断词性

代码语言:javascript
复制
def JudgeWord(self,flag):
    if flag == "a":
        return "形容词"
    elif flag == "ad":
        return "副形词"
    elif flag == "an":
        return "名形词"
    elif flag == "b":
        return "区别词"
    elif flag == "c":
        return "连词"
    elif flag == "dg":
        return "副语素"
    elif flag == "d":
        return "副词"
    elif flag == "e":
        return "叹词"
    elif flag == "f":
        return "方位词"
    elif flag == "g":
        return "语素"
    elif flag == "h":
        return "前接成分"
    elif flag == "i":
        return "成语"
    elif flag == "j":
        return "简称略语"
    elif flag == "k":
        return "后接成分"
    elif flag == "l":
        return "习用语"
    elif flag == "m":
        return "数词"
    elif flag == "Ng":
        return "名语素"
    elif flag == "n":
        return "名词"
    elif flag == "nr":
        return "人名"
    elif flag == "ns":
        return "地名"
    elif flag == "nt":
        return "机构团体"
    elif flag == "nz":
        return "其他专名"
    elif flag == "o":
        return "拟声词"
    elif flag == "p":
        return "介词"
    elif flag == "q":
        return "量词"
    elif flag == "r":
        return "代词"
    elif flag == "s":
        return "处所词"
    elif flag == "tg":
        return "时语素"
    elif flag == "t":
        return "时间词"
    elif flag == "u":
        return "助词"
    elif flag == "vg":
        return "动语素"
    elif flag == "v":
        return "动词"
    elif flag == "vd":
        return "副动词"
    elif flag == "vn":
        return "名动词"
    elif flag == "w":
        return "标点符号"
    elif flag == "x":
        return "非语素字"
    elif flag == "y":
        return "语气词"
    elif flag == "z":
        return "状态词"
    elif flag == "un":
        return "未知词"
    else:
        return None

5.文本分析————完整版

代码语言:javascript
复制
#词性分析监听
def getSpeech(self):
    textStr = self.textEdit.toPlainText()
    self.textEdit_2.setText("")
    text = str(textStr)
    words = peg.cut(text)
    print(words)
    #result1 = ""
    c1 = Counter()
    c2 = Counter()
    for word, flag in words:
        _word = str(word).replace('\n', '').replace('\r', '')
        _flag = str(flag)
        c1[_word] += 1
        words = self.JudgeWord(_flag)
        c2[str(words)] += 1
        #result1 = result1 + _word +"词性是:"+ str(words)+""
    self.textEdit_2.append("各种单词计数如下:")
    for k,v in dict(c2).items():
        self.textEdit_2.append("词性:{0} ———— 个数:{1}".format(k, v))
    self.textEdit_2.append("=======================================================")
    self.textEdit_2.append("=======================================================")
    self.textEdit_2.append("计数如下:")
    for k,v in dict(c1).items():
        self.textEdit_2.append("词语:{0} ———— 个数{1}".format(k,v))
        #print("词语:{0} ———— 个数{1}".format(k,v))

4.对相应的按钮进行绑定监听即可

绑定操作:

代码语言:javascript
复制
    #给这个爬取按钮添加事件监听
    self.pushButton.clicked.connect(self.getClinkde)

最终显示界面

1.选择爬取的文章

2.复制保存连接,到我们文本框中复制下来,点击爬取按钮

3.点击分析文章,然我们看一下分析效果

声明:我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=23z6dnotw0skk

如需源码:请联系作者!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工具介绍
  • 1.在互联网上截取一段新闻,从新闻中提取各种实词和虚词,统计词频,制作文本知识库。
  • 2.该爬虫适用与中国新闻网http://www.chinanews.com/ 中的文章的分析与爬取
  • 3.技术核心:Pyqt5、jieba、requests、Counter、bs4
  • 4.我们这里是先使用Qtdesigner来设计我们的界面ui文件,然后使用Pycharm来把ui文件转化成我们的py文件,方便执行
  • 首先导入相关的库
  • 接下来就是界面ui的设计
  • 编写对应的模块
  • 1.爬虫部分--网页获取
  • 2.爬虫部分--网页分析
  • 3.文本分析部分--词性分析
  • 4.文本分析部分--判断词性
  • 5.文本分析————完整版
  • 4.对相应的按钮进行绑定监听即可
  • 最终显示界面
  • 1.选择爬取的文章
  • 2.复制保存连接,到我们文本框中复制下来,点击爬取按钮
  • 3.点击分析文章,然我们看一下分析效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档