Python批量读取公司年报并进行情感分析--代码实战

该文章代码均在jupyter Notebook中运行,且已安装相关包

import jieba
import os
import csv

# 读取预定的情感词列表
def read_dict(file):
    text = open(file,encoding='gbk').read()
    text = text.split('\n')
    words = [w for w in text if w] # 去除空的内容
    return words

# 得到情感词列表
negs = read_dict(r'C:\Users\qingfeng\Desktop\Python爬虫与文本分析\Python爬虫与文本分析\Python爬虫与文本分析课件(更新)\03-初识文本分析\data\Reports\negative.txt')
poss = read_dict(r'C:\Users\qingfeng\Desktop\Python爬虫与文本分析\Python爬虫与文本分析\Python爬虫与文本分析课件(更新)\03-初识文本分析\data\Reports\positive.txt')
# print(negs,poss)

# 计算目标函数的情感词
def senti_count(text):
    wordlist = jieba.lcut(text) # 将要分析的文本进行分词
    
    pos_count = 0
    for pos in poss:
        pos_count = pos_count + wordlist.count(pos) # 计算要分析的文本中累计含有的正面情感词汇的数量
        
    neg_count = 0
    for neg in negs:
        neg_count = neg_count + wordlist.count(neg) # 计算要分析的文本中累计含有的正面情感词汇的数量
    
    return{'wordnum':len(wordlist),'pos':pos_count,'neg':neg_count}

# 新建CSV保存内容
csvf = open(r'C:\Users\qingfeng\Desktop\company_senti.csv','w',encoding = 'gbk',newline='')
writer = csv.writer(csvf)
writer.writerow(('company','year','wordnum','pos','neg'))

# 对某一个txt进行情感计算
# text = open(r'C:\Users\qingfeng\Desktop\Python爬虫与文本分析\Python爬虫与文本分析\Python爬虫与文本分析课件(更新)\03-初识文本分析\data\Reports\reports\青海华鼎2015.txt').read()
# senti_count(text)

# 通过for循环,批量获取文件路径,读取文件
file_list = os.listdir(r'C:\Users\qingfeng\Desktop\Python爬虫与文本分析\Python爬虫与文本分析\Python爬虫与文本分析课件(更新)\03-初识文本分析\data\Reports\reports')
for f in file_list:
    # python中,如果你的字符串最后一位是斜杠(slash)字符,那么即使字符串前面加了r表示regular的普通字符串,也是无法通过编译的,也是会导致SyntaxError的。
    file = 'C:\\Users\\qingfeng\\Desktop\\Python爬虫与文本分析\\Python爬虫与文本分析\\Python爬虫与文本分析课件(更新)\\03-初识文本分析\\data\\Reports\\reports\\' + f
    text = open(file,encoding = 'gbk').read()
    senti_score = senti_count(text) # 这里是词典格式
    wordnum = senti_score['wordnum']
    pos = senti_score['pos']
    neg = senti_score['neg']
    company = f[:-8] # 切片
    year = f[-8:-4]
#     print(company,year,wordnum,pos,neg)
    writer.writerow((company,year,wordnum,pos,neg))
csvf.close()

你可能感兴趣的:(#,大邓Python课程笔记)