閱讀188 返回首頁    go 技術社區[雲棲]


想用R和Python做文本挖掘又不知如何下手?方法來了!


0?wx_fmt=jpeg

1、對文章產生好奇


在數據科學中,幾乎做所有事情的第一步都是產生好奇,文本挖掘也不例外。

文本挖掘應用領域無比廣泛,可以與電影台本、歌詞、聊天記錄等產生奇妙的化學反應:如南方公園的對話,電影對白的文本挖掘和分析等也都是受到了文本挖掘的啟發;近期大數據文摘相關文章《從戀愛到婚後的短信詞頻圖發生了這些變化,你中了幾槍?》帶各位分析了聊天記錄中隱藏的文本信息;而對各類歌詞的文本信息分析,也頗有意思。(點擊查看《這四十年來的香港歌壇在唱些什麼》、《分析了42萬字的歌詞,為了搞清楚民謠歌手們在唱些什麼》)

當然,你也可以像StackOverflow的數據科學家David Robinson一樣對社交網絡上的文本產生興趣。他在幾個星期前他的博客中對於川普的推特數據產生了好奇:“我看到一個假設……僅僅需要對數據進行調查”。

0?wx_fmt=png

每一個非雙曲線的推文是從蘋果手機(他的工作人員)發送的。每一個雙曲線推文是從Android手機(從他本人)手機發送的。pic.twitter.com/gwr6d8h5ed

——Todd Vaziri(@ tvaziri  2016年8月6日)


也許,如果你對驗證假設不是那麼感興趣,那你可能覺得文字圖雲非常炫酷,並且自己也想嚐試創造這種文字圖雲。 

0?wx_fmt=png


2、獲得你需要的知識和技能


當你產生了好奇,就到了時間來設計你的遊戲,並開始展開對文本挖掘知識和技能的學習。你可以輕鬆地通過完成一些教程和課程來做到這一點。

在這些課程中你應該注意的是:他們給你介紹的數據科學工作流程中至少需要有以下一些步驟,如數據準備或預處理、數據探索、數據分析等。

數據大本營為那些正在準備開始文本挖掘的人準備了一些材料:近日,泰德Kwartler寫了一篇關於穀歌趨勢和雅虎股票服務的文本挖掘數據教程。這種易於遵循的R教程,可以讓你一邊實際操作一邊學習文本挖掘,這對於文本挖掘的的初學者來說是一個很好的開始。

此外,Ted Kwartler也是數據大本營R課程 “文本挖掘:詞袋”的講師,這門課會向你介紹各種分析方法和數據可視化的內容,讓你通過文本挖掘技術對實際生活案例進行操作和研究。

另一方麵,你也會有一些不僅限於R的其他材料。如果想學習Python,你可以看看以下這些教程和/或課程:用Python進行文本分析,或者你也可以瀏覽這個介紹Kaggle的教程。

你是否對其他的教程資源更感興趣呢?可以去數據大本營中的了解數據科學 - Python&R的教程! 

—— 閱讀更多:https://scl.io/j3NDHnuN#gs.W_xHH_I


0?wx_fmt=jpeg


3,詞,詞,詞 - 尋找你的數據


一旦你勾勒出了你需要分析和可視化數據數據的基本概念,就是時候去尋找數據了!

請相信我們當我們告訴你,有很多方法可以讓你得到你想要的數據。除了提到過的穀歌趨勢和雅虎,你也可以從以下方式訪問數據:

  •  推特! R和Python的提供包或庫,將允許你連接到Twitter的API和檢索推文。你將在下一節了解更多關於這部分的內容。

  • 互聯網檔案館,是一個非營利性的圖書館。囊括了數以百萬計的免費圖書、電影、軟件、音樂、網站等。

  •  Gutenberg計劃提供超過55,000本免費電子書。這些電子書大多數都跟文學有關,因此如果你想要分析莎士比亞,簡·奧斯汀,愛倫坡的作品,這將是一個很好的來源。

  • 對於學術方法類的文本挖掘,你可以使用JSTOR的數據研究。這是一個免費的自助服務工具,讓計算機科學家、數字人文主義者和其他研究人員選擇和JSTOR的內容進行互動。

  • 如果你正在尋找做文本挖掘的係列或電影,就像是上麵給出的例子,你可能要考慮下載字幕。一個簡單的穀歌搜索絕對可以為你提供你需要的內容,從而形成自己的語料庫開始文本挖掘。你也可以從corpora語料庫得到你的數據。眾所周知的兩個語料庫的是:路透社語料庫和布朗語料庫。

  • 路透社語料庫。有人會說路透社語料庫不是最多樣化的語料庫使用,但是如果你剛開始學做文本挖掘,它還是非常不錯的。

  • 布朗語料庫是按流派分類的文本,包括了500個資源。

