99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀教你對(duì)抓取的文本進(jìn)行分詞、詞頻統(tǒng)計(jì)、詞云可視化和情感分析
教你對(duì)抓取的文本進(jìn)行分詞、詞頻統(tǒng)計(jì)、詞云可視化和情感分析
2022-02-09
收藏

作者:Python進(jìn)階者

來源:Python爬蟲與數(shù)據(jù)挖掘

前言

前幾天有個(gè)叫【小明】的粉絲在問了一道關(guān)于Python處理文本可視化+語(yǔ)義分析的問題。

他要構(gòu)建語(yǔ)料庫(kù),目前通過Python網(wǎng)絡(luò)爬蟲抓到的數(shù)據(jù)存在一個(gè)csv文件里邊,現(xiàn)在要把數(shù)據(jù)放進(jìn)txt里,表示不會(huì),然后還有后面的詞云可視化,分詞,語(yǔ)義分析等,都不太會(huì)。

一、思路

內(nèi)容稍微有點(diǎn)多,大體思路如下,先將csv中的文本取出,之后使用停用詞做分詞處理,再做詞云圖,之后做情感分析。

1、將csv文件中的文本逐行取出,存新的txt文件,這里運(yùn)行代碼《讀取csv文件中文本并存txt文檔.py》進(jìn)行實(shí)現(xiàn),得到文件《職位表述文本.txt》

2、運(yùn)行代碼《使用停用詞獲取最后的文本內(nèi)容.py》,得到使用停用詞獲取最后的文本內(nèi)容,生成文件《職位表述文本分詞后_outputs.txt》

3、運(yùn)行代碼《指定txt詞云圖.py》,可以得到詞云圖;

4、運(yùn)行代碼《jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔.py》,得到《wordCount_all_lyrics.xls》和《分詞結(jié)果.txt》文件,將《分詞結(jié)果.txt》中的統(tǒng)計(jì)值可以去除,生成《情感分析用詞.txt》,給第五步情感分析做準(zhǔn)備

5、運(yùn)行代碼《情感分析.py》,得到情感分析的統(tǒng)計(jì)值,取平均值可以大致確認(rèn)情感是正還是負(fù)。

二、實(shí)現(xiàn)過程

1.將csv文件中的文本逐行取出,存新的txt文件

這里運(yùn)行代碼《讀取csv文件中文本并存txt文檔.py》進(jìn)行實(shí)現(xiàn),得到文件《職位表述文本.txt》,代碼如下。

# coding: utf-8

import pandas as pd

df = pd.read_csv('./職位描述.csv', encoding='gbk')

# print(df.head())

for text in df['Job_Description']:

# print(text)

if text is not None:

with open('職位表述文本.txt', mode='a', encoding='utf-8') as file:

file.write(str(text))

print('寫入完成')

2.使用停用詞獲取最后的文本內(nèi)容

運(yùn)行代碼《使用停用詞獲取最后的文本內(nèi)容.py》,得到使用停用詞獲取最后的文本內(nèi)容,生成文件《職位表述文本分詞后_outputs.txt》,代碼如下:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import jieba

# jieba.load_userdict('userdict.txt')

# 創(chuàng)建停用詞list

def stopwordslist(filepath):

stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]

return stopwords

# 對(duì)句子進(jìn)行分詞

def seg_sentence(sentence):

sentence_seged = jieba.cut(sentence.strip())

stopwords = stopwordslist('stop_word.txt') # 這里加載停用詞的路徑

outstr = ''

for word in sentence_seged:

if word not in stopwords:

if word != 't':

outstr += word

outstr += " "

return outstr

inputs = open('職位表述文本.txt', 'r', encoding='utf-8')

outputs = open('職位表述文本分詞后_outputs.txt', 'w', encoding='utf-8')

for line in inputs:

line_seg = seg_sentence(line) # 這里的返回值是字符串

outputs.write(line_seg + 'n')

outputs.close()

inputs.close()

關(guān)鍵節(jié)點(diǎn),都有相應(yīng)的注釋,你只需要替換對(duì)應(yīng)的txt文件即可,如果有遇到編碼問題,將utf-8改為gbk即可解決。

3.制作詞云圖

運(yùn)行代碼《指定txt詞云圖.py》,可以得到詞云圖,代碼如下:

from wordcloud import WordCloud

import jieba

import numpy

import PIL.Image as Image

def cut(text):

wordlist_jieba=jieba.cut(text)

space_wordlist=" ".join(wordlist_jieba)

return space_wordlist

with open(r"C:UserspdcfiDesktopxiaoming職位表述文本.txt" ,encoding="utf-8")as file:

