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

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

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

 

语料及词性标注

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

 

常见的中文词性编码

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第1张图片

 

词性标注的分类

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第2张图片

 

词性标注的方法

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))

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第3张图片

 

 

分词

把句子切分成词

 

分词难点

①分词标准

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第4张图片

②切分歧义

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

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第5张图片

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

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第6张图片

③新词

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第7张图片

分词工具也要更新迭代

 

分词的算法

①基于词典的分词算法

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第8张图片

②基于统计的分词算法

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第9张图片

 

TF-IDF

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

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

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

 

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

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

 

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第10张图片

 

TF-IDF的计算

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第11张图片

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第12张图片

 

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第13张图片

 

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)

NLP自然语言处理(二)—— 语料及词性标注 & 分词 & TFIDF_第14张图片

 


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

 

 

 

 

 

你可能感兴趣的:(NLP,自然语言处理,TF-IDF,分词,语料)