文本挖掘也稱為文本分析抱慌,文本挖掘是探索大量文本數(shù)據(jù)并查找模式的過程蜂莉,我們將學(xué)習(xí)NLTK這個(gè)包,他功能強(qiáng)大,提供了一組多種自然語言算法。讓我們一起來看看吧~
首先酥夭,要在你的電腦安裝它:pip install nltk
第二步,我們要把文本分句脊奋,也叫tokenization~
比如說熬北,我們有一句話:“Hello Mr. Charles, how are you? Where are you now? OK, I will meet you in Shenzhen!”
上面這句話,我們可以看到他有三句~分別是:
Hello Mr. Charles, how are you???
Where are you now??
OK, I will meet you in Shenzhen!
我們可以用NLTK這個(gè)包把他分成三句~ 我們會(huì)用到sent_tokenize( ) 這個(gè)方法诚隙,示例如下:
除了分開句子讶隐,分開詞我們也是可以做到的~用到的是word_tokenize ( )
然后呢,我們就來進(jìn)行詞頻統(tǒng)計(jì)(Frequency Distribution)~
用到的是FreqDist( ) 這個(gè)方法
如果我們要看久又,最常見的巫延,就用.most_common(), 后面的括號(hào)代表最常見的top 幾,如果是5地消,就是top 5 炉峰,如下圖,我們就能看到脉执,排在前面的是you疼阔,逗號(hào),are适瓦,問號(hào)竿开。其中,you出現(xiàn)了3次玻熙,逗號(hào)否彩,are,問號(hào)出現(xiàn)兩次嗦随。
然后我們可以用matplotlib畫出一個(gè)圖列荔,來展示詞頻。
補(bǔ)充:分詞常用方法(摘抄)
這些對(duì)象均來自nltk.tokenize庫
1. word_tokenize
導(dǎo)入nltk的tokenize庫后枚尼,tokens = nltk.word_tokenize(sentence)語句進(jìn)行分詞操作贴浙,sentence為待處理的字符串。返回一個(gè)列表署恍。
該方法要求被處理的字符串本身各個(gè)詞語之間有空格崎溃,能處理如don't, they'll等縮寫詞的情況。
2. TweetTokenizer
Twitter-aware盯质,按空格進(jìn)行分詞袁串,同時(shí)針對(duì)推文一些特性,去除@用戶名呼巷,保留表情等一些特殊符號(hào)囱修。
分兩種:
(1)不帶參數(shù)token=TweetTokenizer().tokenize(sentence)處理王悍。
輸入"This is a coooool #dummysmiley: :-) :-P <3 and some arrows < > -> <--"
輸出['This', 'is', 'a', 'cooool', '#dummysmiley', ':', ':-)', ':-P', '<3', 'and', 'some', 'arrows', '<', '>', '->', '<--']能夠拆分無效用的標(biāo)點(diǎn)符號(hào)破镰。
(2)帶參數(shù)token = TweetTokenizer(strip_handles=True, reduce_len = True).
輸入@remy: This is waaaaayyyy too much for you!!!!!!
輸出[':', 'This', 'is', 'waaayyy', 'too', 'much', 'for', 'you', '!', '!', '!']
當(dāng)一個(gè)詞中相同字符連續(xù)出現(xiàn)3次以上压储,就只保留3個(gè)鲜漩。設(shè)置strip_handles = True會(huì)刪去@xxx。
3. MWETokenizer
tokenizer = MWETokenizer([('a', 'little'), ('a', 'little', 'bit'), ('a', 'lot')])
輸入tokenizer.tokenize('In a litte or a litte bit or a lot in spite of'.split()); tokenizer.add_mwe(('in', 'spite', 'of'))
輸出['In', 'a_little', 'or', 'a_little_bit', 'or', 'a_lot', 'in_spite_of']
該方法可對(duì)已經(jīng)先保留的一些短語渠脉,或者組合宇整,進(jìn)行重組(對(duì)一些專有詞可以先進(jìn)行保留,如F-16芋膘,最后重組已保留-)鳞青。
4. RegexpTokenizer(https://www.runoob.com/regexp/regexp-syntax.html)
使用到正則表達(dá)式進(jìn)行分詞,如對(duì)一些金錢表示或者其他非空白序列。
tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')
輸入"Good muffins cost $3.88\n in New York. Please buy me\n two of?them.\n\n Thanks."
輸出['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York', '.',?'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
5. StanfordTokenizer
按空格進(jìn)行分詞为朋,對(duì)于$4.28之類的臂拓,將符號(hào)與數(shù)字分開。
輸入“Good muffins cost $3.88\n in New York. Please buy me\n two of them.\n Thanks."
輸出['Good', 'muffins', 'cost', '$', '3.88', 'in', 'New', 'York', '.', 'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']