首页 > 编程语言 >每日总结(python文本分析)

每日总结(python文本分析)

时间:2024-01-23 19:47:17浏览次数:27  
标签:总结 plt sentiment python comments print path 文本 page

导入文本文档并输出在终端

# Python 3.x版本

import os

# 获取根目录下文件的绝对路径
root_path = "./"
file_path = os.path.join(root_path, 'pinglun.txt')

try:
    # 打开文本文件并读取所有内容
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    # 显示文件内容
    print(content)

except FileNotFoundError:
    print("文件不存在:", file_path)
except Exception as e:
    print("读取文件时发生错误:", str(e))

 爬取豆瓣电影评论

import requests, re
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

ua = UserAgent()
headers = {"User-Agent": ua.random}

def getHTMLText(url):
    try:
        r = requests.get( url, headers=headers, timeout=30 )
        r.raise_for_status()
        r.encoding = "utf-8"
        return r.text
    except:
        return ""

def fillMoviedata(soup, moviedata):
    commentinfo = soup.find_all('span', 'comment-info')
    pattern = re.compile('allstar(\d+) rating')
    comments = soup.find_all('span', 'short')

    # 仅处理评论信息和评论内容存在的情况
    for i in range(min(len(commentinfo), len(comments))):
        p = re.findall(pattern, str(commentinfo[i]))
        moviedata.append([commentinfo[i].a.string if commentinfo[i].a else "", comments[i].string, p])

def printList(moviedata, num):
    for i in range(min(num, len(moviedata))):
        u = moviedata[i]
        try:
            print("序号: {}\n用户名: {}\n评论内容: {}\n评分: {}星\n".format(i + 1, u[0], u[1],
                                                                              int(eval(u[2][0]) / 10) if u[2] else ""))
        except Exception as e:
            print("序号: {}\n用户名: {}\n评论内容: {}\n".format(i + 1, u[0], u[1]))