正如你所看到的,尋找數據有無窮的可能性。所有包含文本的資源都可以成為你文本挖掘案例研究的課題。

—— 閱讀更多在:https://scl.io/j3NDHnuN#gs.s_ufJHQ


4.尋找合適的工具來完成工作


現在你已經發現了你的數據來源,你可能要使用合適的工具,讓他們成為你的所有物,並對其進行分析。 這些你跟著學習的教程和課程將會教給你使用一些工具作為開始。 但是,這取決於你跟進的課程或教程,你可能會錯過一些其他資料。要想完整的學習挖掘技術,下麵將介紹一些R中用於文本挖掘的軟件包: tm包,毫無疑問,是R在文本挖掘中最常用的包。這個包通常用於更多特定的軟件包,例如像Twitter的包,您可以使用從Twitter網站提取的推文和追隨者。 用R進行網絡爬蟲,你應該使用rvest庫。有關使用rvest的一個簡短的教程,去這裏。 如果使用Python,你可以使用這些庫: 自然語言工具包,包含在NLTK包中。因為你很容易獲得超過50個語料庫和詞匯資源,這個包是非常有用的。你可以看到這個頁麵上的這些列表。 

如果你想挖掘Twitter數據,你有很多數據包的選擇。其中一個使用的比較多的是Tweepy包。對於Web爬蟲,scrapy包就會派上用場提取你的網站需要的數據。也可以考慮使用urllib2的,一包打開的URLs。但是,有時requests包會更加推薦,它甚至可能使用起來更方便。有人說,它“更加人性化”,因為一些諸如,設置用戶代理,並請求一個頁麵隻有一行的代碼的事情,他使用起來更方便。你有時會看到一些人推薦urllib包,但urlib包似乎不是太流行的:大多數開發人員會推薦他們覺得特別有用和使用過的一到兩個包。 

——閱讀更多在:https://scl.io/j3NDHnuN#gs.s_ufJHQ


5. 好的開始是成功的一半 — 預處理你的數據


當我告訴你數據科學家用他們80%的時間來清洗數據,你可能不會驚訝。在這件事上,文本挖掘也不會例外。文本數據可以很雜亂,所以你應該確保你花了足夠的時間來清洗它。如果你不確定預處理你的數據意味著什麼,那一些標準的預處理步驟包括:抽取文本和結構,這樣就可以有你想要處理的文本格式了;去掉停用詞,比如“that” 或者“and”;詞幹提取。這個可以借助於詞典或者語言學的規則/算法,比如Porter算法。這些步驟看起來很難,不過預處理你的數據並不需要嚴格這樣做。因為大多數時候,我們前麵提到的庫和軟件包已經可以幫到你很多了。比如說R語言的tm庫裏的內置函數可以幫你做一些預處理工作,像是詞幹提取,去掉停用詞,刪除空格,把單詞轉換成小寫等等。

類似地,Python的nltk包的內置函數也可以幫你做許多預處理工作。不過,你仍然可以將數據預處理再進一步,比如用正則表達式來提取一些你感興趣的文本模式。這樣,你也可以加快數據清洗的過程。對於Python,你可以用re庫。對於R,有一堆的函數可以幫到你,比如grep()返回pattern的匹配項的下標, grepl()返回pattern是否匹配的邏輯值, regexpr()和gregexpr()返回的結果包含了匹配的具體位置和字符串長度信息, sub()和gsub()返回替換之後的文本, strsplit()可以拆分字符串。如果你想了解更多這些R中的函數和正則表達式,你可以查看這個頁麵:

