Python中6種中文文本情感分析的方法詳解
中文文本情感分析是一種將自然語言處理技術(shù)應(yīng)用于文本數(shù)據(jù)的方法,它可以幫助我們了解文本中所表達(dá)的情感傾向。
在Python中,有多種方法可以進(jìn)行中文文本情感分析,下面將介紹其中的6種方式。
1.基于情感詞典的方法
情感詞典是一種包含了大量情感詞匯的詞典,其中每個(gè)詞都被標(biāo)記為積極、消極或中性。
基于情感詞典的方法是將文本中的每個(gè)詞與情感詞典中的詞進(jìn)行匹配,然后根據(jù)匹配結(jié)果計(jì)算文本的情感傾向。
Python中常用的情感詞典包括“知網(wǎng)情感詞典”、“哈工大情感詞典”等。
使用這些情感詞典進(jìn)行情感分析的代碼如下:
import?jieba import?pandas?as?pd #?加載情感詞典 posdict?=?pd.read_excel('positive_words.xlsx',?header=None)[0].tolist() negdict?=?pd.read_excel('negative_words.xlsx',?header=None)[0].tolist() #?分詞 text?=?'今天天氣真好,心情非常愉快。' words?=?jieba.lcut(text) #?計(jì)算情感得分 poscount?=?0 negcount?=?0 for?word?in?words: ????if?word?in?posdict: ????????poscount?+=?1 ????elif?word?in?negdict: ????????negcount?+=?1 score?=?(poscount?-?negcount)?/?len(words) print(score)
2.基于機(jī)器學(xué)習(xí)的方法
基于機(jī)器學(xué)習(xí)的方法是通過訓(xùn)練一個(gè)分類器來對(duì)文本進(jìn)行情感分類。
訓(xùn)練數(shù)據(jù)通常是一些已經(jīng)標(biāo)注好情感傾向的文本,例如電影評(píng)論、新聞報(bào)道等。
常用的機(jī)器學(xué)習(xí)算法包括樸素貝葉斯、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)等。
Python中常用的機(jī)器學(xué)習(xí)庫(kù)包括scikit-learn、TensorFlow等。
使用scikit-learn進(jìn)行情感分析的代碼如下:
import?jieba from?sklearn.feature_extraction.text?import?CountVectorizer from?sklearn.naive_bayes?import?MultinomialNB #?加載訓(xùn)練數(shù)據(jù) posdata?=?pd.read_excel('positive_data.xlsx',?header=None)[0].tolist() negdata?=?pd.read_excel('negative_data.xlsx',?header=None)[0].tolist() data?=?posdata?+?negdata labels?=?[1]?*?len(posdata)?+?[0]?*?len(negdata) #?分詞 words?=?['?'.join(jieba.lcut(text))?for?text?in?data] #?特征提取 vectorizer?=?CountVectorizer() X?=?vectorizer.fit_transform(words) #?訓(xùn)練分類器 clf?=?MultinomialNB() clf.fit(X,?labels) #?預(yù)測(cè)情感 text?=?'今天天氣真好,心情非常愉快。' test_X?=?vectorizer.transform(['?'.join(jieba.lcut(text))]) score?=?clf.predict_proba(test_X)[0][1] print(score)
3.基于深度學(xué)習(xí)的方法
基于深度學(xué)習(xí)的方法是使用神經(jīng)網(wǎng)絡(luò)對(duì)文本進(jìn)行情感分類。
常用的深度學(xué)習(xí)模型包括卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)等。這些模型通常需要大量的訓(xùn)練數(shù)據(jù)和計(jì)算資源。
Python中常用的深度學(xué)習(xí)庫(kù)包括TensorFlow、Keras等。
使用Keras進(jìn)行情感分析的代碼如下:
import?jieba from?keras.models?import?Sequential from?keras.layers?import?Embedding,?Conv1D,?GlobalMaxPooling1D,?Dense #?加載訓(xùn)練數(shù)據(jù) posdata?=?pd.read_excel('positive_data.xlsx',?header=None)[0].tolist() negdata?=?pd.read_excel('negative_data.xlsx',?header=None)[0].tolist() data?=?posdata?+?negdata labels?=?[1]?*?len(posdata)?+?[0]?*?len(negdata) #?分詞 words?=?[jieba.lcut(text)?for?text?in?data] #?構(gòu)建詞向量 word2vec?=?{} with?open('sgns.weibo.bigram',?encoding='utf-8')?as?f: ????for?line?in?f: ????????line?=?line.strip().split() ????????word?=?line[0] ????????vec?=?[float(x)?for?x?in?line[1:]] ????????word2vec[word]?=?vec embedding_matrix?=?[] for?word?in?vectorizer.get_feature_names(): ????if?word?in?word2vec: ????????embedding_matrix.append(word2vec[word]) ????else: ????????embedding_matrix.append([0]?*?300) #?構(gòu)建模型 model?=?Sequential() model.add(Embedding(len(vectorizer.get_feature_names()),?300,?weights=[embedding_matrix],?input_length=100)) model.add(Conv1D(128,?5,?activation='relu')) model.add(GlobalMaxPooling1D()) model.add(Dense(1,?activation='sigmoid')) model.compile(optimizer='adam',?loss='binary_crossentropy',?metrics=['accuracy']) #?訓(xùn)練模型 X?=?vectorizer.transform(['?'.join(words[i][:100])?for?i?in?range(len(words))]).toarray() model.fit(X,?labels,?epochs=10,?batch_size=32) #?預(yù)測(cè)情感 text?=?'今天天氣真好,心情非常愉快。' test_X?=?vectorizer.transform(['?'.join(jieba.lcut(text)[:100])]).toarray() score?=?model.predict(test_X)[0][0] print(score)
4.基于情感知識(shí)圖譜的方法
情感知識(shí)圖譜是一種將情感詞匯組織成圖譜的方法,其中情感詞匯之間的關(guān)系表示了它們之間的情感聯(lián)系。
基于情感知識(shí)圖譜的方法是將文本中的每個(gè)詞與情感知識(shí)圖譜中的詞進(jìn)行匹配,然后根據(jù)匹配結(jié)果計(jì)算文本的情感傾向。
Python中常用的情感知識(shí)圖譜包括“情感知識(shí)圖譜”、“情感詞匯本體庫(kù)”等。
使用這些情感知識(shí)圖譜進(jìn)行情感分析的代碼如下:
import?jieba import?pandas?as?pd from?pyhanlp?import?* #?加載情感知識(shí)圖譜 graph?=?pd.read_excel('emotion_graph.xlsx') #?分詞 text?=?'今天天氣真好,心情非常愉快。' words?=?jieba.lcut(text) #?計(jì)算情感得分 poscount?=?0 negcount?=?0 for?word?in?words: ????if?word?in?graph['詞語'].tolist(): ????????index?=?graph[graph['詞語']?==?word].index[0] ????????if?graph.loc[index,?'情感分類']?==?'正面': ????????????poscount?+=?1 ????????elif?graph.loc[index,?'情感分類']?==?'負(fù)面': ????????????negcount?+=?1 score?=?(poscount?-?negcount)?/?len(words) print(score)
5.基于情感規(guī)則的方法
情感規(guī)則是一種將情感知識(shí)以規(guī)則的形式表達(dá)出來的方法,其中每個(gè)規(guī)則表示了一種情感表達(dá)方式。
基于情感規(guī)則的方法是將文本中的每個(gè)句子與情感規(guī)則進(jìn)行匹配,然后根據(jù)匹配結(jié)果計(jì)算文本的情感傾向。
Python中常用的情感規(guī)則包括“情感規(guī)則庫(kù)”、“情感知識(shí)庫(kù)”等。
使用這些情感規(guī)則進(jìn)行情感分析的代碼如下:
import?jieba import?pandas?as?pd #?加載情感規(guī)則庫(kù) rules?=?pd.read_excel('emotion_rules.xlsx') #?分句 text?=?'今天天氣真好,心情非常愉快。' sentences?=?HanLP.extractSummary(text,?3) #?計(jì)算情感得分 poscount?=?0 negcount?=?0 for?sentence?in?sentences: ????for?index,?row?in?rules.iterrows(): ????????if?row['情感詞']?in?sentence?and?row['情感分類']?==?'正面': ????????????poscount?+=?1 ????????elif?row['情感詞']?in?sentence?and?row['情感分類']?==?'負(fù)面': ????????????negcount?+=?1 score?=?(poscount?-?negcount)?/?len(sentences) print(score)
6.基于情感神經(jīng)網(wǎng)絡(luò)的方法
情感神經(jīng)網(wǎng)絡(luò)是一種將情感知識(shí)和神經(jīng)網(wǎng)絡(luò)結(jié)合起來的方法,其中情感知識(shí)被用來初始化神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置。
基于情感神經(jīng)網(wǎng)絡(luò)的方法是使用這個(gè)初始化好的神經(jīng)網(wǎng)絡(luò)對(duì)文本進(jìn)行情感分類。
Python中常用的情感神經(jīng)網(wǎng)絡(luò)包括“情感神經(jīng)網(wǎng)絡(luò)”、“情感分析神經(jīng)網(wǎng)絡(luò)”等。
使用這些情感神經(jīng)網(wǎng)絡(luò)進(jìn)行情感分析的代碼如下:
import?jieba import?pandas?as?pd import?numpy?as?np from?keras.models?import?load_model #?加載情感神經(jīng)網(wǎng)絡(luò) model?=?load_model('emotion_network.h5') #?加載情感詞典 posdict?=?pd.read_excel('positive_words.xlsx',?header=None)[0].tolist() negdict?=?pd.read_excel('negative_words.xlsx',?header=None)[0].tolist() #?分詞 text?=?'今天天氣真好,心情非常愉快。' words?=?jieba.lcut(text) #?構(gòu)建輸入向量 X?=?np.zeros((1,?len(words))) for?i,?word?in?enumerate(words): ????if?word?in?posdict: ????????X[0,?i]?=?1 ????elif?word?in?negdict: ????????X[0,?i]?=?-1 #?預(yù)測(cè)情感 score?=?model.predict(X)[0][0] print(score)
以上就是基于Python代碼進(jìn)行中文文本情感分析的6種方式,每種方法都有其優(yōu)缺點(diǎn),選擇合適的方法需要根據(jù)具體情況進(jìn)行權(quán)衡。
到此這篇關(guān)于Python中6種中文文本情感分析的方法詳解的文章就介紹到這了,更多相關(guān)Python文本情感分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)優(yōu)雅的打印json格式文本
這篇文章主要介紹了python實(shí)現(xiàn)優(yōu)雅的打印json格式文本方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Python XML模塊數(shù)據(jù)解析與生成利器的使用掌握
這篇文章主要為大家介紹了Python XML模塊數(shù)據(jù)解析與生成利器的使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上
這篇文章主要介紹了Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上,本文通過截圖實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Python+PuLP實(shí)現(xiàn)線性規(guī)劃的求解
線性規(guī)劃(Linear?programming),在線性等式或不等式約束條件下求解線性目標(biāo)函數(shù)的極值問題,常用于解決資源分配、生產(chǎn)調(diào)度和混合問題。本文將利用PuLP實(shí)現(xiàn)線性規(guī)劃的求解,需要的可以參考一下2022-04-04python在回調(diào)函數(shù)中獲取返回值的方法
今天小編就為大家分享一篇python在回調(diào)函數(shù)中獲取返回值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02Python 實(shí)用技巧之利用Shell通配符做字符串匹配
這篇文章主要介紹了Python 實(shí)用技巧之利用Shell通配符做字符串匹配的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Python實(shí)現(xiàn)獲取網(wǎng)站或網(wǎng)頁的快照的示例代碼
本文主要介紹了Python實(shí)現(xiàn)獲取網(wǎng)站或網(wǎng)頁的快照的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02django 數(shù)據(jù)庫(kù)返回queryset實(shí)現(xiàn)封裝為字典
這篇文章主要介紹了django 數(shù)據(jù)庫(kù)返回queryset實(shí)現(xiàn)封裝為字典,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05