導航:首頁 > 編程語言 > 基於python的微博文本情感分析

基於python的微博文本情感分析

發布時間:2022-12-26 04:46:03

1. python SnowNLP情感分析實踐與優化總結

由於語料缺乏,前期若使用到情感分析,建議暫時使用SnowNLP(此模塊主要使用淘寶評論語料)做情感挖掘,但不僅僅為單純調用,需要優化,下面是一些實踐思考:

可在此基礎上優化,比如文本需要特別處理,除了平常的去停用詞外,還可以需要對輸入的文本結合詞性等進行處理。

下面是一些常識:

一)無情感的詞語(如去停用詞,去掉語氣詞,無詞性標簽的詞語)

二)對於文本過長,則可以考慮提取關鍵詞或抽取文本摘要後再提取關鍵詞

對於後者實踐結果差異明顯:

以"發布了頭條文章: 《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯 "為例子, 顯然該文本為「積極****」文本。

1)s = SnowNLP("發布了頭條文章:《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯")

得分為0.5,明顯不符合

2)s = SnowNLP(「 」.join(jieba.analyse.textrank("發布了頭條文章:《5分鍾11億!京東雙11場景化產品消費增長明顯》 5分鍾11億!京東雙11場景化產品消費增長明顯")))

而對於文本特別長的,則可以先抽取摘要,再對摘要提取關鍵詞。

這主要由於此SnowNLP主要用貝葉斯機器學習方法進行訓練文本,機器學習在語料覆蓋上不夠,特徵上工程處理不當會減分,也沒考慮語義等。

為何要考慮語義層面:

以「 蘇寧易購,是誰給你們下架OV的勇氣****」 中的「 下架」其實才是中心詞(為表達憤怒的文本),但「 勇氣 」為下架的賓語(其為積極的文本),此句應該結果小於0.5,但實際為0.88,去掉「蘇寧易購」則為0.6>

2. 如何用Python做情感分析

可以使用snownlp包,也可以用nltk 和 scikit-learn 結合,或者自己寫演算法實現。
簡單話就是情感詞典的匹配,想提高效果的需要考慮特徵之間的搭配,語法順序等,可以查詢搜索相關的入門例子和演算法詳細了解。

3. 用python找文獻,並從文本中分析情緒,做一個數據分析

到你的系統「終端」(macOS, Linux)或者「命令提示符」(Windows)下,進入我們的工作目錄demo,執行以下命令。
pip install snownlppip install -U textblobpython -m textblob.download_corpora

好了,至此你的情感分析運行環境已經配置完畢。
在終端或者命令提示符下鍵入:
jupyter notebook

你會看到目錄里之前的那些文件,忽略他們就好。

4. python數據挖掘——文本分析

作者 | zhouyue65

來源 | 君泉計量

文本挖掘:從大量文本數據中抽取出有價值的知識,並且利用這些知識重新組織信息的過程。

一、語料庫(Corpus)

語料庫是我們要分析的所有文檔的集合。

二、中文分詞

2.1 概念:

中文分詞(Chinese Word Segmentation):將一個漢字序列切分成一個一個單獨的詞。

eg:我的家鄉是廣東省湛江市-->我/的/家鄉/是/廣東省/湛江市

停用詞(Stop Words):

數據處理時,需要過濾掉某些字或詞

√泛濫的詞,如web、網站等。

√語氣助詞、副詞、介詞、連接詞等,如 的,地,得;

2.2 安裝Jieba分詞包:

最簡單的方法是用CMD直接安裝:輸入pip install jieba,但是我的電腦上好像不行。

後來在這里:https://pypi.org/project/jieba/#files下載了jieba0.39解壓縮後 放在Python36Libsite-packages裡面,然後在用cmd,pip install jieba 就下載成功了,不知道是是什麼原因。

然後我再anaconda 環境下也安裝了jieba,先在Anaconda3Lib這個目錄下將jieba0.39的解壓縮文件放在裡面,然後在Anaconda propt下輸入 pip install jieba,如下圖:

2.3 代碼實戰:

jieba最主要的方法是cut方法:

jieba.cut方法接受兩個輸入參數:

1) 第一個參數為需要分詞的字元串

2)cut_all參數用來控制是否採用全模式

jieba.cut_for_search方法接受一個參數:需要分詞的字元串,該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細

注意:待分詞的字元串可以是gbk字元串、utf-8字元串或者unicode

jieba.cut以及jieba.cut_for_search返回的結構都是一個可迭代的generator,可以使用for循環來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉化為list代碼示例( 分詞 )

輸出結果為: 我 愛

Python

工信處