text=file.read()

text=cut(text)

mask_pic=numpy.array(Image.open(r"C:UserspdcfiDesktopxiaomingpython.png"))

wordcloud = WordCloud(font_path=r"C:/Windows/Fonts/simfang.ttf",

collocations=False,

max_words= 100,

min_font_size=10,

max_font_size=500,

mask=mask_pic).generate(text)

image=wordcloud.to_image()

# image.show()

wordcloud.to_file('詞云圖.png') # 把詞云保存下來

如果想用你自己的圖片,只需要替換原始圖片即可。這里使用Python底圖做演示,得到的效果如下:

4.分詞統(tǒng)計(jì)

運(yùn)行代碼《jieba分詞并統(tǒng)計(jì)詞頻后輸出結(jié)果到Excel和txt文檔.py》,得到《wordCount_all_lyrics.xls》和《分詞結(jié)果.txt》文件,將《分詞結(jié)果.txt》中的統(tǒng)計(jì)值可以去除,生成《情感分析用詞.txt》,給第五步情感分析做準(zhǔn)備,代碼如下:

#!/usr/bin/env python3

# -*- coding:utf-8 -*-

import sys

import jieba

import jieba.analyse

import xlwt # 寫入Excel表的庫(kù)

# reload(sys)

# sys.setdefaultencoding('utf-8')

if __name__ == "__main__":

wbk = xlwt.Workbook(encoding='ascii')

sheet = wbk.add_sheet("wordCount") # Excel單元格名字

word_lst = []

key_list = []

for line in open('職位表述文本.txt', encoding='utf-8'): # 需要分詞統(tǒng)計(jì)的原始目標(biāo)文檔

item = line.strip('nr').split('t') # 制表格切分

# print item

tags = jieba.analyse.extract_tags(item[0]) # jieba分詞

for t in tags:

word_lst.append(t)

word_dict = {}

with open("分詞結(jié)果.txt", 'w') as wf2: # 指定生成文件的名稱

for item in word_lst:

if item not in word_dict: # 統(tǒng)計(jì)數(shù)量

word_dict[item] = 1

else:

word_dict[item] += 1

orderList = list(word_dict.values())

orderList.sort(reverse=True)

# print orderList

for i in range(len(orderList)):

for key in word_dict:

if word_dict[key] == orderList[i]:

wf2.write(key + ' ' + str(word_dict[key]) + 'n') # 寫入txt文檔

key_list.append(key)

word_dict[key] = 0

for i in range(len(key_list)):

sheet.write(i, 1, label=orderList[i])

sheet.write(i, 0, label=key_list[i])

wbk.save('wordCount_all_lyrics.xls') # 保存為 wordCount.xls文件

得到的txt和excel文件如下所示:

5.情感分析的統(tǒng)計(jì)值

運(yùn)行代碼《情感分析.py》,得到情感分析的統(tǒng)計(jì)值,取平均值可以大致確認(rèn)情感是正還是負(fù),代碼如下:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

from snownlp import SnowNLP

# 積極/消極

# print(s.sentiments) # 0.9769551298267365 positive的概率

def get_word():

with open("情感分析用詞.txt", encoding='utf-8') as f:

line = f.readline()

word_list = []

while line:

line = f.readline()

word_list.append(line.strip('rn'))

f.close()

return word_list

def get_sentiment(word):

text = u'{}'.format(word)

s = SnowNLP(text)

print(s.sentiments)

if __name__ == '__main__':

words = get_word()

for word in words:

get_sentiment(word)

# text = u'''

# 也許

# '''

# s = SnowNLP(text)

# print(s.sentiments)

# with open('lyric_sentiments.txt', 'a', encoding='utf-8') as fp:

# fp.write(str(s.sentiments)+'n')

# print('happy end')

基于NLP語(yǔ)義分析,程序運(yùn)行之后,得到的情感得分值如下圖所示:

將得數(shù)取平均值,一般滿足0.5分以上,說明情感是積極的,這里經(jīng)過統(tǒng)計(jì)之后,發(fā)現(xiàn)整體是積極的。

四、總結(jié)

我是Python進(jìn)階者。本文基于粉絲提問,針對(duì)一次文本處理,手把手教你對(duì)抓取的文本進(jìn)行分詞、詞頻統(tǒng)計(jì)、詞云可視化和情感分析,算是完成了一個(gè)小項(xiàng)目了。下次再遇到類似這種問題或者小的課堂作業(yè),不妨拿本項(xiàng)目練練手,說不定有妙用噢,拿個(gè)高分不在話下!

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }