一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

手把手教你對(duì)抓取的文本進(jìn)行分詞、詞頻統(tǒng)計(jì)、詞云可視化和情感分析

 Python進(jìn)階者 2023-02-10 發(fā)布于廣東

蒼蒼竹林寺,杳杳鐘聲晚。

大家好,我是Python進(jìn)階者。

前言

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

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

關(guān)于詞云的文章,歷史文章已經(jīng)寫了十幾篇了,感興趣的話可以在公眾號(hào)歷史文章搜索關(guān)鍵字“詞云”前往,但是關(guān)于分詞和語(yǔ)義分析的文章,就分享過(guò)一篇,這個(gè)我在讀研的時(shí)候?qū)懙?,雖然有些時(shí)日,但是內(nèi)容依舊精彩,歡迎前往查探:Python大佬分析了15萬(wàn)歌詞,告訴你民謠歌手們到底在唱什么。

一、思路

內(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ù)。

關(guān)于本文的源碼和數(shù)據(jù)我都已經(jīng)打包好上傳到git了,在公眾號(hào)后臺(tái)回復(fù)關(guān)鍵詞小明的數(shù)據(jù)即可獲取。

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

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文件即可,如果有遇到編碼問(wèn)題,將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:\Users\pdcfi\Desktop\xiaoming\職位表述文本.txt" ,encoding="utf-8")as file:
    text=file.read()
    text=cut(text)
    mask_pic=numpy.array(Image.open(r"C:\Users\pdcfi\Desktop\xiaoming\python.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')  # 把詞云保存下來(lái)

如果想用你自己的圖片,只需要替換原始圖片即可。這里使用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('\n\r').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('\r\n'))
        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分以上,說(shuō)明情感是積極的,這里經(jīng)過(guò)統(tǒng)計(jì)之后,發(fā)現(xiàn)整體是積極的。

四、總結(jié)

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

最后感謝粉絲【小明】提問(wèn),感謝【??(這是月亮的背面)】、【Python進(jìn)階者】大佬解惑,感謝【冫馬讠成】大佬提供積極參與。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    99香蕉精品视频国产版| 欧美一区二区三区喷汁尤物 | 午夜精品成年人免费视频| 国产成人亚洲欧美二区综| 日韩特级黄片免费在线观看 | 日韩一本不卡在线观看| 在线观看视频日韩精品| 国产又粗又长又大的视频| 国内九一激情白浆发布| 少妇激情在线免费观看| 大香蕉久草网一区二区三区| 午夜久久精品福利视频| 亚洲中文字幕熟女丝袜久久| 熟女免费视频一区二区| 丁香六月啪啪激情综合区| 少妇人妻精品一区二区三区| 国产免费观看一区二区| 欧美一区日韩二区亚洲三区| 麻豆最新出品国产精品| 亚洲中文字幕高清乱码毛片| 欧美日韩国产综合特黄| 国产精品久久三级精品| 91偷拍裸体一区二区三区| 久久福利视频这里有精品| 日韩精品人妻少妇一区二区| 亚洲视频在线观看你懂的| 日本不卡在线视频你懂的 | 中国日韩一级黄色大片| 一级片黄色一区二区三区| 国产精品刮毛视频不卡| 亚洲中文字幕在线视频频道| 蜜桃传媒在线正在播放| 免费午夜福利不卡片在线 视频| 日韩黄色大片免费在线| 国产午夜福利一区二区| 香蕉久久夜色精品国产尤物| 久久精品国产亚洲熟女| 欧美精品一区二区水蜜桃| 欧美国产日韩在线综合| 亚洲一区二区三区福利视频| 亚洲高清中文字幕一区二三区 |