想用R和Python做文本挖掘又不知如何下手?方法來了!
作者 | Karlijn Willems
編譯團(tuán)隊(duì) | 饒蓁蓁,Mirra,apple黃卓君
文本挖掘應(yīng)用領(lǐng)域無比廣泛,可以與電影臺本、歌詞、聊天記錄等產(chǎn)生奇妙的化學(xué)反應(yīng),電影對白、歌詞和聊天記錄等文本中往往藏著各種有趣的故事。想要開始文本挖掘,但是使用的教程過于復(fù)雜 ?找不到一個合適的數(shù)據(jù)集?這篇文章將會引導(dǎo)你學(xué)習(xí)8個技巧和訣竅,希望能夠激勵你開始文本挖掘的進(jìn)程并且保持興趣。
1. 對文章產(chǎn)生好奇
在數(shù)據(jù)科學(xué)中,幾乎做所有事情的第一步都是產(chǎn)生好奇,文本挖掘也不例外。
文本挖掘應(yīng)用領(lǐng)域無比廣泛,可以與電影臺本、歌詞、聊天記錄等產(chǎn)生奇妙的化學(xué)反應(yīng):如南方公園的對話,電影對白的文本挖掘和分析等也都是受到了文本挖掘的啟發(fā);近期大數(shù)據(jù)文摘相關(guān)文章《從戀愛到婚后的短信詞頻圖發(fā)生了這些變化,你中了幾槍?》帶各位分析了聊天記錄中隱藏的文本信息;而對各類歌詞的文本信息分析,也頗有意思。(點(diǎn)擊查看《這四十年來的香港歌壇在唱些什么》、《分析了42萬字的歌詞,為了搞清楚民謠歌手們在唱些什么》)
當(dāng)然,你也可以像StackOverflow的數(shù)據(jù)科學(xué)家David Robinson一樣對社交網(wǎng)絡(luò)上的文本產(chǎn)生興趣。他在幾個星期前他的博客中對于川普的推特?cái)?shù)據(jù)產(chǎn)生了好奇:“我看到一個假設(shè)……僅僅需要對數(shù)據(jù)進(jìn)行調(diào)查”。
每一個非雙曲線的推文是從蘋果手機(jī)(他的工作人員)發(fā)送的。每一個雙曲線推文是從Android手機(jī)(從他本人)手機(jī)發(fā)送的。pic.twitter.com/gwr6d8h5ed
——Todd Vaziri(@ tvaziri 2016年8月6日) |
也許,如果你對驗(yàn)證假設(shè)不是那么感興趣,那你可能覺得文字圖云非常炫酷,并且自己也想嘗試創(chuàng)造這種文字圖云。
2. 獲得你需要的知識和技能
當(dāng)你產(chǎn)生了好奇,就到了時(shí)間來設(shè)計(jì)你的游戲,并開始展開對文本挖掘知識和技能的學(xué)習(xí)。你可以輕松地通過完成一些教程和課程來做到這一點(diǎn)。
在這些課程中你應(yīng)該注意的是:他們給你介紹的數(shù)據(jù)科學(xué)工作流程中至少需要有以下一些步驟,如數(shù)據(jù)準(zhǔn)備或預(yù)處理、數(shù)據(jù)探索、數(shù)據(jù)分析等。
數(shù)據(jù)大本營為那些正在準(zhǔn)備開始文本挖掘的人準(zhǔn)備了一些材料:近日,泰德Kwartler寫了一篇關(guān)于谷歌趨勢和雅虎股票服務(wù)的文本挖掘數(shù)據(jù)教程。這種易于遵循的R教程,可以讓你一邊實(shí)際操作一邊學(xué)習(xí)文本挖掘,這對于文本挖掘的的初學(xué)者來說是一個很好的開始。
此外,Ted Kwartler也是數(shù)據(jù)大本營R課程 “文本挖掘:詞袋”的講師,這門課會向你介紹各種分析方法和數(shù)據(jù)可視化的內(nèi)容,讓你通過文本挖掘技術(shù)對實(shí)際生活案例進(jìn)行操作和研究。
另一方面,你也會有一些不僅限于R的其他材料。如果想學(xué)習(xí)Python,你可以看看以下這些教程和/或課程:用Python進(jìn)行文本分析,或者你也可以瀏覽這個介紹Kaggle的教程。
3. 詞,詞,詞 - 尋找你的數(shù)據(jù)
一旦你勾勒出了你需要分析和可視化數(shù)據(jù)數(shù)據(jù)的基本概念,就是時(shí)候去尋找數(shù)據(jù)了!
請相信我們當(dāng)我們告訴你,有很多方法可以讓你得到你想要的數(shù)據(jù)。除了提到過的谷歌趨勢和雅虎,你也可以從以下方式訪問數(shù)據(jù):
- 推特! R和Python的提供包或庫,將允許你連接到Twitter的API和檢索推文。你將在下一節(jié)了解更多關(guān)于這部分的內(nèi)容。
- 互聯(lián)網(wǎng)檔案館,是一個非營利性的圖書館。囊括了數(shù)以百萬計(jì)的免費(fèi)圖書、電影、軟件、音樂、網(wǎng)站等。
- Gutenberg計(jì)劃提供超過55,000本免費(fèi)電子書。這些電子書大多數(shù)都跟文學(xué)有關(guān),因此如果你想要分析莎士比亞,簡·奧斯汀,愛倫坡的作品,這將是一個很好的來源。
- 對于學(xué)術(shù)方法類的文本挖掘,你可以使用JSTOR的數(shù)據(jù)研究。這是一個免費(fèi)的自助服務(wù)工具,讓計(jì)算機(jī)科學(xué)家、數(shù)字人文主義者和其他研究人員選擇和JSTOR的內(nèi)容進(jìn)行互動。
- 如果你正在尋找做文本挖掘的系列或電影,就像是上面給出的例子,你可能要考慮下載字幕。一個簡單的谷歌搜索絕對可以為你提供你需要的內(nèi)容,從而形成自己的語料庫開始文本挖掘。你也可以從corpora語料庫得到你的數(shù)據(jù)。眾所周知的兩個語料庫的是:路透社語料庫和布朗語料庫。
- 路透社語料庫。有人會說路透社語料庫不是最多樣化的語料庫使用,但是如果你剛開始學(xué)做文本挖掘,它還是非常不錯的。
- 布朗語料庫是按流派分類的文本,包括了500個資源。
正如你所看到的,尋找數(shù)據(jù)有無窮的可能性。所有包含文本的資源都可以成為你文本挖掘案例研究的課題。
4. 尋找合適的工具來完成工作
現(xiàn)在你已經(jīng)發(fā)現(xiàn)了你的數(shù)據(jù)來源,你可能要使用合適的工具,讓他們成為你的所有物,并對其進(jìn)行分析。 這些你跟著學(xué)習(xí)的教程和課程將會教給你使用一些工具作為開始。 但是,這取決于你跟進(jìn)的課程或教程,你可能會錯過一些其他資料。要想完整的學(xué)習(xí)挖掘技術(shù),下面將介紹一些R中用于文本挖掘的軟件包: tm包,毫無疑問,是R在文本挖掘中最常用的包。這個包通常用于更多特定的軟件包,例如像Twitter的包,您可以使用從Twitter網(wǎng)站提取的推文和追隨者。 用R進(jìn)行網(wǎng)絡(luò)爬蟲,你應(yīng)該使用rvest庫。有關(guān)使用rvest的一個簡短的教程,去這里。 如果使用Python,你可以使用這些庫: 自然語言工具包,包含在NLTK包中。因?yàn)槟愫苋菀撰@得超過50個語料庫和詞匯資源,這個包是非常有用的。你可以看到這個頁面上的這些列表。
如果你想挖掘Twitter數(shù)據(jù),你有很多數(shù)據(jù)包的選擇。其中一個使用的比較多的是Tweepy包。對于Web爬蟲,scrapy包就會派上用場提取你的網(wǎng)站需要的數(shù)據(jù)。也可以考慮使用urllib2的,一包打開的URLs。但是,有時(shí)requests包會更加推薦,它甚至可能使用起來更方便。有人說,它“更加人性化”,因?yàn)橐恍┲T如,設(shè)置用戶代理,并請求一個頁面只有一行的代碼的事情,他使用起來更方便。你有時(shí)會看到一些人推薦urllib包,但urlib包似乎不是太流行的:大多數(shù)開發(fā)人員會推薦他們覺得特別有用和使用過的一到兩個包。
5. 好的開始是成功的一半 — 預(yù)處理你的數(shù)據(jù)
當(dāng)我告訴你數(shù)據(jù)科學(xué)家用他們80%的時(shí)間來清洗數(shù)據(jù),你可能不會驚訝。在這件事上,文本挖掘也不會例外。文本數(shù)據(jù)可以很雜亂,所以你應(yīng)該確保你花了足夠的時(shí)間來清洗它。如果你不確定預(yù)處理你的數(shù)據(jù)意味著什么,那一些標(biāo)準(zhǔn)的預(yù)處理步驟包括:抽取文本和結(jié)構(gòu),這樣就可以有你想要處理的文本格式了;去掉停用詞,比如“that” 或者“and”;詞干提取。這個可以借助于詞典或者語言學(xué)的規(guī)則/算法,比如Porter算法。這些步驟看起來很難,不過預(yù)處理你的數(shù)據(jù)并不需要嚴(yán)格這樣做。因?yàn)榇蠖鄶?shù)時(shí)候,我們前面提到的庫和軟件包已經(jīng)可以幫到你很多了。比如說R語言的tm庫里的內(nèi)置函數(shù)可以幫你做一些預(yù)處理工作,像是詞干提取,去掉停用詞,刪除空格,把單詞轉(zhuǎn)換成小寫等等。
類似地,Python的nltk包的內(nèi)置函數(shù)也可以幫你做許多預(yù)處理工作。不過,你仍然可以將數(shù)據(jù)預(yù)處理再進(jìn)一步,比如用正則表達(dá)式來提取一些你感興趣的文本模式。這樣,你也可以加快數(shù)據(jù)清洗的過程。對于Python,你可以用re庫。對于R,有一堆的函數(shù)可以幫到你,比如grep()返回pattern的匹配項(xiàng)的下標(biāo), grepl()返回pattern是否匹配的邏輯值, regexpr()和gregexpr()返回的結(jié)果包含了匹配的具體位置和字符串長度信息, sub()和gsub()返回替換之后的文本, strsplit()可以拆分字符串。
6. 數(shù)據(jù)科學(xué)家的漫游奇境記 — 探索你的數(shù)據(jù)
現(xiàn)在,你將迫不及待地開始分析你的數(shù)據(jù)。不過,在你開始之前,看一看你的數(shù)據(jù)總是一個不錯的主意。借助于上面提到的庫或包,可以幫你快速開始探索數(shù)據(jù)的幾點(diǎn)想法:創(chuàng)建一個“文檔字詞矩陣”:這個矩陣中的元素,代表在語料庫的某個文檔中某個字詞(一個單詞或者連續(xù)出現(xiàn)的n個單詞“n-gram”)出現(xiàn)的頻率;建好這個矩陣之后,你就可以用一個直方圖來可視化你的語料庫中的字詞頻率。你也許還對語料庫中的兩個或多個字詞的關(guān)聯(lián)感興趣;可視化你得語料庫,你可以做一個文字云(word cloud)。在R中,你可以使用wordcloud庫。在Python里也有這個包,一樣的名字。
7. 提高你的文本挖掘技能
當(dāng)你用前面提到的工具對你的數(shù)據(jù)做了預(yù)處理和一些基本的文本分析之后,你可能會想用你的數(shù)據(jù)集來拓寬你的文本挖掘技術(shù)。因?yàn)槲谋就诰蚣夹g(shù)真的有很多很多,而你現(xiàn)在只看到了冰山之一角。首先,你應(yīng)該想著去探索一下文本挖掘和自然語言處理(Natural Language Processing, NLP)之間有什么不同。有了NLP,你會發(fā)現(xiàn)命名實(shí)體識別(Named Entity Recognition),詞性標(biāo)注與解析(Part-Of-Speech Tagger & Parse),文本情感分析…等等技術(shù)。對于Python,你可以用nltk包。
除了這些包,你可以在深度學(xué)習(xí)和主題模型(比如隱含狄利克雷分布LDA)等方法中找到更多工具。下面列出了一些你可以使用的包:Python包[趙文2] :詞嵌入模型(word2vec)可以用gensim包,還有GloVe包。如果想要更深入了解深度學(xué)習(xí),你該看看theano包。最后,如果你想用LDA,可以用gensim包。R語言包:詞嵌入可以用text2vec。如果你對文本情感分析感興趣,可以用syuzhet加tm。topicmodels非常適合主題模型。這些包,還遠(yuǎn)不能囊括所有。因?yàn)槲谋就诰蚴莻€大熱門,近年的成果還有許多等待你去發(fā)現(xiàn),而且它還會繼續(xù)熱下去,比如用于多媒體挖掘,多語言文本挖掘等等。
8. 不只是單詞 — 可視化你的結(jié)果
別忘了傳達(dá)你的分析結(jié)果!
視覺呈現(xiàn)會更吸引人。你的可視化就是你要講的故事。所以別遲疑,把你分析的結(jié)果或者關(guān)系可視化出來吧。Python和R都有專門的軟件包來幫你做這件事。用這些專門的數(shù)據(jù)可視化庫來呈現(xiàn)你的結(jié)果吧:對于Python,你可以用NetworkX來可視化復(fù)雜的網(wǎng)絡(luò)。不過matplotlib在可視化其它數(shù)據(jù)時(shí)也很方便。還有plotly,也很方便,可以在線制作交互式、達(dá)到出版質(zhì)量的圖片。對于那些數(shù)據(jù)可視化的熱情粉絲們的一點(diǎn)建議:試著把Python和JavaScript的D3庫聯(lián)系起來,后者可以進(jìn)行動態(tài)的數(shù)據(jù)操控和可視化,讓你觀眾成為數(shù)據(jù)可視化過程里的活躍參與者。
對于R語言,除了這些你已經(jīng)知道的庫,比如總是很好用的ggplot2,你還可以用igraph庫來分析社交網(wǎng)站上關(guān)注、被關(guān)注和轉(zhuǎn)發(fā)之間的關(guān)系。你還想要更多?試著查看一下plotly和networkD3庫,來把R和JavaScript或LDAvis庫鏈接到交互式可視化模型中去。 用DataCamp來開始你的文本挖掘之旅吧 !
原文:https://www.datacamp.com/community/blog/text-mining-in-r-and-python-tips#gs.AwiKxRk
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】