Nltk
from nltk.corpus import brown
(1) brown.categories() 该文件下的文章目录
(2) len(brown.sents())
(3) len(brown.words())
tokenizer 分词
nltk.tokenize(sentence)
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