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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值