目录
一.使用NLTK库遇到的问题
我在前文的使用中遇到了以下的问题,以此记录解决办法并学习相应知识。
# 下载停用词资源
import nltknltk.download('stopwords')
报错如下:
二.解决办法之一
1. 参考提示
https://www.nltk.org/data.html
这个链接很好,很喜欢这种报错了会提示你去哪里找答案的方式。里面写的很清楚,稍微动点脑袋的我找到了解决办法。我采用的是手动下载后加入到机器,由于我前面执行过安装nltk且成功安装,所以我一直在找nltk_data在我机器上的路径,耗费了不少时间,这里是个踩坑点。通过该链接中的一句话,让我反应过来了,当我没找到时我可以在以下目录自己创建一个。
2. 下载资源
http://www.nltk.org/nltk_data/
先去下载需要的资源,解压后放到Searched in里面的任意一个路径下,比如我需要的是stopwords,然后设置的路径如下:
/usr/share/nltk_data/corpora/stopwords
由于需要使用到其他功能,所以我准备安装所有资源,该地址可下载所有资源:https://github.com/nltk/nltk_data
安装所有资源时,报了如下错,网上也有人有该问题,做下记录,
原因是punkt_tab这个是压缩包,解压缩就好了。还会遇到类似的问题的举一反三。
3. 验证一下成功与否
三.补下理论知识
-
NLTK简介
NLTK是Natural Language Toolkit缩写,是自然语言处理的一款流行的工具包,可以用来完成各种自然语言处理的任务,包括词汇处理,文本分类,分词,语言标准化等。
2.基本功能
文本处理:处理文本的工具,如分词、词性标注、分块、词干提取等。
语料库:包含了多个已标注的语料库,用于训练和评估模型。
词汇资源:大量词汇资源,包括同义词词典、反义词词典等。
语言学工具:各种语言学工具,如条件频率分布、语言模型等。
机器学习:用于构建和训练自然语言处理的机器学习模型,如文本分类、情感分析、命名实体识别等。
3.使用示例
3.1分词
分词是文本分析的第一步,它把文本段落分解为较小的实体(如单词或者句子),每一个实体叫做一个Token。NLTK能够实现句子切分和单词切分两种功能。
句子切分:
from nltk.tokenize import sent_tokenize
text = "Hello Mr. Smith, how are you doing today? The weather is great, and city is awesome. The sky is pinkish-blue. You shouldn't eat cardboard."
tokenized_text = sent_tokenize(text)
print(tokenized_text)
单词切分:
from nltk.tokenize import word_tokenize
sent = "I am always happy this time"
token = word_tokenize(sent)
print(token)
3.2.词性标注
词性标注是将每个单词标注为对应的词性。NLTK提供了预训练的词性标注器。
from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
text = "I am a beautiful girl"
tokens = word_tokenize(text)
pos_tags = pos_tag(tokens)
print(pos_tags)
PRP是“人称代词”(Personal Pronoun)的缩写。是英语词性中的一种。
3.3.命名实体识别
命名实体识别是识别文本中具有特定意义的实体,如人名、地名、组织名等。
from nltk.chunk import ne_chunk
from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
sentence = "Apple is a computer company based in Cupertino, California."
tokens = word_tokenize(sentence)
tags = pos_tag(tokens)
entities = ne_chunk(tags, binary=False)
for entity in entities:
if hasattr(entity, 'label'):
print(entity.label, ' '.join(word for word, tag in entity))
3.4.频率分布
频率分布可以统计文本中各单词出现次数。
from nltk import FreqDist
from nltk.tokenize import word_tokenize
text = "I am a beautiful girl and I enjoy eating delicious food"
tokens = word_tokenize(text)
fdist = FreqDist(tokens)
print(fdist.most_common(5))
3.5.停用词过滤
停用词是文本中的噪音单词,没有任何意义,如“is”、“am”、“are”等。NLTK的语料库中有一个停用词列表,可以从切词列表中把停用词去掉。
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
text = "I am a beautiful girl"
tokens = word_tokenize(text)
stop_words = set(stopwords.words('english'))
filtered_tokens = [w for w in tokens if not w.lower() in stop_words]
print(filtered_tokens)
3.6.词形还原
词形还原是将单词还原为其基本形式,如将“running”还原为“run”。
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
words = ['cars', 'men', 'running', 'ate', 'saddest', 'fancier']
pos_tags = ['n', 'n', 'v', 'v', 'a', 'a']
for word, pos in zip(words, pos_tags):
print(word, '--', pos, '-->', wnl.lemmatize(word, pos))
参考:https://www.nltk.org/api/nltk.html#
四. 个人闲话
既然遇到问题,那么就想办法解决问题,顺便开阔自己的眼界以及补充基础理论知识,所以有问题是好事情。虽然它会消耗一定的时间,但是在查找资料和分析资料,寻找解决办法的过程中能接触到不少自己缺失的知识面,这也是帮助快速成长的一种良好的途径。
本文仅为个人学习使用所写。
标签:word,遇到,解决方案,pos,NLTK,tokens,tokenize,import,nltk From: https://blog.csdn.net/sx52013/article/details/143876931