https://www.rdocumentation.org/packages/base/versions/3.3.1/topics/regex


6.數據科學家的漫遊奇境記 — 探索你的數據

現在,你將迫不及待地開始分析你的數據。不過,在你開始之前,看一看你的數據總是一個不錯的主意。借助於上麵提到的庫或包,可以幫你快速開始探索數據的幾點想法:創建一個“文檔字詞矩陣”:這個矩陣中的元素,代表在語料庫的某個文檔中某個字詞(一個單詞或者連續出現的n個單詞“n-gram”)出現的頻率;建好這個矩陣之後,你就可以用一個直方圖來可視化你的語料庫中的字詞頻率。你也許還對語料庫中的兩個或多個字詞的關聯感興趣;可視化你得語料庫,你可以做一個文字雲(word cloud)。在R中,你可以使用wordcloud庫。在Python裏也有這個包,一樣的名字。  

0?wx_fmt=gif


7.提高你的文本挖掘技能


當你用前麵提到的工具對你的數據做了預處理和一些基本的文本分析之後,你可能會想用你的數據集來拓寬你的文本挖掘技術。因為文本挖掘技術真的有很多很多,而你現在隻看到了冰山之一角。首先,你應該想著去探索一下文本挖掘和自然語言處理(Natural Language Processing, NLP)之間有什麼不同。R中的許多NLP庫可以在這裏找到:https://www.rdocumentation.org/taskviews#NaturalLanguageProcessing     有了NLP,你會發現命名實體識別(Named Entity Recognition),詞性標注與解析(Part-Of-Speech Tagger & Parse),文本情感分析…等等技術。對於Python,你可以用nltk包。完整的nltk文本情感分析手冊可以在這裏找到:https://streamhacker.com/2010/05/10/text-classification-sentiment-analysis-naive-bayes-classifier/

除了這些包,你可以在深度學習和主題模型(比如隱含狄利克雷分布LDA)等方法中找到更多工具。下麵列出了一些你可以使用的包:Python包[趙文2] :詞嵌入模型(word2vec)可以用gensim包,還有GloVe包。如果想要更深入了解深度學習,你該看看theano包。最後,如果你想用LDA,可以用gensim包。R語言包:詞嵌入可以用text2vec。如果你對文本情感分析感興趣,可以用syuzhet加tm。topicmodels非常適合主題模型。這些包,還遠不能囊括所有。因為文本挖掘是個大熱門,近年的成果還有許多等待你去發現,而且它還會繼續熱下去,比如用於多媒體挖掘,多語言文本挖掘等等。 


8.不隻是單詞 — 可視化你的結果


別忘了傳達你的分析結果!

視覺呈現會更吸引人。你的可視化就是你要講的故事。所以別遲疑,把你分析的結果或者關係可視化出來吧。Python和R都有專門的軟件包來幫你做這件事。用這些專門的數據可視化庫來呈現你的結果吧:對於Python,你可以用NetworkX來可視化複雜的網絡。不過matplotlib在可視化其它數據時也很方便。還有plotly,也很方便,可以在線製作交互式、達到出版質量的圖片。對於那些數據可視化的熱情粉絲們的一點建議:試著把Python和JavaScript的D3庫聯係起來,後者可以進行動態的數據操控和可視化,讓你觀眾成為數據可視化過程裏的活躍參與者。

對於R語言,除了這些你已經知道的庫,比如總是很好用的ggplot2,你還可以用igraph庫來分析社交網站上關注、被關注和轉發之間的關係。你還想要更多?試著查看一下plotly和networkD3庫,來把R和JavaScript或LDAvis庫鏈接到交互式可視化模型中去。 用DataCamp來開始你的文本挖掘之旅吧 !

原文發布時間為:2017-03-02

本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-05-23 17:02:46

  上一篇:go  Request、Request.Params、Request.QueryString、Request.form的區別
  下一篇:go  並發工具類(三)控製並發線程數的Semaphore