国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的商品評(píng)論文本情感分析

2020-05-13 14:15:23曾小芹余宏
電腦知識(shí)與技術(shù) 2020年8期
關(guān)鍵詞:爬蟲分詞瀏覽器

曾小芹 余宏

摘要:文本情感分析是自然語言處理的重要過程。研究首先運(yùn)用Selenium爬蟲抓取評(píng)論文本,通過Jieba分詞工具對(duì)文本進(jìn)行分詞、詞性標(biāo)注及關(guān)鍵詞詞云的生成,再選用適用于中文文本處理的snowNLP庫對(duì)評(píng)論文本進(jìn)行情感計(jì)算和結(jié)果可視化,并通過準(zhǔn)確率和召回率驗(yàn)證了研究結(jié)果,將對(duì)結(jié)果進(jìn)行了詳細(xì)分析。最后,給出了進(jìn)一步研究方向。

關(guān)鍵詞:中文文本情感分析;SnowNLP;Python;NLP

中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2020)08-0181-03

文本情感研究是計(jì)算機(jī)語言學(xué)、人工智能、機(jī)器學(xué)習(xí)、信息檢索、數(shù)據(jù)挖掘等交叉領(lǐng)域的研究熱點(diǎn),具有高度綜合性和實(shí)用性。文本情感分析就是對(duì)文本的顯性主觀性或隱性關(guān)聯(lián)性信息進(jìn)行分析,讓機(jī)器感受人類的感情從而更深入地理解人類語言,為自然語言處理(NLP)的研究提供有效幫助。而NLP在諸多實(shí)際應(yīng)用如個(gè)性化推薦系統(tǒng)、信息安全過濾系統(tǒng)、網(wǎng)絡(luò)用戶興趣挖掘、網(wǎng)線預(yù)警系統(tǒng)等的決策制定中都有產(chǎn)生帶來巨大的經(jīng)濟(jì)、社會(huì)效益。為此,對(duì)文本情感識(shí)別具有重要的學(xué)術(shù)研究意義及社會(huì)經(jīng)濟(jì)價(jià)值。

1 主要相關(guān)技術(shù)簡(jiǎn)介

1.1 SnowNLP庫

Python有多個(gè)工具庫用于自然語言處理,但絕大多數(shù)是針對(duì)英文的處理。由于中英文的諸多差異,很多庫不能直接拿來使用,要擴(kuò)展也不簡(jiǎn)單。SnowNLP庫是一個(gè)用Python語言編寫的專門處理中文文本的類庫,與其他類庫不同的是它的實(shí)現(xiàn)沒有依靠NLTK,所有算法均是自主實(shí)現(xiàn),且自帶語料庫和情感字典。SnowNLP支持多種中文文本處理操作包括:中文分詞、詞性標(biāo)注、情感分析、文本分類、轉(zhuǎn)換成拼音、繁體轉(zhuǎn)簡(jiǎn)體、提取文本關(guān)鍵詞、提取文本摘要及計(jì)算文本相似度等[1],功能十分全面。

1.2 Selenium爬蟲

