当前位置:   article > 正文

自然语言处理类问题的一般流程--1_attempted to load taggers/averaged_perceptron_tagg

attempted to load taggers/averaged_perceptron_tagger/averaged_perceptron_tag

自然语言处理类问题的一般流程

  1. 处理方法

Tokenize
将长句分成短句:中文和英文有区别
中文有启发式&机器学习/统计方法(HMM,CRF)

英文直接用word_tokenize就可以了:

import nltk
sentence = 'hello,world!'
tokens = nltk.word_tokenize(sentence)
print(tokens)
  • 1
  • 2
  • 3
  • 4

runfile(‘E:/机器学习/untitled0.py’, wdir=‘E:/机器学习’)
[‘hello’, ‘,’, ‘world’, ‘!’]

中文用jieba这样一个包

import jieba
#全模式
seg_list1 = jieba.cut("我来自北京科技大学",cut_all = True)
print("Full Mode:","/".join(seg_list1))

#精确模式,不会重复,该是多长就是多长
seg_list2 = jieba.cut("我来自北京科技大学",cut_all = False)
print("Default Mode:","/".join(seg_list2))
#默认是精确模式

#搜索引擎模式
seg_list3 = jieba.cut_for_search("小明毕业于中国科学院计算所,后在日本京都大学深造")
print(",".join(seg_list3))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Full Mode: 我/来自/北京/北京科技大学/科技/大学
Default Mode: 我/来自/北京科技大学
小明,毕业,于,中国,科学,学院,科学院,中国科学院,计算,计算所,,,后,在,日本,京都,大学,日本京都大学,深造

关于符号类表情
用正则化表达式,将“:)”笑脸整个作为一个词
关于时态类的次
Stemming方法:

from nltk.stem.porter import PorterStemmer
p = PorterStemmer()
print(p.stem('go'))
print(p.stem('going'))
  • 1
  • 2
  • 3
  • 4

go
go
除了PorterStemmer这种算法还有LancasterStemmer,SnowballStemmer等算法用来处理时态,词根的问题

from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
print(wordnet_lemmatizer.lemmatize('dogs'))
  • 1
  • 2
  • 3

解决不同词性意思不同的问题
标注词性,说明是名词还是动词

print(wordnet_lemmatizer.lemmatize('are'))
print(wordnet_lemmatizer.lemmatize('is'))

print(wordnet_lemmatizer.lemmatize('are',pos = 'v'))
print(wordnet_lemmatizer.lemmatize('is',pos = 'v'))
  • 1
  • 2
  • 3
  • 4
  • 5

指定为动词之后,就都变成了be动词
are
is
be
be

pos Tag标注
能够用一个算法看每一个词的词性

#pos Tag标注
import nltk
text = nltk.word_tokenize('what does the fox say')
print(text)
print(nltk.pos_tag(text))
  • 1
  • 2
  • 3
  • 4
  • 5

[‘what’, ‘does’, ‘the’, ‘fox’, ‘say’]
[(‘what’, ‘WDT’), (‘does’, ‘VBZ’), (‘the’, ‘DT’), (‘fox’, ‘NNS’), (‘say’, ‘VBP’)]

有可能会报错:
Please use the NLTK Downloader to obtain the resource:

import nltk
nltk.download(‘averaged_perceptron_tagger’)

Attempted to load taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle
原因是nltk语料库里缺少veraged_perceptron_tagger.pickle这个pickle文件,按照上面的语句下载,会将缺少的文件自动下载到语料库里tagger的文件夹下

Stopwords

#stopwords
#拿到一个文档,先token,得到一个word_list,这里假设word_list已经得到
import nltk
word_list = nltk.word_tokenize('I can speak English very well')
#然后把word_list再filter一把
from nltk.corpus import stopwords
filtered_words = [word for word in word_list if word not in stopwords.words('english')]
print(filtered_words)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

[‘I’, ‘speak’, ‘English’, ‘well’]

这里先把一句话tokenize了,成一个word_list,然后对它filter一下,过滤掉停止词(即一些对文本意思没有关系的词),这里很显然把can,very这样一些没有意义的小词去掉了

  1. 文本预处理过程
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/344376
推荐阅读
相关标签
  

闽ICP备14008679号