自然語(yǔ)言處理——文本情感分析

文本情感分析:又稱意見挖掘驰坊、傾向性分析等谊迄。簡(jiǎn)單而言,是對(duì)帶有情感色彩的主觀性文本進(jìn)行分析惩琉、處理豆励、歸納和推理的過程。互聯(lián)網(wǎng)(如博客和論壇以及社會(huì)服務(wù)網(wǎng)絡(luò)如大眾點(diǎn)評(píng))上產(chǎn)生了大量的用戶參與的良蒸、對(duì)于諸如人物技扼、事件、產(chǎn)品等有價(jià)值的評(píng)論信息嫩痰。這些評(píng)論信息表達(dá)了人們的各種情感色彩和情感傾向性,如喜剿吻、怒、哀串纺、樂和批評(píng)丽旅、贊揚(yáng)等≡於猓基于此,潛在的用戶就可以通過瀏覽這些主觀色彩的評(píng)論來了解大眾輿論對(duì)于某一事件或產(chǎn)品的看法魔招。本文主要簡(jiǎn)述情感分析中的情感信息抽取,及文本粒度由大到小分別對(duì)情感分析方法進(jìn)行對(duì)比和總結(jié)五辽。


過程和環(huán)節(jié):

1:收集數(shù)據(jù)集办斑。采用用戶評(píng)論和評(píng)分作為依據(jù),通過樣本數(shù)據(jù)訓(xùn)練分類來判斷情感傾向

2:設(shè)計(jì)文本的表示模型杆逗。讓機(jī)器讀懂文本乡翅,是文本情感分析的基礎(chǔ)首先要解決的是文本表示模型。向量表示文本罪郊,向量的特征是模型的最小單元蠕蚜。

3:選擇文本的特征。中文分詞(jieba,snownlp,thuLAC),將文本轉(zhuǎn)換為詞語(yǔ)悔橄“欣郏可以使用TF-IDF算法來抽取特征,并計(jì)算出特征值

4.選擇分類模型:如 決策樹癣疟,貝葉斯挣柬,人工神經(jīng)網(wǎng)絡(luò),支持向量機(jī)等機(jī)器學(xué)習(xí)算法


示例代碼:

import pandas as pd

from sklearn.cross_validation import train_test_split

import matplotlib.pyplot as plt

import os

#將文本轉(zhuǎn)為小寫睛挚,并且用空格對(duì)文本進(jìn)行分割

from keras.preprocessing.text import text_to_word_sequence

import math

os.chdir("D:\python_workspace\sentimentClassification-master\data")

print("Loading data......")

#加載數(shù)據(jù)? 訓(xùn)練集和測(cè)試集

train = pd.read_csv("train.csv")

test = pd.read_csv("test.csv")

# print(train.head(10))

# print(test.head(10))

print("#################")

#缺失值分析

print("train訓(xùn)練集的缺失值\n",train.isnull().sum())

print("test測(cè)試集的缺失值\n",test.isnull().sum())

#文本處理

train['comment_text_words']= train.comment_text.apply(text_to_word_sequence,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n\'')

print("訓(xùn)練集中將文本轉(zhuǎn)為小寫邪蛔,用空格分割\n",train.head())

test['comment_text_words'] = test.comment_text.apply(text_to_word_sequence, filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n\'')

print("測(cè)試集將文本轉(zhuǎn)為小寫,用空格分割\n",test.head())

# 將預(yù)訓(xùn)練好的 embeddings 進(jìn)行處理扎狱,返回幾個(gè)有用的變量:

# words_to_index:將單詞和編號(hào)進(jìn)行映射

# index_to_words:將編號(hào)和單詞進(jìn)行映射侧到,與 words_to_index 相反

# word_to_vec_map:將單詞與它的 embedding 進(jìn)行映射

def read_glove_vecs(glove_file):

? ? with open(glove_file,"r",encoding="utf-8") as f:

? ? ? ? #將單詞保存到一個(gè)集合中

? ? ? ? words = set()

? ? ? ? #將單詞與embedding 的映射保存到一個(gè)字典中

? ? ? ? word_to_ver_map={}

? ? ? ? for line in f:

? ? ? ? ? ? line = line.strip().split()

? ? ? ? ? ? #列表的第一個(gè)元素是單詞

? ? ? ? ? ? curr_word = line[0]

? ? ? ? ? ? #將單詞假如到集合中

? ? ? ? ? ? words.add(curr_word)

? ? ? ? ? ? #列表的其他元素是embedding 將單詞與embedding進(jìn)行映射,然后存入在字典中

? ? ? ? ? ? word_to_ver_map[curr_word] =np.array(line[1:],dtype=np.float32)

? ? #將單詞進(jìn)行編號(hào)淤击,編號(hào)從1開始

? ? i=1

? ? word_to_index={}

? ? index_to_words ={}

? ? for w in sorted(words):

? ? ? ? #創(chuàng)建映射匠抗,key是單詞,value是編號(hào)

? ? ? ? word_to_index[w]=i

? ? ? ? #創(chuàng)建映射污抬,key是編號(hào)汞贸,value是單詞

? ? ? ? index_to_words[i]=w

? ? ? ? i=i+1

? ? return word_to_index,index_to_words,word_to_ver_map

# glove.6B.50d.txt 是網(wǎng)上已經(jīng)預(yù)訓(xùn)練好的 word embedding 文件

