#文字處理:情感分析,文字相似度,文字分類(tf-idf逆文件頻率)
#nlp:字串-向量化-貝葉斯訓練-測試
#文字相似度:詞頻
#文字分類:tf-idf(詞頻-逆文件頻率)
#1.原始文字
#2.分詞
#3.詞行歸一化
#4.去除停用詞
import os,re
import numpy as np
import pandas as pd
import jieba.posseg as pseg
from sklearn.model_selection import train_test_split
from sklearn.*****_bayes import multinomialnb
from sklearn.feature_extraction.text import tfidfvectorizer
#dataset_path = './dataset'
text_filenames = ['0_simplifyweibo.txt', '1_simplifyweibo.txt',
'2_simplifyweibo.txt', '3_simplifyweibo.txt']
# 原始資料的csv檔案
output_text_filename = 'raw_weibo_text.csv'
# 清洗好的文字資料檔案
output_cln_text_filename = 'clean_weibo_text.csv'
stopwords1 = [line.rstrip() for line in open('./中文停用詞庫.txt', 'r', encoding='utf-8')]
stopwords = stopwords1
#原始資料處理:
'''text_w_label_df_lst =
for text_filename in text_filenames:
text_file = os.path.join(dataset_path, text_filename)
# 獲取標籤,即0, 1, 2, 3
label = int(text_filename[0])
# 讀取文字檔案
with open(text_file, 'r', encoding='utf-8') as f:
lines = f.read().splitlines()
labels = [label] * len(lines)
#print(labels)
text_series = pd.series(lines)
label_series = pd.series(labels)
# 構造dataframe
text_w_label_df = pd.concat([label_series, text_series], axis=1)
result_df = pd.concat(text_w_label_df_lst, axis=0)
# 儲存成csv檔案
result_df.columns = ['label', 'text']
result_df.to_csv(os.path.join(dataset_path, output_text_filename),
index=none, encoding='utf-8')
'''#1. 資料讀取,處理,清洗,準備
'''# 讀取處理好的csv檔案,構造資料集
text_df = pd.read_csv(os.path.join(dataset_path, output_text_filename),encoding='utf-8')
print(text_df)
def proc_text(raw_line):
"""處理每行的文字資料
返回分詞結果
"""# 1. 使用正規表示式去除非中文字元
filter_pattern = re.compile('[^\u4e00-\u9fd5]+')
chinese_only = filter_pattern.sub('', raw_line)
# 2. 結巴分詞+詞性標註
words_lst = pseg.cut(chinese_only)
# 3. 去除停用詞
meaninful_words =
for word, flag in words_lst:
# if (word not in stopwords) and (flag == 'v'):
# 也可根據詞性去除非動詞等
if word not in stopwords:
return ' '.join(meaninful_words)
# 處理文字資料
# 過濾空字串
text_df = text_df[text_df['text'] != '']
# 儲存處理好的文字資料
text_df.to_csv(os.path.join(dataset_path, output_cln_text_filename),index=none, encoding='utf-8')
print('完成,並儲存結果。')
'''# 2. 分割訓練集、測試集
# 對應不同類別的感情:
# 0:喜悅
# 1:憤怒
# 2:厭惡
# 3:低落
clean_text_df = pd.read_csv(os.path.join(dataset_path, output_cln_text_filename),encoding='utf-8')
# 分割訓練集和測試集
x_train, x_test, y_train, y_test = train_test_split(clean_text_df['text'].values, clean_text_df['label'].values,test_size=0.25)
# 3. 特徵提取
# 計算詞頻
tf = tfidfvectorizer()
# 以訓練集當中的詞的列表進行每篇文章的重要性統計
x_train = tf.fit_transform(x_train)
print(tf.get_feature_names())
x_test = tf.transform(x_test)
# 4. 訓練模型***** bayes
mlt = multinomialnb(alpha=1.0)
# print(x_train.toarry())
mlt.fit(x_train, y_train)
y_predict = mlt.predict(x_test)
#5. **得出準確率 分類模型的評估標準-準確率和召回率(越高越好,**結果的準確性)
print("**的準確率:", mlt.score(x_test, y_test))
word2vec可以將詞語轉換為高維向量空間中的向量表示,它能揭示上下文關係。首先使用word2vec,將其訓練得到詞向量作為特徵權重,然後根據情感詞典和詞性的兩種特徵選擇方法篩選出有價值的特徵。 微博情感分析 資料的獲取(一)
本人由於研究生的研究方向是自然語言處理 社會輿情分析這個方向的所以本科生畢業設計就選擇了微博情感分析這一方向的題目。主要是完成情感分析這個功能,並把每一步流程都做到。本科生階段可以說這方面實在知之甚少,所以隨著畢業設計進行的過程我也會一直學習,並在這裡分享我的學習過程及心得。微博資料當然是基本了,我...
疫情下微博使用者情感分析 基於機器學習的微博情感分析
一 資料獲取 二 資料匯入與探索 全文運用python作為資料處理 的工具。首先利用pandas庫匯入資料並觀察一下前五行資料來看一下資料的大致情況 import pandas as pddata pd.read csv r c users zhousiying desktop weibo sent...
思路總結 對微博情感分析的的挖掘
原始資料 這一部分的內容,我們可以通過爬蟲技術來抓取。通過聚類演算法,找到相同話題的所有微博。然後拿來做為原始資料。還有就是使用者好友圈內的評價訊息,還有使用者產生的連線訊息,等等。這些都可以作為原始資料來歸入我們的資料庫。確訂目標 商業理解 資料理解 模型建立 有人說,搞資料探勘的人就是要來做這一...