傳統(tǒng)的爬蟲通過直接模擬HTTP請(qǐng)求來爬取站點(diǎn)信息,但當(dāng)網(wǎng)絡(luò)爬蟲被濫用后,互聯(lián)網(wǎng)上就出現(xiàn)太多同質(zhì)的東西,原創(chuàng)版權(quán)得不到保護(hù),且傳統(tǒng)的方式和瀏覽器訪問差異比較明顯,當(dāng)前很多網(wǎng)站網(wǎng)頁都有反爬蟲機(jī)制,要想獲取網(wǎng)頁內(nèi)容就沒有那么輕松了。Selenium是自動(dòng)化瀏覽器技術(shù),通過驅(qū)動(dòng)瀏覽器來模擬真實(shí)瀏覽器完成網(wǎng)絡(luò)行為,最終拿到網(wǎng)頁渲染后的信息。整個(gè)過程就如真正的用戶在操作,為此,它用于爬蟲躲避反爬機(jī)制再合適不過。Selenium爬蟲支持多種語言及多種瀏覽器.不用去分析每個(gè)請(qǐng)求的具體參數(shù),比起傳統(tǒng)的爬蟲開發(fā)起來更容易,它唯一的不足是速度慢,如果對(duì)爬蟲的速度沒有要求,那使用Selenium是個(gè)非常不錯(cuò)的選擇。當(dāng)然,在實(shí)際的操作過程中,還會(huì)遇到很多意外,比如,雖然Selenium完全模擬了人工操作,給反爬增加了困難,但如果網(wǎng)站對(duì)請(qǐng)求頻率做限制的話,Selenium同樣會(huì)被封殺,所以通常還得給瀏覽器設(shè)置代理技術(shù)等。

2 SnowNLP庫情感分析

文本情感分析又稱為文本傾向性分析和意見挖掘,是對(duì)帶有情感色彩的主觀性文本進(jìn)行分析、處理、歸納和推理預(yù)測(cè)的過程,其中情感分析還可以細(xì)分為情感極性(傾向)、情感程度及主客觀分析等。一般來說,情感可以從多層次、多角度進(jìn)行分類,中國傳統(tǒng)文化中就有“七情”——好、惡、樂、怒、哀、懼和欲。在實(shí)際的語言應(yīng)用場(chǎng)景中,不能對(duì)一個(gè)文本進(jìn)行一分為兩的劃分,且情感傾向存在極性和強(qiáng)度,不能單純地將情感詞歸為某一類等問題。為此,為了精準(zhǔn)計(jì)算文本情感值,文本情感分析行為應(yīng)該建立在當(dāng)前基準(zhǔn)情感詞典基礎(chǔ)上,關(guān)注文本詞語在不同情感類別中的強(qiáng)度值,計(jì)算出不同語境下詞語情感,進(jìn)而得到文本情感值。當(dāng)然,本文為簡(jiǎn)化處理,暫時(shí)將文本情感劃為兩類,關(guān)于情感極性與強(qiáng)度的衡量問題將作為下一研究階段的重點(diǎn)。

利用SnowNLP庫的文本情感分析的基本流程如下:

(1)自定義爬蟲抓取信息保存至文件。根據(jù)研究需要可抓取不同字段信息保存到不同類型的文件。Selenium爬蟲首先要?jiǎng)?chuàng)建瀏覽器句柄即加載瀏覽器驅(qū)動(dòng),再定位頁面元素來獲取信息文本。

(2)中文分詞、詞性標(biāo)注及可視化顯示關(guān)鍵詞。中文分詞工具也有很多,snowNLP本身能完成,但其準(zhǔn)確率不如Jieba分詞,為此,本次研究采用Jieba完成分詞等工作。為了直觀表現(xiàn)、對(duì)比文本關(guān)鍵詞的重要性,采用WordCloud生成詞云的形式來完成結(jié)果的可視化步驟。

(3)情感計(jì)算,結(jié)果可視化。snowNLP中情感計(jì)算實(shí)現(xiàn)過程很簡(jiǎn)單,只要文本調(diào)用sentiments方法即可,具體使用見實(shí)例。但其實(shí)在sentlments方法中調(diào)用了sentIment下的分類方法,Sentiment對(duì)象首先調(diào)用load方法加載訓(xùn)練好的數(shù)據(jù)字典,然后再調(diào)用classify方法,在classify方法中實(shí)際調(diào)用的是Bayes對(duì)象中的classify方法,具體可查看SnowNLP庫中的sentIment文件夾下的一init_文件等。再運(yùn)用Matplotlib生成情感分?jǐn)?shù)分布柱狀圖和情感波動(dòng)曲線圖來實(shí)現(xiàn)結(jié)果可視化。