def fetch_movie_comments(movieid, num_comments, start_page=1, limit_per_page=20, method='new_score'):
    Moviedata = []
    total_pages = (num_comments // limit_per_page) + (num_comments % limit_per_page > 0)

    for page in range(start_page, min(start_page + total_pages + 1, 100)):  # 假设最多抓取100页,防止无限循环
        url = f'https://movie.douban.com/subject/{movieid}/comments?start={page * limit_per_page - limit_per_page}&limit={limit_per_page}&sort={method}&status=P'
        html = getHTMLText(url)
        soup = BeautifulSoup(html, 'html.parser')
        fillMoviedata(soup, Moviedata)

    printList(Moviedata, num_comments)

# 调用修改后的函数,抓取1000条评论
fetch_movie_comments(34805219, 20, 1)

 导入文件对其进行snownlp分析与饼图分析

import os
from snownlp import SnowNLP

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font_path = 'path/to/your/font.ttf'  # 替换为你系统中存在的支持中文的字体文件路径
if os.path.exists(font_path):
    fontprop = FontProperties(fname=font_path)
else:
    print("指定的字体文件不存在,请确认路径是否正确!")

# 在绘图之前设置全局字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 如果你系统有SimHei字体(黑体)
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 读取根目录下的pinglun.txt文件内容
root_path = "./"
file_path = os.path.join(root_path, 'pinglun.txt')

try:
    with open(file_path, 'r', encoding='utf-8') as f:
        text_content = f.read()

    # 将文本拆分成句子列表
    sentences = [line.strip() for line in text_content.split('\n') if line.strip()]

    # 对每个句子进行情感分析,并收集情感得分
    sentiment_scores = []
    binary_sentiments = []  # 添加用于饼图的二元情感类别(0:负面,1:正面)
    for sentence in sentences:
        s = SnowNLP(sentence)
        sentiment_score = s.sentiments
        sentiment_scores.append(sentiment_score)
        binary_sentiments.append(0 if sentiment_score < 0.5 else 1)  # 简单地将情感得分低于0.5视为负面,否则视为正面

    # 绘制情感得分直方图并保存
    fig_hist = plt.figure()
    plt.hist(sentiment_scores, bins=10, edgecolor='black')
    plt.xlabel('情感得分')
    plt.ylabel('句子数量')
    plt.title('根目录下pinglun文件的情感分析 - 直方图')
    plt.grid(True)
    plt.savefig(os.path.join(root_path, 'sentiment_histogram.png'))

    # 绘制情感二元分类的饼图并保存
    labels = ['负面', '正面']
    fig_pie = plt.figure()
    plt.pie(binary_sentiments, labels=labels, autopct='%1.1f%%', startangle=90)
    plt.title('根目录下pinglun文件的情感分析 - 饼图')
    plt.axis('equal')  # 保证饼图是圆形
    plt.savefig(os.path.join(root_path, 'sentiment_pie_chart.png'))

    # 显示图表(在命令行界面运行时可选)
    plt.show()

except FileNotFoundError:
    print("文件不存在:", file_path)
except Exception as e:
    print("处理文件时发生错误:", str(e))

 

标签:总结,plt,sentiment,python,comments,print,path,文本,page
From: https://www.cnblogs.com/azwz/p/17983264

相关文章

  • 高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!
    高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!前言近期,ChatGPT成为了全网热议的话题。ChatGPT是一种基于大规模语言模型技术(LLM,largelanguagemodel)实现的人机对话工具。现在主流的大规模语言模型都采用Transformer网络,通过极大规模的数据进行自监督训练。但是,......
  • Python UDP协议发送指定格式报文
      importstructimporttimeimportsocketimportthreading#udp发送数据defsend_data(udp_socket,target_ip,target_port,send_msg):try:udp_socket.sendto(send_msg,(target_ip,target_port))exceptExceptionase:......
  • CSS_常用文本属性
    1、文本颜色 2、文本间距   3、文本修饰text-decoration  4、文本缩进text-indent  5、文本对齐_水平text-align  6、细说font-saize 7、行高line-height(不能小于字体大小,一般1.5)  8、行高的注意事项-数值一般为1.5 9、文本对齐_......
  • 【python】SSTI模版注入
    0x00  PythonVene环境及介绍venv虚拟环境:创建和管理虚拟环境的模块首先aptupdate更新一下包管理安装你当前版本的python-venv选择一个目录,安装venv虚拟环境。我取的名是flask-venv。如何选中当前的venv呢?执行以下命令可以发现多了一个前缀flask-venv在当前目录安装f......
  • mysqlbinlog~导出sql总结
    mysqlbinlog是MySQL数据库中的一个实用程序,它用于处理二进制日志文件(也称为“binlogs”)。这些文件包含了在MySQL服务器上发生的所有更改和操作的信息。mysqlbinlog工具可以帮助你查看、分析或者应用这些日志。基础介绍下面是一些关于mysqlbinlog的基本介绍:功能查看二进制日志......
  • python安装包(模块)的八种方法
    1.使用easy_installeasy_install这应该是最古老的包安装方式了,目前基本没有人使用了。下面是easy_install的一些安装示例#通过包名,从PyPI寻找最新版本,自动下载、编译、安装$easy_installpkg_name#通过包名从指定下载页寻找链接来安装或升级包$easy_install-fhttp:/......
  • 通过Python计算有效降水量
    有效降水量是指能够提供给作物蒸发蒸腾,从而减少作物对灌溉水需求的雨量,可美国农业部土壤保持局推荐的方法进行逐日计算,本文将介绍其在Python环境中的实现方式。其公式如下:\[P_e=\sum_{i=1}^NP_{ei}=\begin{cases}\sum_{i=1}^N\frac{P_i(4.17-0.2P_i)}{4.17}&\quad\text{($P_i<8......
  • 李宏毅《机器学习》总结 - 类神经网络
    核心问题:CriticalPoint在GradientDescent的时候,如果遇到梯度为0的情况,导致无法继续optimization,这样的点叫做CritcalPoint如果最后优化的结果不好,则出现这样的点的原因有2个:一个是到localminima了,另一个是在驻点了(也叫鞍点,SaddlePoint)。现在主要关注的是如何判......
  • python简单去除视频水印
    只能去除固定水印位置。如果水印位置会变,那么后面的就去除不掉。而且如果视频第一帧没有水印出现,那么后面也没办法去掉。。。。。。。。文件夹格式为importosimportsysimportcv2importnumpyfrommoviepyimporteditorVIDEO_PATH='video'OUTPUT_PATH='output'......
  • js 规范化文本节点
    在将一个文本节点作为另一个文本节点的同胞插入后,两个文本节点的文本之间不会包含空格。2.规范化文本节点DOM文档中的同胞文本节点可能导致困惑,因为一个文本节点足以表示一个文本字符串。同样,DOM文档中也经常会出现两个相邻文本节点。为此,有一个方法可以合并相邻的文本节点。这......