Nltk
from nltk.corpus import brown
(1) brown.categories() 該文件下的文章目錄
(2) len(brown.sents())
(3) len(brown.words())
tokenizer 分詞
nltk.tokenize(sentence)
okenize:返回詞語在原文的起止位置
注意,輸入參數只接受 unicode
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]))
結巴分詞 三種切詞模式
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]|[$-_@.&+]|[!*\(\),]|(?:%[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]|[$-_@.&+]|[!*\(\),]|(?:%[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