NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF

通常,NLP无法一下子处理完整的段落或句子,因此,第一步往往是分句和分词

分词的话,对于英语句子,可以使用NLTK中的word_tokenize函数,对于中文句子,则可使用jieba模块

 

语料及词性标注

词性标注就是给每个词打上词类标签,如形容词、动词、名词等

 

常见的中文词性编码

 

词性标注的分类

 

词性标注的方法

NLTK

Jieba (中文)

 

NLTK

import nltk
from nltk import data

text = nltk.word_tokenize("And now for something completely different")

print(text)
print(nltk.pos_tag(text))

Jieba

只要你想做中文的分词,jieba分词肯定要用到,不用怀疑

import jieba.posseg as pseg

words = pseg.cut('我爱北京天安门')

for word,flag in words:
	print('%s %s'%(word, flag))

 

 

分词

把句子切分成词

 

分词难点

①分词标准

②切分歧义

切分歧义是由于分词细粒度不同造成的

或者这个句子本身就真正存在歧义

③新词

分词工具也要更新迭代

 

分词的算法

①基于词典的分词算法

②基于统计的分词算法

 

TF-IDF

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术

TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)。

TF-IDF实际上就是:TF * IDF

 

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类

 

 

TF-IDF的计算

 

 

TF-IDF的作用

提取文本向量的特征

 

TF-IDF也有缺点

用词频来衡量文章中一个词的重要性不够全面

因为有些关键词可能就出现几次,但是对文章来说其重要性却是非常大的

 

sklearn可以用TF-IDF

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

#语料
corpus = ["I come to China to travel",
          "This is a car popular in China",
          "I love tea and Apple",
          "The work is to write some papers in science"]

vectorizer = CountVectorizer() #将文本中的词语转换为词频矩阵。
transformer = TfidfTransformer() #TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值

tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  #fit_transform函数计算各个词语出现的次数

print(tfidf)

 


NLTK可以用TF-IDF

import nltk
from nltk.text import TextCollection

sents = ['this is sentence one', 'this is sentence two', 'this is sentence three']
corpus = TextCollection(sents)

#计算tf
print(corpus.tf('three', nltk.word_tokenize('one two three, go')))
#0.2			# 1/5

#之前上面已将全部的语料库fit进corpus去,计算 idf 只需传递要计算的 word 即可:
#计算idf
print(corpus.idf('this'))
#0.0			# log(3/3)
print(corpus.idf('three'))
#1.0986122886681098		# log(3/1)

#计算tf-idf
print(corpus.tf_idf('three', nltk.word_tokenize('one two three, go')))
#0.21972245773362198		# 0.2 * 1.0986122886681098

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值