• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python的商品評論文本情感分析

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

      曾小芹 余宏

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

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

      中圖分類號:TP3 文獻標識碼:A

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

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

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

      1.1 SnowNLP庫

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

      1.2 Selenium爬蟲

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

      2 SnowNLP庫情感分析

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

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

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

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

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

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

      3 SnowNLP庫情感分析實例

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

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

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

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

      writer.writerow([”序號”,”用戶名”,”評分”,”評分標題”,”有用數(shù)”,”日期”,”評論”])

      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#序號

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

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

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

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

      date= elem4[k].text#日期

      shortcon= elem5[k].text#評論

      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()

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

      (2)中文分詞。本研究是采用結(jié)巴分詞方法對上述評論文本進行分詞,具體代碼在作者的其他論文中可查看。再運用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)評論文本的核心思想,可以看到關(guān)于本書的主要講解的是python的基礎(chǔ)知識,適于入門使用,并且也注重編程的訓練。

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

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

      line= source.readlines0

      scorel=[]#情感分數(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#顯示負號

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

      plt.xlabel(”情感分數(shù)”)

      plt.ylabel(”用戶評論”)

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

      plt.show( )

      source.close( )

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

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

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

      4 結(jié)論

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

      參考文獻:

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

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

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

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

      收稿日期:2019-12-11

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

      作者簡介:曾小芹(1986-),女,江西人,講師,碩士,主要研究方向為大數(shù)據(jù)及其處理等。

      猜你喜歡
      爬蟲分詞瀏覽器
      利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
      基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
      結(jié)巴分詞在詞云中的應(yīng)用
      智富時代(2019年6期)2019-07-24 10:33:16
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      值得重視的分詞的特殊用法
      環(huán)球瀏覽器
      再見,那些年我們嘲笑過的IE瀏覽器
      英語學習(2015年6期)2016-01-30 00:37:23
      高考分詞作狀語考點歸納與疑難解析
      玛多县| 海林市| 全南县| 海安县| 准格尔旗| 璧山县| 故城县| 白河县| 茌平县| 玛沁县| 迁安市| 潜江市| 齐齐哈尔市| 海晏县| 绥宁县| 治多县| 平塘县| 延边| 分宜县| 白玉县| 台东市| 黑龙江省| 凭祥市| 苏尼特左旗| 泾川县| 元江| 闸北区| 洞口县| 滦平县| 常山县| 十堰市| 奉贤区| 道孚县| 华池县| 图木舒克市| 石楼县| 霍城县| 镇巴县| 临汾市| 大同市| 青浦区|