(4)結(jié)果評(píng)估。結(jié)果可以使用準(zhǔn)確率、召回率來衡量。召回率用來度量完整性或靈敏度。較高的召回意味著更少的假負(fù),而較低的召回意味著更多的假負(fù)。提高召回率往往就會(huì)降低精確度,兩者往往難以同時(shí)達(dá)到最理想的狀態(tài)。

3 SnowNLP庫情感分析實(shí)例

本研究目的是用SnowNLP庫來分析下豆瓣上書籍的短語文本情感,詳細(xì)過程如下:

(1)獲取評(píng)論文本。其實(shí)無論使用什么方式抓取文本,都要仔細(xì)分析所需信息存在于頁面的哪些標(biāo)簽以及在標(biāo)簽的哪些屬性里。本研究使用Selenium來爬取所需實(shí)驗(yàn)文本,主要抓取的是豆瓣上的關(guān)于《Python編程快速上手》這本書的所有短評(píng)評(píng)論,將所有評(píng)論存儲(chǔ)在txt文本中,同時(shí)也將其他與評(píng)論相關(guān)的字段如評(píng)論用戶名、用戶鏈接、評(píng)論時(shí)間、推薦星數(shù)、評(píng)論等信息一同存儲(chǔ)在csv文件,以備后續(xù)研究所用。部分代碼口1如下所示:

c= open(”book-douban. csv”,”w”,encoding= 'utf-8)#寫文件

writer= csv.writer(c,dialect=(”excel”))#寫入對(duì)象

writer.writerow([”序號(hào)”,”用戶名”,”評(píng)分”,”評(píng)分標(biāo)題”,”有用數(shù)”,”日期”,”評(píng)論”])

driver= webdriver.Firefox0

i=l

while i<20:

url="https://book. douban. com/subject/26836700/comments/hot?p="+ str(i)

driver.get(url)

eleml=driver. find_elements_by_xpath("http://div[@class= 'ava_tar'ya")

elem2= driver.find_elements_by_xpath ("http://span[@class=7 com-ment-info'yspan[ll")

elem3= driver.find_elements_by_xpath ("http://span[@class=7com-ment-vote 7]/span[1n

elem4= driver.find_elements_by_xpath ("http://span[@class=7 com-ment-inf0 7]/span[2]”)

elem5 = driver. find_elements_by_xpath("http://span[@class=7shortT)

tlist=[]

k=( )

while k<20:

num= ia:20+k+1#序號(hào)

name= eleml[k].get_attribute("title")#用戶姓名

score= elem2[k].get_attribute("class")#用戶評(píng)分及內(nèi)容

content= elem2[k].get_attribute("title")

useful= elem3[kl.text#有用數(shù)

date= elem4[k].text#日期

shortcon= elem5[k].text#評(píng)論

templist=[ ]

templist.append(num).append(name).append(score)

templist. append(content). append (useful). append(date). append(shortcon)

writer.writerow(templist)

k=k+l

i=i+1

c.close()

當(dāng)然,在爬取文本信息過程中遇到的相關(guān)問題有:(1)網(wǎng)頁上的用戶名及評(píng)論中出了特殊字符即中文文字以外的一些符號(hào),簡(jiǎn)單解決方案:對(duì)出現(xiàn)特殊字符字段,使用代碼shortcon=shortcon. translate(non_bmp_map)來去掉特殊字符;(2)爬取過程中雖然暫未出現(xiàn)被封殺情況,但豆瓣頁面內(nèi)容本身有折疊隱藏的部分信息,即使代碼正確也無法完全抓取,此時(shí)需要加入異常處理代碼,折疊部分文本需要手動(dòng)收集;(3)評(píng)論文本并不每頁都是同樣的數(shù)量,為此,不能固定每頁爬取的數(shù)量,應(yīng)該靈活計(jì)算。

(2)中文分詞。本研究是采用結(jié)巴分詞方法對(duì)上述評(píng)論文本進(jìn)行分詞,具體代碼在作者的其他論文中可查看。再運(yùn)用WordCloud生成文本分詞后的詞云,核心代碼及詞云圖如下所示:

with open(path+ 'cut_word.txt 7, encoding= 'utf_8) as f.

comment text= f.read( )

color_mask= irnageio.imread(path+"book.jpg")#讀取背景圖片

Stopwords =stopwordslist(" stopword. txt")#添加自定義停用詞表

cloud = WordCloud(font_path= "FZYTK. TTF", back-ground_color= 'white 7,

max words=200, max_font_size=200, min_font_size=4, mask=color_mask,sto pwords=Stopwords)

word_cloud = cloud.generate(comment_text) #產(chǎn)生詞云

irnage_colors = ImageColorGenerator(color_mask)

plt.imshow(cloud.recolor(colorL且mnc=image_c olors》

plt.figure( )

plt.imshow(color_mask, cmap=plt.cm.gray)

plt.axis("off")

plt.show( )

在詞云中,顯示越大的詞越能體現(xiàn)評(píng)論文本的核心思想,可以看到關(guān)于本書的主要講解的是python的基礎(chǔ)知識(shí),適于入門使用,并且也注重編程的訓(xùn)練。

(3)情感分析?;具^程:按行讀取評(píng)論文本,利用循環(huán)每行文本調(diào)用sentiments方法計(jì)算得到每行(條)評(píng)論的情感分?jǐn)?shù)(0-1的一個(gè)值),將其他存入文件。核心代碼[3]如下:

source= open(”comment.txt”,”r”,encoding=”UTF-8”)

line= source.readlines0

scorel=[]#情感分?jǐn)?shù)數(shù)組

i=( )

fori in line:

s=SnowNLP(i)

r=s.sentiments

scorel.append(r)

mpl.rcParams[font.sans-serif']_[SimHei']#顯示中文

matplotlib.rcParams[axes.umcode__ mlnus] =False#顯示負(fù)號(hào)

ph.hist(scorel,np.arange(0,1, 0.01), facecolor=b)

plt.xlabel(”情感分?jǐn)?shù)”)

plt.ylabel(”用戶評(píng)論”)

plt.title(”用戶評(píng)論情感分析柱狀圖”)

plt.show( )

source.close( )

在情感分析的時(shí)候,為了更清晰的判斷情感的極性分類,通??梢詫⑶楦袇^(qū)間從[0,1.0]轉(zhuǎn)換為-0.5,0.5],位于0以上的是積極評(píng)論,反之消極評(píng)論。從上圖可知,柱狀圖直觀展示所有評(píng)論的分?jǐn)?shù)分布情況,曲線圖說明評(píng)論的情感波動(dòng)情況。評(píng)論情感波動(dòng)性較小,大部分評(píng)論情感比較集中、接近。

上述代碼會(huì)從文件中逐行讀取文本進(jìn)行情感分析并輸出最終的結(jié)果。SnowNLP庫中訓(xùn)練好的模型是基于商品的評(píng)論數(shù)據(jù),此次研究就不需要重新訓(xùn)練模型。但它也可用于其他類別文本的情感分析,只不過在實(shí)際使用的過程中,需要根據(jù)自己的情況,重新訓(xùn)練模型。