女幹事

每月 經過 下屬 科室 都 要 親口

交代

24 口 交換機 等 技術性 器件 的 安裝

工作

分詞功能用於專業的場景:

會出現真武七截陣和天罡北斗陣被分成幾個詞。為了改善這個現象,我們用導入詞庫的方法。

但是,如果需要導入的單詞很多,jieba.add_word()這樣的添加詞庫的方法就不高效了。

我們可以用jieba.load_userdict(『D:PDM2.2金庸武功招式.txt』)方法一次性導入整個詞庫,txt文件中為每行一個特定的詞。

2.3.1 對大量文章進行分詞

先搭建語料庫:

分詞後我們需要對信息處理,就是這個分詞來源於哪個文章。

四、詞頻統計

3.1詞頻(Term Frequency):

某個詞在該文檔中出現的次數。

3.2利用Python進行詞頻統計

3.2.1 移除停用詞的另一種方法,加if判斷

代碼中用到的一些常用方法:

分組統計:

判斷一個數據框中的某一列的值是否包含一個數組中的任意一個值:

取反:(對布爾值)

四、詞雲繪制

詞雲(Word Cloud):是對文本中詞頻較高的分詞,給與視覺上的突出,形成「關鍵詞渲染」,從而國旅掉大量的文本信息,使瀏覽者一眼掃過就可以領略文本的主旨。

4.1 安裝詞雲工具包

這個地址:https://www.lfd.uci.e/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python庫,進去根據自己的系統和Python的版本進行下載即可。

在python下安裝很方便,在anaconda下安裝費了點勁,最終將詞雲的文件放在C:UsersAdministrator 這個目錄下才安裝成功。

五、美化詞雲(詞雲放入某圖片形象中)

六、關鍵詞提取

結果如下:

七、關鍵詞提取實現

詞頻(Term Frequency):指的是某一個給定的詞在該文檔中出現的次數。

計算公式: TF = 該次在文檔中出現的次數

逆文檔頻率(Inverse Document Frequency):IDF就是每個詞的權重,它的大小與一個詞的常見程度成反比

計算公式:IDF = log(文檔總數/(包含該詞的文檔數 - 1))

TF-IDF(Term Frequency-Inverse Document Frequency):權衡某個分詞是否關鍵詞的指標,該值越大,是關鍵詞的可能性就越大。

計算公式:TF - IDF = TF * IDF

7.1文檔向量化

7.2代碼實戰

5. 怎樣用python處理文本情感分析

Python 有良好的程序包可以進行情感分類,那就是Python 自然語言處理包,Natural Language Toolkit ,簡稱NLTK 。NLTK 當然不只是處理情感分析,NLTK 有著整套自然語言處理的工具,從分詞到實體識別,從情感分類到句法分析,完整而豐富,功能強大。

6. 怎麼利用python或R分析我的微博或者朋友圈

一. 你在瀏覽微博的時候,受到哪些用戶的影響。
1. 抓取你微博的關注列表,通過一定的條件篩選一部分用戶,繼續抓他們的關注列表,這樣抓兩到三層就行了,不然數據太大了。
2. 對抓取的用戶進行影響力建模,例如,用戶最近兩個月的微博的轉發評論和點贊數據
3. 最後分析出哪些用戶對你的影響最大

二. 基於地理位置的分析
1. 抓取以某個城市為發微博的地理位置的微博數據,並且抓取發微博的用戶的相關信息
2. 對數據清洗,通過用戶資料篩選出是否土著居民,還是旅遊出差之類的數據
3. 對數據分析,通過發微博的時間啊,某個地點發微博的次數啊,發微博出現最多的關鍵詞
這些應該能得到一些有意思的數據

三. 自然語言處理
微博的大量的文本數據可以做自然語言處理,情感分析之類的很多研究

四. 熱點事件追蹤
1. 通過關鍵詞的搜索,跟蹤熱點事件
2. 很多熱點事情都是某個微博開始發酵的,可以抓取轉發路徑,找出哪些是重要的轉發節點,
抓取評論內容,看看網友對這件事情的態度。
3. 監控微博博主的粉絲增加數量的變化

五. 計算機視覺相關研究
1. 抓取微博出現的圖片,做計算視覺相關的研究
2. 抓取微博用戶的頭像,做人臉識別之類的,應該很有意思。

六. 個人微博數據分析
1. 發微博時間
2. 微博出現的關鍵詞
3. 你點過哪些贊,評論過哪些微博。
4. 和哪些人發過私信,這些都可以研究,關鍵是找到合適的模型

7. 很高興認識你,也很想幫我揪揪痧,不知能實現願望