word_to_index, index_to_word, word_to_vec_map = read_glove_vecs('glove.6B.50d.txt')

print("word_to_index:\n",word_to_index)

print("index_to_word:\n",index_to_word)

print("word_to_ver_map:\n",word_to_vec_map)

def sentences_to_indices(X):

? ? X_indices=[]

? ? for word in X:

? ? ? ? try:

? ? ? ? ? ? X_indices.append(word_to_index[word])

? ? ? ? except:

? ? ? ? ? ? pass

? ? return X_indices

test['comment_text_indexes'] = test.comment_text_words.apply(sentences_to_indices)

#文本長(zhǎng)度分析

comment_text_max_words_length = np.max([np.max(train.comment_text_words.apply(lambda x: len(x)))

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? , np.max(test.comment_text_words.apply(lambda x: len(x)))])

print("最大文本長(zhǎng)度是 "+str(comment_text_max_words_length))

# 查看商品名的長(zhǎng)度的分布

train.comment_text_words.apply(lambda x: len(x)).hist()

#文本長(zhǎng)度集中在0-400之間,所以我們把最大文本長(zhǎng)度設(shè)置為200

MAX_COMMENT_TEXT_SEQ = 200

# 如果列表長(zhǎng)度大于最大長(zhǎng)度,那么將列表進(jìn)行裁剪著蛙,如果列表長(zhǎng)度小于最大長(zhǎng)度,那么將列表補(bǔ)充到最大長(zhǎng)度耳贬,并且默認(rèn)填充0

from keras.preprocessing.sequence import pad_sequences

def get_keras_data(dataset):

? ? X = {'comment_text': pad_sequences(dataset.comment_text_indexes, maxlen=MAX_COMMENT_TEXT_SEQ)}

? ? return X

# 將訓(xùn)練集數(shù)據(jù)的文本編號(hào)列表進(jìn)行填充踏堡,并且提取出來

X_train = get_keras_data(train)

# 將測(cè)試集數(shù)據(jù)的文本編號(hào)列表進(jìn)行填充,并且提取出來

X_test = get_keras_data(test)

#將處理好的數(shù)據(jù)保存起來

import pickle

datafile = open('data.pkl', 'wb')

pickle.dump(X_train, datafile)

pickle.dump(X_test, datafile)

pickle.dump(word_to_index, datafile)

pickle.dump(index_to_word, datafile)

pickle.dump(word_to_vec_map, datafile)

datafile.close()




(原碼鏈接:https://pan.baidu.com/s/17dsY8Jr7HE3PD8r1sXH57A 密碼:nd7p)

歡迎各位大神交流咒劲,交流QQ群:688933850

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顷蟆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腐魂,更是在濱河造成了極大的恐慌帐偎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛔屹,死亡現(xiàn)場(chǎng)離奇詭異削樊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兔毒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門漫贞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人育叁,你說我怎么就攤上這事迅脐。” “怎么了豪嗽?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谴蔑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我龟梦,道長(zhǎng)隐锭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任变秦,我火速辦了婚禮成榜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹦玫。我一直安慰自己赎婚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布樱溉。 她就那樣靜靜地躺著挣输,像睡著了一般。 火紅的嫁衣襯著肌膚如雪福贞。 梳的紋絲不亂的頭發(fā)上撩嚼,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼完丽。 笑死恋技,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逻族。 我是一名探鬼主播蜻底,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼聘鳞!你這毒婦竟也來了薄辅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抠璃,失蹤者是張志新(化名)和其女友劉穎站楚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搏嗡,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窿春,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了采盒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谁尸。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纽甘,靈堂內(nèi)的尸體忽然破棺而出良蛮,到底是詐尸還是另有隱情,我是刑警寧澤悍赢,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布决瞳,位于F島的核電站,受9級(jí)特大地震影響左权,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赏迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一甩栈、第九天 我趴在偏房一處隱蔽的房頂上張望量没。 院中可真熱鬧殴蹄,春花似錦刺下、人聲如沸怠李。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至矾飞,卻和暖如春洒沦,著一層夾襖步出監(jiān)牢的瞬間申眼,已是汗流浹背括尸。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工啦膜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僧家,地道東北人啸臀。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓伤塌,卻偏偏與公主長(zhǎng)得像每聪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子童本,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自:https://districtdatalabs.silvrback.com/modern-methods...
    Traeyee閱讀 1,338評(píng)論 0 0
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,322評(píng)論 0 10
  • 盛夏 一晃又來到了一年中最熱的時(shí)節(jié)携添。 沒錯(cuò)烈掠,和大家一樣锥腻,西瓜空調(diào)冷飲就是夏天瘦黑。 但我突然地幸斥,想要去感受一下這個(gè)盛夏...
    蜘蛛網(wǎng)_女士閱讀 190評(píng)論 0 0
  • 人生活的是經(jīng)歷懈贺, 幸副疲總是在路上。 愿我們?cè)诔錆M陽(yáng)光的路上, 自由行走尉尾, 向著理想、向著幸福向前扰她, 向前兽掰!向前!
    袁益君閱讀 244評(píng)論 1 1
  • 為什么要優(yōu)化? 1. 提升網(wǎng)頁(yè)加載速度 2. 對(duì)搜索引擎,屏幕閱讀器友好 3. 提高可讀性,可維護(hù)性 ...
    YM雨蒙閱讀 370評(píng)論 0 1