当前位置:   article > 正文

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

语料标注

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

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

 

语料及词性标注

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

 

常见的中文词性编码

 

词性标注的分类

 

词性标注的方法

NLTK

Jieba (中文)

 

NLTK

  1. import nltk
  2. from nltk import data
  3. text = nltk.word_tokenize("And now for something completely different")
  4. print(text)
  5. print(nltk.pos_tag(text))

Jieba

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

  1. import jieba.posseg as pseg
  2. words = pseg.cut('我爱北京天安门')
  3. for word,flag in words:
  4. 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

  1. from sklearn.feature_extraction.text import TfidfTransformer
  2. from sklearn.feature_extraction.text import CountVectorizer
  3. #语料
  4. corpus = ["I come to China to travel",
  5. "This is a car popular in China",
  6. "I love tea and Apple",
  7. "The work is to write some papers in science"]
  8. vectorizer = CountVectorizer() #将文本中的词语转换为词频矩阵。
  9. transformer = TfidfTransformer() #TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值
  10. tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus)) #fit_transform函数计算各个词语出现的次数
  11. print(tfidf)

 


NLTK可以用TF-IDF

  1. import nltk
  2. from nltk.text import TextCollection
  3. sents = ['this is sentence one', 'this is sentence two', 'this is sentence three']
  4. corpus = TextCollection(sents)
  5. #计算tf
  6. print(corpus.tf('three', nltk.word_tokenize('one two three, go')))
  7. #0.2 # 1/5
  8. #之前上面已将全部的语料库fit进corpus去,计算 idf 只需传递要计算的 word 即可:
  9. #计算idf
  10. print(corpus.idf('this'))
  11. #0.0 # log(3/3)
  12. print(corpus.idf('three'))
  13. #1.0986122886681098 # log(3/1)
  14. #计算tf-idf
  15. print(corpus.tf_idf('three', nltk.word_tokenize('one two three, go')))
  16. #0.21972245773362198 # 0.2 * 1.0986122886681098

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/371852?site
推荐阅读
相关标签
  

闽ICP备14008679号