word2Vec--(1) nltk實現簡單的切詞,情感分析,文本相似度(TF-IDF)

Nltk

 

from nltk.corpus import brown

(1)    brown.categories()  該文件下的文章目錄

(2)    len(brown.sents())

(3)    len(brown.words())

 

tokenizer  分詞

nltk.tokenize(sentence)

 

okenize:返回詞語在原文的起止位置

注意,輸入參數只接受 unicode

In [12]:
print "這是默認模式的tokenize"
result = jieba.tokenize(u'自然語言處理非常有用')
for tk in result:
    print("%s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

print "\n-----------我是神奇的分割線------------\n"

print "這是搜索模式的tokenize"
result = jieba.tokenize(u'自然語言處理非常有用', mode='search')
for tk in result:
    print("%s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
這是默認模式的tokenize
自然語言		 start: 0 		 end:4
處理		 start: 4 		 end:6
非常		 start: 6 		 end:8
有用		 start: 8 		 end:10

-----------我是神奇的分割線------------

這是搜索模式的tokenize
自然		 start: 0 		 end:2
語言		 start: 2 		 end:4
自然語言		 start: 0 		 end:4
處理		 start: 4 		 end:6
非常		 start: 6 		 end:8
有用		 start: 8 		 end:10

結巴分詞   三種切詞模式

Import jieba

Jieba.cut(‘開官方那個’,cut_all=True)  # 全模式

Jieba.cut(‘開官方那個’,cut_all=False)  # 精確模式

print "Full Mode:", "/".join(seg_list)

seg_list = jieba.cut_for_search("⼩小明碩⼠士畢業於中國科學院計算所")# 搜索引擎模式

print ", ".join(seg_list)

 

正則表達

Import re

regex_str = [
    r'<[^>]+>', # HTML tags
    r'(?:@[\w_]+)', # @
某⼈人
    r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)",# 話題標籤
    r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&amp;+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+',
    # URLs

]

tokens_re = re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE)  #冗長的,
emoticon_re = re.compile(r'^'+emoticons_str+'$', re.VERBOSE | re.IGNORECASE)

tokens_re.findall(s)

 

例子:

 

import re

tweet = 'RT @angelababy: love you baby! :Dhttp://ah.love #168cm'

regex_str = [

   r'<[^>]+>', # HTML tags

   r'(?:@\w+)', # @某⼈人

   r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)", # 話題標籤

   r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&amp;+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+',#URLs

]

tokens_re =re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE)

print(tokens_re.findall(tweet))

print(tokens_re.search(tweet))

 

Stemming 詞幹提取。Walking變成 walk

Lemmatization詞性歸一  went變成 go

 

 

from nltk.stem.porter import PorterStemmer

porter_stemmer = PorterStemmer()

porter_stemmer.stem(‘presumably’)  輸出u’presum’

 

from nltk.stem import WordNetLemmatizer

wordnet_lemmatizer = WordNetLemmatizer()

wordnet_lemmatizer.lemmatize(‘dogs’)   輸出:‘u’dog’

 

lemmatizer 能輸出該詞爲名詞或者動詞這些功能。

pos_tag:    也能標註詞性

 

text = nltk.word_tokenize('what does thefox say')

nltk.pos_tag(text)

輸出結果:

[('what', 'WDT'), ('does', 'VBZ'), ('the','DT'), ('fox', 'NNS'), ('say', 'VBP')]

 

去除一些不必要的結尾詞。

from nltk.corpus import stopwords

filtered_words =

[word for word in word_list if word not instopwords.words('english')]

 

 

 

情感分析:NaiveBayesClassifier

文本相似度:

元素頻率FreqDist

                   通過FreqDist(類似一個字典),查看元素出現的次數。

fdist = FreqDist(tokens)
# 它就類似於⼀一個DicT
print(fdist['is']) 

                            #  此刻, 我們可以把最常⽤用的50個單詞拿出來

standard_freq_vector = fdist.most_common(50)

size = len(standard_freq_vector)

print(standard_freq_vector)

       文本分類:

  TF: Term Frequency, 衡量term檔中出現得有多頻繁。

TF(t) = (t出現在檔中的次數) / (檔中的term總數).

IDF: Inverse DocumentFrequency, 衡量term有多重要。

有些詞出現的很多,但是明顯不是很有卵如’is',’the‘,’and‘之類

的。爲了平衡,我們把罕見的詞的重要性(weight)搞

把常見詞的重要性搞低。

IDF(t) = log_e(檔總數/含有t檔總數).

TF-IDF = TF * IDF

解釋TF-IDF的小例子:

檔有100個單詞,其中單詞baby出現了3次。

那麼,TF(baby) = (3/100) = 0.03.

好,現在我們如果有10M檔,baby出現在其中的1000檔中。

那麼,IDF(baby) = log(10,000,000 / 1,000)= 4

所以, TF-IDF(baby) = TF(baby) * IDF(baby)= 0.03 * 4 = 0.12

Nltk 如何實現tf-idf

from nltk.text importTextCollection

 

發佈了24 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章