评论数据获取、词频统计、词云图

# coding: utf-8

# In[2]:


import urllib.request
import re
import requests
import time
import random
import json

# 设置请求头
headers = ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)

# 获取URL
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=&productId=100002749549&score=0&sortType=5&pageSize=10&isShadowSku=0&fold=1'

f = open('E:/comments/华为P30.txt', 'w', encoding='utf-8')
for i in range(0, 20):
    t = str(time.time()*1000).split('.')
    pagram = {
        'page': i+1,
        'callback': 'fetchJSON_comment98vv4092%s' % (int(t[1])+1)
    }
    # print(pagram)
    # 随机休眠 行为分析
    time.sleep(random.random())
    
    # 发送http请求
    response = requests.get(url, params=pagram)
    # 入库,文件
    data = response.text
    # 解析数据
    data = re.findall(r'{.*}', data)[0]
    # 格式成字典
    data = json.loads(data)
    data = data['comments']
    comment_data = {}
    for item in data:
        comment_data['手机型号'] = item['referenceName']
        comment_data['昵称'] = item['nickname']
        comment_data['评论内容'] = item['content']
        f.write('手机型号:'+item['referenceName']+'\n'+'昵称:'+item['nickname']+'\n'+'评论内容:'+item['content']+'\n')
f.close()


# In[12]:


import jieba

# 评论内容进行去重
def quchong(infile, outfile):
    infopen = open(infile, 'r', encoding='utf-8')
    outopen = open(outfile, 'w', encoding='utf-8')
    lines = infopen.readlines()
    list_1 = []
    for line in lines:
        if line not in list_1:
            list_1.append(line)
            outopen.write(line)
    infopen.close()
    outopen.close()

quchong("E:/comments/华为P30.txt", "E:/comments/P30去重.txt")


# jieba.load_userdict('userdict.txt')
# 创建停用词list
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords

# 对评论内容进行分词
def seg_sentence(sentence):
    sentence_seged = jieba.cut(sentence.strip())
    stopwords = stopwordslist('E:/comments/cn_stopwords.txt')  # 这里加载停用词的路径
    outstr = ''
    for word in sentence_seged:
        if word not in stopwords:
            if word != '\t':
                outstr += word
                outstr += " "
    return outstr

inputs = open('E:/comments/P30去重.txt', 'r', encoding='utf-8')
outputs = open('E:/comments/P30分词.txt', 'w')
for line in inputs:
    line_seg = seg_sentence(line)  # 这里的返回值是字符串
    outputs.write(line_seg + '\n')
outputs.close()
inputs.close()
print('分词完毕')


# In[14]:


# 词频统计
import jieba.analyse
from collections import Counter  # 词频统计

with open('E:/comments/P30分词.txt', 'r', encoding='utf-8') as fr: 
    data = jieba.cut(fr.read())
data = dict(Counter(data))

with open('E:/comments/P30词频.txt', 'w', encoding='utf-8') as fw:  # 读入存储wordcount的文件路径
    for k, v in data.items():
        fw.write('%s, %d\n' % (k, v))


# In[18]:


import jieba.analyse
import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 生成词云
with open('E:/comments/P30词频.txt',encoding='utf-8') as f:
    # 提取关键词
    data = f.read()
    keyword = jieba.analyse.extract_tags(data, topK=50, withWeight=False)
    wl = " ".join(keyword)

    # 设置词云
    wc = WordCloud(
        # 设置背景颜色
        background_color = "white",
        # 设置最大显示的词云数
        max_words=2000,
        # 这种字体都在电脑字体中,一般路径
        font_path='C:/Windows/Fonts/simfang.ttf',
        height=1200,
        width=1600,
        # 设置字体最大值
        max_font_size=100,
        # 设置有多少种随机生成状态,即有多少种配色方案
        random_state=30,
    )

    myword = wc.generate(wl)  # 生成词云
    # 展示词云图
    plt.imshow(myword)
    plt.axis("off")
    plt.show()
    wc.to_file('E:/comments/P30.png')  # 把词云保存下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch 语义分割loss_vedaseg:基于pytorch的开源语义分割工具库,更多模型支持,更易拓展...

加入极市专业CV交流群,与6000来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!同时提供每月大咖直播分享、真实项目需求对接…

LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。 一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组(可能为空),并返…

字符设备驱动0:一个简单但完整的字符设备驱动程序

参考&#xff1a; linux设备驱动程序之简单字符设备驱动 【很详细,必看】http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html //在驱动入口函数中&#xff0c;使用register_chrdev添加字符设备驱动&#xff1a;#include <linux/module.h> #include <linu…

同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...

网络体系结构是从功能上描述计算机网络结构。计算机网络体系结构简称网络体系结构是分层结构&#xff1b;是计算机网络的各层及其协议的集合。每层遵循某个/些网络协议以完成本层功能。分层结构-协议-接口-服务首先就是为什么要分层发送文件前要完成的工作发起通信的计算机必须…

自动摘要

#!/user/bin/python # coding:utf-8 import nltk import numpy import jieba import codecs import os class SummaryTxt: def __init__(self,stopwordspath): # 单词数量 self.N 100 # 单词间的距离 self.CLUSTER_THRESHOLD 5 …

专家 安全_船级社专家组到公司开展安全生产标准化考核