名大一學生 這是我的第一章博客

我其實不太清楚「博客」是用來做什麼的,但是現在我想用來發表一些我的「瑣事雜事」

我的狀態

我在迷茫的狀態中漸漸的將自己給拉出來,我有了明確的目標,現在我便開始要養成我的習慣。
我想將自己更加透徹的剖析下,不介意各位誰看到了我的這篇博客,嗯,因為可能我的博客裡面寫了一些「極其弟弟」的行為和語言。
具體實現步驟如下:

將自己的日常發表 ,這樣的行為雖然是會「流水」可是在寫日記的話,我們會在寫的過程了反思;
學習小結 不論是自學的還是專業的;
以上待補充 ;
很高興認識你 ?
–16:40 --2018.2.17 --長沙

推薦10個堪稱神器的 Java 學習網站

Java學習網站,有了這些,成為大牛不在話下
APP打開
奧運英語[5] 很高興再次見到你 Good to see you again.
http://www.eol.cn/olympic_study_5563/20070228/t20070228_220259.shtml 第5句GREETINGS: Good to see you again. 問候語: 很高興再次見到你。A Hi, Paul. It』s good to see you again.A 嗨,保羅,很高興再次見
APP打開
程序員一般通過什麼途徑接私活?
點擊藍色「Creator星球游戲開發社區」關注我喲加個「星標」,一起快樂成長二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告訴我一些方法嗎?上面是一個讀者「煩不煩」問我的一個問題。其實不止是「煩不煩」,還有很多讀者問過我類似這樣的問題。我接的私活不算多,掙到的錢也沒有多少,加起來不到 20W。說實話,這個數目說出來我是有點心虛的,畢竟太少了,大家輕噴。但我想,恰好配得上「一般程序員」這個...
APP打開
看完讓你徹底搞懂Websocket原理
偶然在知乎上看到一篇回帖,瞬間覺得之前看的那麼多資料都不及這一篇回帖讓我對websocket的認識深刻有木有。所以轉到我博客里,分享一下。比較喜歡看這種博客,讀起來很輕松,不枯燥,沒有佈道師的陣仗,純粹為分享。廢話這么多了,最後再贊一個~ 一、websocket與http WebSocket是HTML5出的東西(協議),也就是說HTTP協議沒有變化,或者說沒關系,但HTTP是不支持持久
APP打開
你好,很高興認識你_默的博客-CSDN博客
請你保護好自己吧 偶然間從你的全世界路過 我永遠也無法讓你帶我去 你永遠也無法跟我走 十四億分之一 很高興認識你 ——2020年8月6日凌晨點...
你好_bigha7的專欄-CSDN博客
你好 很高興認識你 你好,很高興認識你我是「假·玉米」 現在在長沙 目前是一名大一學生 這是我的第一章博客我其實不太清楚「博客」是用來做什麼的,但是現在我...
Python3從零開始搭建一個語音對話機器人
從零開始搭建一個語音對話機器人 目錄 01-初心緣由 02-准備工作 03-語音機器人的搭建思路 04-語音生成音頻文件 05-音頻文件轉文字STT 06-與圖靈機器人對話 07-文字轉語音 08-語音對話機器人的完整代碼 09-結束語 10-有問必答 01-初心緣由 最近在研究語音識別方向,看了很多的語音識別的資料和文章,了解了一下語音識別的前世今生,其...
APP打開

zuiqingchun2
第七十四章 先從接吻開始 她聽完就掐了我胳膊下,臉微微紅著說:幹啥啊問這個,真不要臉,我說我咋不要臉了,那不是你昨天主動告訴我的啊? 她這時候就一副不認賬的樣子不停的跟我說:沒有沒有沒有......我心想人家本來也就沒跟我說,是我從高帥那知道的,便也跟她說得了,沒就沒吧,我現在問你,是不是一個大,一個小? 其實我說這些話也不是沒目的的,以前沒有對林一妹產生什麼歪想法,那是因為那時候主要思考的
APP打開
Hi,runloop 交個朋友吧 - weixin_34400525的博客 - CSDN博客
runloop :你好,很高興認識你! developer:我先自我介紹一下,我叫iOS Developer,你呢? runloop :我叫runloop,你的有些同伴叫我跑圈,我覺得叫我循環運行比較...
初次見面,你好_weixin_30603633的博客-CSDN博客
雖然不知道是在對誰說話,初次見面,你好,我是墨雨笙...臨近畢業的時候又機緣巧合聽到了很厲害的學長的介紹...今天你最大!奉上我的愛!!內容是程序員表白的一種...
如何優雅地列印一個Java對象?