(4)結(jié)果驗(yàn)證。首先人工標(biāo)記每一條評(píng)論的情感極性——1表示積極評(píng)論,一1表示消極評(píng)論。本次評(píng)論文本情感分析結(jié)果:積極評(píng)論準(zhǔn)確率及召回率分別為0.784和0.978,消極評(píng)論準(zhǔn)確率及召回率分別為0.935和0.507。從結(jié)果可看出:positive類文本被正確識(shí)別的有97.8%的召回率,說明在positive類文本中極少存在識(shí)別錯(cuò)誤的情況,但positive類卻只有78%的準(zhǔn)確率,準(zhǔn)確率有待提升。negative類準(zhǔn)確率達(dá)到93%,這意味著負(fù)類情感識(shí)別十分精準(zhǔn),但召回率卻只有50%,說明存在很多負(fù)類情感文本被錯(cuò)誤地分類。對(duì)于負(fù)類文本來說,由于中文的博大精深,通常在使用語境中用負(fù)面詞匯來表達(dá)正面評(píng)價(jià),如“不是很好”。當(dāng)然,中文也存在很多中性詞或極性強(qiáng)度根據(jù)語境決定的詞匯,但分類器卻只能將詞匯情感一分為二。

4 結(jié)論

本文完成了使用snowNLP庫進(jìn)行文本情感的分析,總結(jié)如下:第一、語料庫十分關(guān)鍵,如果構(gòu)建了精準(zhǔn)的類別語料庫來替換默認(rèn)語料庫,準(zhǔn)確率可能更高;第二、情感分析通常需要與評(píng)論的具體時(shí)間段結(jié)合起來,這樣就能在特定的場(chǎng)合發(fā)揮情感分析更多的應(yīng)用,比如輿情預(yù)測(cè)預(yù)警等[3];第三、情感分析經(jīng)常不應(yīng)該一分為二地劃分兩個(gè)不相干的集合,因?yàn)樵~語在不同語境會(huì)產(chǎn)生不同的情感極性或強(qiáng)度,這樣會(huì)降低情感分析的準(zhǔn)確性。相關(guān)問題將作為后續(xù)研究進(jìn)行。

參考文獻(xiàn):

[1] zhiyong_will.情感分析一深入snownlp原理和實(shí)踐[EB/OL].https://blog. csdn. net/google19890102/article/details/8009 1502.2018.6.

[2] Eastmount.基于SnowNLP的豆瓣評(píng)論情感分析[EB/OL].https://blog.csdn.net/E astmount/article/details/85 118 81 8.2018, 12.

[3]王樹義,廖樺濤,吳查科.基于情感分類的競(jìng)爭(zhēng)企業(yè)新聞文本主題挖掘[J].數(shù)據(jù)分析與知識(shí)發(fā)現(xiàn),2018,2(3):70-78.

【通聯(lián)編輯:代影】

收稿日期:2019-12-11

基金項(xiàng)目:2017年度江西省教育廳科學(xué)技術(shù)研究項(xiàng)目青年項(xiàng)目:基于Python NLP庫的中文文本情感識(shí)別研究(編號(hào):GJJ171193)

作者簡(jiǎn)介:曾小芹(1986-),女,江西人,講師,碩士,主要研究方向?yàn)榇髷?shù)據(jù)及其處理等。

猜你喜歡
爬蟲分詞瀏覽器
利用網(wǎng)絡(luò)爬蟲技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
結(jié)巴分詞在詞云中的應(yīng)用
反瀏覽器指紋追蹤
電子制作(2019年10期)2019-06-17 11:45:14
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
值得重視的分詞的特殊用法
環(huán)球?yàn)g覽器
再見,那些年我們嘲笑過的IE瀏覽器
高考分詞作狀語考點(diǎn)歸納與疑難解析
基隆市| 玉树县| 安福县| 潞城市| 民和| 龙胜| 舞阳县| 大关县| 潮安县| 新巴尔虎左旗| 高青县| 施甸县| 乐安县| 应城市| 都江堰市| 汾西县| 阳曲县| 定州市| 乌兰浩特市| 元谋县| 九龙县| 温宿县| 晋州市| 中宁县| 保亭| 镇康县| 驻马店市| 白城市| 丁青县| 绥芬河市| 贵德县| 旌德县| 巴彦淖尔市| 察隅县| 海林市| 石门县| 望都县| 朔州市| 肃北| 五家渠市| 临漳县|