12月17日&#xff0c;船级社专家组一行到公司开展安全生产标准化考核工作&#xff0c;公司党委书记、执行董事曲贝贝&#xff0c;执行总经理(主持生产经营工作)陈飞&#xff0c;执行总经理、安全总监李中华&#xff0c;党委副书记、纪委书记、工会主席刘小丽&#xff0c;总经济…

LeetCode 1750. 删除字符串两端相同字符后的最短长度(双指针)

文章目录1. 题目2. 解题322 / 1676&#xff0c; 19.2%1166 / 8426&#xff0c;13.8%https://leetcode-cn.com/contest/biweekly-contest-45/ranking/ 前两题&#xff1a; LeetCode 1748. 唯一元素的和 LeetCode 1749. 任意子数组和的绝对值的最大值&#xff08;前缀和&#xf…

分词、语法树

######Jieba分词###### import jieba string如果一个文法存在某个句子对应两棵不同的语法树&#xff0c;则称这个文法是二义的 print(string) seg_listjieba.cut(string,cut_allFalse,HMMTrue) seg_str .join(seg_list) ######PCFG句法分析###### from nltk.parse import stan…

Android开发学习笔记-自定义组合控件

为了能让代码能够更多的复用&#xff0c;故使用组合控件。下面是我正在写的项目中用到的方法。 1、先写要组合的一些需要的控件&#xff0c;将其封装到一个布局xml布局文件中。 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:an…

python基础实例 韦玮 pdf_Python基础实例教程(微课版)

第 1章 初识Python 1 1.1 快速了解Python 2 1.1.1 Python的起源与背景 2 1.1.2 Python的功能 3 1.1.3 Python的优势与特色 4 1.2 在Windows下搭建Python开发环境 6 1.2.1 操作系统的选择 6 1.2.2 在Windows下安装Python 7 1.3 在Linux下搭建Python开发环境 1…

测试是否支持跨域_浅谈跨域威胁与安全

WEB前端中最常见的两种安全风险&#xff0c;XSS与CSRF&#xff0c;XSS&#xff0c;即跨站脚本攻击、CSRF即跨站请求伪造,两者属于跨域安全攻击&#xff0c;对于常见的XSS以及CSRF在此不多谈论&#xff0c;仅谈论一些不太常见的跨域技术以及安全威胁。一、 域域&#xff0c;即域…

LeetCode 1752. 检查数组是否经排序和轮转得到

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 。 nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xff0c;则返回 true &#xff1b;否则&#xf…

linux-3.4.2移植到FL2440上(一)--只是基本移植

1.修改Makefile&#xff1a;ARCH ? armCROSS_COMPILE ? arm-linux-2.修改串口时钟&#xff1a;在/arch/arm/mach-s3c24xx/mach-smdk2440.c改为12Ms3c24xx_init_clocks(12000000);/* by zhutao */3.裁剪内核&#xff1a; │ -> System Type …

ts自动编译声明文件_拥抱 TS:细数选择 TS 的 N 种理由

作者 | 马靖day day up, bye bye bug最近在做一个新项目&#xff0c;技术大佬告知前端要用 TS 。前端小白的我内心疑惑“弱类型语言它不香嘛&#xff0c;为什么选择 TS &#xff1f;” 为了紧随大佬的流星大步&#xff0c;拥抱变化。带着这个疑惑我积(被)极(破)主(营)动(业)点开…

java分治法求数列的最大子段和_Java十大经典排序算法动画解析和 代码实现

排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序。而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。常见的内部排序算法有&#xff1a;…

岭回归预测PM2.5

# -*- coding: utf-8 -*- # File : demo2.py # Author : CJH # Date : 2019/4/9 # Software: PyCharm # Desc : 天气PM2.5预测import csv import numpy as np from numpy import * import matplotlib.pyplot as plt from sklearn import linear_modeltrainingData t…

LeetCode 1753. 移除石子的最大得分(优先队列)

文章目录1. 题目2. 解题2.1 优先队列2.2 脑筋急转弯1. 题目 你正在玩一个单人游戏&#xff0c;面前放置着大小分别为 a​​​​​​、b 和 c​​​​​​ 的 三堆 石子。 每回合你都要从两个 不同的非空堆 中取出一颗石子&#xff0c;并在得分上加 1 分。 当存在 两个或更多 …

基于Spring框架的Shiro配置

http://kdboy.iteye.com/blog/1103794 一、在web.xml中添加shiro过滤器 Xml代码 <!-- Shiro filter--> <filter> <filter-name>shiroFilter</filter-name> <filter-class> org.springframework.web.filter.Delegating…

dat文本导入mysql_mysql学习笔记(九) 增删改查的优化

一、大批量插入数据当使用load命令导入数据的时候&#xff0c;可以适当的提高导入的速度。对于myisam存储引擎的表可以通过下述方法快速的导入大量的数据。Alter table tablename disable keys;Loading dateAlter table tabename enable keys;其中disable keys和enable keys用来…

asp.net接受表单验证格式后再提交数据_如何解析 el-form-renderer 表单渲染器1.14.0...

DEEPEXI 大前端常人道&#xff0c;一入开发深似海&#xff0c;技术学习无止境。在新技术层出不穷的前端开发领域&#xff0c;有一群身怀绝技的开发&#xff0c;他们在钻研前沿技术的同时&#xff0c;也不忘分享他们的成果&#xff0c;回馈社区。下面&#xff0c;就由小水滴带大…