你好呀,我是沉默王二,一個和黃家駒一樣身高,和劉德華一樣顏值的程序員。雖然已經寫了十多年的 Java 代碼,但仍然覺得自己是個菜鳥(請允許我慚愧一下)。 在一個月黑風高的夜晚,我思前想後,覺得再也不能這么蹉跎下去了。於是痛下決心,准備通過輸出的方式倒逼輸入,以此來修煉自己的內功,從而進階成為一名真正意義上的大神。與此同時,希望這些文章能夠幫助到更多的讀者,讓大家在學習的路上不再寂寞、空虛和冷。 ...
APP打開
你好,放大器
詳細講解了運放的分類和使用方法
APP打開
很高興認識大家(開通技術博客的理由) - weixin_30289831的博客...
我很高興能夠在程序員的網上精神家園開通博客,學習寫作技術博文,並與大家有其他人生話題的互動和交流。 受到新媒體的影響如微信微博等社交網路軟體的盛行,我已經有...
終於加入了CSDN,高興! - skipjacks的專欄 - CSDN博客
今天加入了JAVAEYE,很開心哈。可以在這里找到自己需要的東西,看看別人的博客,交到很多同行的朋友,呵呵!!!... 博文 來自: 小孩兒 你好 很高興認識你 閱讀數 ...
NLP之情感分析:基於python編程(jieba庫)實現中文文本情感分析(得到的是情感評分)
NLP之情感分析:基於python編程(jieba庫)實現中文文本情感分析(得到的是情感評分) 輸出結果 1、測試對象 data1= '今天上海的天氣真好!我的心情非常高興!如果去旅遊的話我會非常興奮!和你一起去旅遊我會更加幸福!' data2= '今天上海天氣真差,非常討厭下雨,把我凍壞了,心情太不高興了,不高興,我真的很生氣!' data3= '美國華裔科學家,祖籍江蘇揚州市高郵縣,...
APP打開

Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT,博主親自驗證有效
Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能拓展與語法支持,除...
APP打開

只為交運維道友_huangyuandong1314的博客-CSDN博客
你好!很高興認識你... 面向對象編程,你知道Java有哪些創建對象的方式嗎? Java有哪些創建對象的方式?1、用new關鍵字創建對象,需要使用構造器。2、使用反射機制創建對...
寫評論

評論

收藏

馬 蘭花開,白雲徜徉,清風拂面,
萍 秀嫵媚,馨醉,惹人痴戀。
萍 園俊秀,彩蝶,飄逸爛漫。
很 想佳人,牽手結伴,嬉遊春天。
高 山俯瞰,望小橋流水,景色妙曼。
興 致勃發,嬌娥輕攬,入夢輾轉。
認 緣牽手,卻難擁有,多少苦楚。
識 曲傳來,撩動心扉,神閑。
你 若情真,折一隻紙船,順水漂岸。

2017-12-08 1
雪花揪痧五條粗痧
揪痧捏痧擠痧挾痧刮痧圖片
揪痧捏痧擠痧花樣
揪痧揪性痧
怎樣全身揪痧一百條
今日寒露
幫我設計藝術簽名wa拼音怎麼讀視頻新華字典內容幫我寫一首藏頭詩
上滑了解更多
¥2FT0bmb5p6d¥

8. 用python對中文做情感分析,有沒有好的介面推薦

import jieba
import numpy as np

# 打開詞典文件,返回列表
def open_dict(Dict='hahah',path = r'/Users/zhangzhenghai/Downloads/Textming/'):
path = path + '%s.txt' %Dict
dictionary = open(path, 'r', encoding='utf-8')
dict = []
for word in dictionary:
word = word.strip('\n')
dict.append(word)
return dict

def judgeodd(num):
if num % 2 == 0:
return 'even'
else:
return 'odd'

deny_word = open_dict(Dict='否定詞')
posdict = open_dict(Dict='positive')
negdict = open_dict(Dict = 'negative')

degree_word = open_dict(Dict = '程度級別詞語',path=r'/Users/zhangzhenghai/Downloads/Textming/')
mostdict = degree_word[degree_word.index('extreme')+1: degree_word.index('very')] #權重4,即在情感前乘以3
verydict = degree_word[degree_word.index('very')+1: degree_word.index('more')] #權重3
moredict = degree_word[degree_word.index('more')+1: degree_word.index('ish')]#權重2
ishdict = degree_word[degree_word.index('ish')+1: degree_word.index('last')]#權重0.5

def sentiment_score_list(dataset):
seg_sentence = dataset.split('。')

