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

2020-06-09 15:27:49 浏览数 (1)

工具介绍

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

如需源码:请联系作者!

0 人点赞