基於文字挖掘技術的投資者情緒計算

2022-05-01 02:30:08 字數 4123 閱讀 3996

之前寫畢業**時有從**文字中計算投資者情緒,在此把當時所用的**發上來,當做乙個記錄。

#匯入需要的庫

from collections import defaultdict

from pandas import dataframe, series

from datetime import datetime

import pandas as pd

import os

import re

import jieba

import codecs

#讀取情感詞典檔案

sen_file=open('c:\\users\\administrator\\desktop\\dictionary3.txt','r+',encoding='utf-8')

sen_list = sen_file.read().splitlines()

sen_dict = defaultdict()

for s in sen_list:

s_split=s.split(',')

if len(s_split) == 2:

sen_dict[s.split(',')[0]] = s.split(',')[1]

#讀取否定詞檔案

not_word_file = open('c:\\users\\administrator\\desktop\\not_word.txt', 'r+', encoding='utf-8')

not_word_list = not_word_file.read().splitlines()

not_word_list[0]="不"

#讀取程度副詞檔案

degree_file = open('c:\\users\\administrator\\desktop\\degree.txt', 'r+', encoding='utf-8')

degree_list = degree_file.read().splitlines()

degree_dic = defaultdict()

for d in degree_list:

d_split=d.split(' ')

if len(d_split) == 2:

degree_dic[d.split(' ')[0]] = d.split(' ')[1]

#對句子進行分詞

def seg_word(sentence):

seg_list = jieba.cut(sentence)

seg_result =

for w in seg_list:

stopwords = set()

fr = codecs.open('c:\\users\\administrator\\desktop\\stopwords.txt', 'r', 'utf8')

for word in fr:

stopwords.add(word.strip())

fr.close()

return list(filter(lambda x: x not in stopwords, seg_result))

#對分詞後的詞語進行詞性劃分

def classify_words(word_list):

sen_word = dict()

not_word = dict()

degree_word = dict()

for i in range(len(word_list)):

word = word_list[i]

if word in sen_dict.keys() and word not in not_word_list and word not in degree_dic.keys():

sen_word[i] = sen_dict[word]

elif word in not_word_list:

not_word[i] = -1

elif word in degree_dic.keys():

degree_word[i] = degree_dic[word]

sen_file.close()

degree_file.close()

not_word_file.close()

return sen_word, not_word, degree_word

#計算情感詞的情感值

def socre_sentiment(sen_word, not_word, degree_word, seg_result):

score = 0

sentiment_index_list = list(sen_word.keys())

for i in sentiment_index_list:

w = 1

n = i-1

if n in not_word and n not in degree_word.keys():#有否定詞

w=w*(-1)

m = n-1

if m in degree_word.keys():

s = w*float(degree_word[m])*float(sen_word[i])

else:

s = w*float(sen_word[i])

else:

if n in degree_word.keys():

s = w*float(degree_word[n])*float(sen_word[i])

else:

s = float(sen_word[i])

score = s + score

return score

def setiment_score(sententce):

seg_list = seg_word(sententce)

sen_word, not_word, degree_word = classify_words(seg_list)

score = socre_sentiment(sen_word, not_word, degree_word, seg_list)

return score

path = 'c:\\users\\administrator\\desktop\\comment-csv.csv'

comment = pd.read_csv(path,encoding='gbk').astype(str)

review = comment['內容 2']

score =

for r in review:

comment['score'] = score

total_daily = df.groupby("time").count()

total_daily.columns = ['total']

pos_daily = df[df['score'] >0]

pos_daily = pos_daily.groupby("time").count()

pos_daily.columns = ['positive']

df_merge = pd.merge(total_daily, pos_daily, on='time')

df_merge['sentiment'] = df_merge['positive'] /df_merge['total']

path = 'c:\\users\\administrator\\desktop\\000300.csv'

stock = pd.read_csv(path,encoding='gbk').astype(str)

stock['time'] = pd.to_datetime(stock['time'])

df_merge = df_merge.reset_index()

df_merge['time'] = pd.to_datetime(df_merge['time'])

df_final = pd.merge(df_merge, stock, on='time', how = 'inner')

df_final.to_csv('c:\\users\\administrator\\desktop\\data.csv')

我研究一下如何傳檔案,有需要的可以自取。

**部分並非全部原創,裡面的情感詞情感值計算的規則部分也進行了較大改動。

歡迎討論。

不同型別投資者的炒金方式

明天,國家統計局將公布月度消費者物價指數 cpi 儘管多數機構 5月份cpi仍將維持負增長,但 今年下半年通脹的觀點卻愈發響亮。為此提供注意的是,包括 銅在內的大宗商品,金 銀等 傳統抗通脹概念的樓市 近期均走出揚公升的 通脹這只靴子真的會落地,還是虛驚一場?如果通脹真的發生,上述資產真的能保值增值...

編撰乙份投資者滿意的商業計畫書

編撰乙份投資者滿意的經營計畫書 文 裘友真 酷迷資訊管理顧問公司總經理 電子商務似乎沒有轉好的趨勢,因此學者專家開始探討新經濟泡沫現象是否將至?好的創意除了要生逢其時外,還需要有好的執行力,如此,才有機會創造好的收益。如果單從通路發展歷史角度看,統一超商 7 11 創新通路時曾經過漫長的陣痛期,因此...

西方最大的展會 加密投資者展會將在曼徹斯特舉行

英國加密投資者展會 crypto investor show將於2019年1月18日 19日在曼徹斯特中心舉行。這是繼2018年3月倫敦加密投資者展覽會勝利召開後,又一場引起世界範圍內區塊鏈愛好者及加密投資者的矚目的會議。據悉,作為歐洲區塊鏈領域最大的展會,2018年倫敦展會共有60家參展商,400...