count1 = []
count2 = []
for sen in seg_sentence: # 循環遍歷每一個評論
segtmp = jieba.lcut(sen, cut_all=False) # 把句子進行分詞,以列表的形式返回
i = 0 #記錄掃描到的詞的位置
a = 0 #記錄情感詞的位置
poscount = 0 # 積極詞的第一次分值
poscount2 = 0 # 積極反轉後的分值
poscount3 = 0 # 積極詞的最後分值(包括嘆號的分值)
negcount = 0
negcount2 = 0
negcount3 = 0
for word in segtmp:
if word in posdict: # 判斷詞語是否是情感詞
poscount +=1
c = 0
for w in segtmp[a:i]: # 掃描情感詞前的程度詞
if w in mostdict:
poscount *= 4.0
elif w in verydict:
poscount *= 3.0
elif w in moredict:
poscount *= 2.0
elif w in ishdict:
poscount *= 0.5
elif w in deny_word: c+= 1
if judgeodd(c) == 'odd': # 掃描情感詞前的否定詞數
poscount *= -1.0
poscount2 += poscount
poscount = 0
poscount3 = poscount + poscount2 + poscount3
poscount2 = 0
else:
poscount3 = poscount + poscount2 + poscount3
poscount = 0
a = i+1
elif word in negdict: # 消極情感的分析,與上面一致
negcount += 1
d = 0
for w in segtmp[a:i]:
if w in mostdict:
negcount *= 4.0
elif w in verydict:
negcount *= 3.0
elif w in moredict:
negcount *= 2.0
elif w in ishdict:
negcount *= 0.5
elif w in degree_word:
d += 1
if judgeodd(d) == 'odd':
negcount *= -1.0
negcount2 += negcount
negcount = 0
negcount3 = negcount + negcount2 + negcount3
negcount2 = 0
else:
negcount3 = negcount + negcount2 + negcount3
negcount = 0
a = i + 1
elif word == '!' or word == '!': # 判斷句子是否有感嘆號
for w2 in segtmp[::-1]: # 掃描感嘆號前的情感詞,發現後權值+2,然後退出循環
if w2 in posdict or negdict:
poscount3 += 2
negcount3 += 2
break
i += 1

# 以下是防止出現負數的情況
pos_count = 0
neg_count = 0
if poscount3 <0 and negcount3 > 0:
neg_count += negcount3 - poscount3
pos_count = 0
elif negcount3 <0 and poscount3 > 0:
pos_count = poscount3 - negcount3
neg_count = 0
elif poscount3 <0 and negcount3 < 0:
neg_count = -pos_count
pos_count = -neg_count
else:
pos_count = poscount3
neg_count = negcount3
count1.append([pos_count,neg_count])
count2.append(count1)
count1=[]

return count2

def sentiment_score(senti_score_list):
score = []
for review in senti_score_list:
score_array = np.array(review)
Pos = np.sum(score_array[:,0])
Neg = np.sum(score_array[:,1])
AvgPos = np.mean(score_array[:,0])
AvgPos = float('%.lf' % AvgPos)
AvgNeg = np.mean(score_array[:, 1])
AvgNeg = float('%.1f' % AvgNeg)
StdPos = np.std(score_array[:, 0])
StdPos = float('%.1f' % StdPos)
StdNeg = np.std(score_array[:, 1])
StdNeg = float('%.1f' % StdNeg)
score.append([Pos,Neg,AvgPos,AvgNeg,StdPos,StdNeg])
return score

data = '用了幾天又來評價的,手機一點也不卡,玩榮耀的什麼的不是問題,充電快,電池夠大,玩游戲可以玩幾個小時,待機應該可以兩三天吧,很贊'
data2 = '不知道怎麼講,真心不怎麼喜歡,通話時聲音小,新手機來電話竟然卡住了接不了,原本打算退,剛剛手機摔了,又退不了,感覺不會再愛,像素不知道是我不懂還是怎麼滴 感覺還沒z11mini好,哎要我怎麼評價 要我如何喜歡努比亞 太失望了'

print(sentiment_score(sentiment_score_list(data)))
print(sentiment_score(sentiment_score_list(data2)))

9. 給了一堆數據 用python做文本情感分析 但是課題要求是事先將無意義的評論去處 這要怎麼做

既然你已經學到了數據分析,那麼基本的語法應該大都知道了吧。
這無非就是篩選數據的問題,先搞清楚什麼是「無意義的評論」,它滿足什麼條件,再遍歷評論,如果滿足這個「無意義」的條件,那麼就刪除掉就是了。

閱讀全文

與基於python的微博文本情感分析相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163