nltk包的安装以及使用

1.安装nltk和其book数据包

1.安装nltk包

终端命令,激活环境,安装nltk包

conda activate myenv

conda install nltk

2.安装nltk的book数据包

1.在线下载

impotr nltk nlkt.download() # 会报错

2.手动下载,离线安装

github:GitHub - nltk/nltk_data: NLTK Data

gitee:nltk_data: NLTK Data - Gitee.com

点击克隆/下载,下载压缩包

 解压缩后,将文件夹里的packages文件夹重命名为nltk_data

 

查找nltk的搜索路径

nltk.find('.')

将前面重命名后的文件夹nltk_data移动到任意一个上面的路径下,如果安装好后,再次输入上述代码,结果只会显示你的安装路径。

验证是否安装成功:

python 
from nltk.book import *

2.测试

1.分词

安装成功后,测试一下使用

import nltk
ret = nltk.word_tokenize("A pivot is the pin or the central point on which something balances or turns") 
print(ret)

显示找不到punkt,punkt应该再nltk_data文件下的

发现是zip压缩包,解压缩后,就成功了。

C:\Users\Admin\AppData\Roaming\nltk_data\tokenizers

2.wordnet词库测试

WordNet是一个在20世纪80年代由Princeton大学的著名认知心理学家George Miller团队构建的一个大型的英文词汇数据库。名词、动词、形容词和副词以同义词集合(synsets)的形式存储在这个数据库中。

import nltk
nltk.download('wordnet')
from nltk.corpus import wordnet as wn

from nltk.corpus import brown
print(brown.words())

3.使用

1.分词分句(Tokenization)

英文分句:nltk.sent_tokenize :对文本按照句子进行分割

英文分词:nltk.word_tokenize:将句子按照单词进行分隔,返回一个列表

from nltk.tokenize import sent_tokenize, word_tokenize

s = "Alzheimer's disease is not a preventable condition. However, a number of lifestyle risk factors can be modified."
sent_tokens = sent_tokenize(s)  # 获得所有分句句子
sent_length = len(sent_tokens)  # 获得段落句子数量
print('句子总数为:', sent_length)
print(sent_tokens)
word_tokens = word_tokenize(s)  # 获取所有分词词语
word_length = len(word_tokens)  # 获得段落的单词数量
print('单词总数为:', word_length)
print(word_tokens)

2.停用词过滤

停止词:nltk.corpus的 stopwords:查看英文中的停止词表。

定义了一个过滤英文停用词的函数,将文本中的词汇归一化处理为小写并提取。从停用词语料库中提取出英语停用词,将文本进行区分。

from nltk.tokenize import sent_tokenize, word_tokenize  # 导入 分句、分词模块
from nltk.corpus import stopwords  # 导入停止词模块


def remove_stopwords(text):
    text_lower = [w.lower() for w in text if w.isalpha()]
    stopword_set = set(stopwords.words('english'))
    result = [w for w in text_lower if w not in stopword_set]
    return result


s = "Repeat statements and questions over and over.Forget conversations, appointments or events.Misplace items, often putting them in places that don't make sense.Get lost in places they used to know well.Eventually forget the names of family members and everyday objects.Have trouble finding the right words for objects, expressing thoughts or taking part in conversations."
word_tokens = word_tokenize(s)
print(remove_stopwords(word_tokens))

3.词干提取(stemming)

https://zhuanlan.zhihu.com/p/376097952

Stemming 是抽取词的词干或词根形式(不一定能够表达完整语义)。NLTK中提供了三种最常用的词干提取器接口: Porter stemmer, Lancaster Stemmer 和 Snowball Stemmer。

PorterStemmer

基于Porter词干提取算法,该算法用于替换和消除英文单词中的一些众所周知的后缀。

LancasterStemmer

基于Lancaster 词干提取算法,该算法同样可以替换和消除英文单词中的的后缀,Lancaster 词干提取算法在 Porter 词干提取算法之上涉及更多不同情感词的使用。

SnowballStemmer

基于Snowball 词干提取算法,该算法使用RegexpStemmer 类构建词干提取器,通过接收一个字符串,并在找到其匹配的单词时删除该单词的前缀或后缀。

from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer

s = ["maximum", "presumably", "multiply", "provision", "owed"]
# PorterStemmer-------------------------------------
print("PorterStemmer提取器")
porter_stemmer = PorterStemmer()
for word in s:
    print(porter_stemmer.stem(word), end=' ')
print()
# LancasterStemmer -------------------------------------
print("LancasterStemmer 提取器")
lancaster_stemmer = LancasterStemmer('')
for word in s:
    print(lancaster_stemmer.stem(word), end=' ')
print()
# SnowballStemmer -------------------------------------
print("SnowballStemmer 提取器")
snowball_stemmer = SnowballStemmer('english')
for word in s:
    print(snowball_stemmer.stem(word), end=' ')

4.词形、词干恢复

与词干提取类似,词干提取包含被创造出的不存在的词汇,而词形还原的是实际的词汇。

lemmatize接受词性参数pos。 如果没有提供,默认是“名词”。

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

print(lemmatizer.lemmatize("cats"))
print(lemmatizer.lemmatize("cacti"))  # 仙人掌cactus的复数
print(lemmatizer.lemmatize("geese"))
print(lemmatizer.lemmatize("rocks"))
print(lemmatizer.lemmatize("python"))
print(lemmatizer.lemmatize("better", pos="a"))
print(lemmatizer.lemmatize("best", pos="a"))
# pos参数默认n,即名词
print(lemmatizer.lemmatize("finding"))
print(lemmatizer.lemmatize("finding", 'v'))

5.wordnet的使用

https://www.cnblogs.com/Xiaoyan-Li/p/13477253.html

https://www.cnblogs.com/qq874455953/p/10792575.html

from nltk.corpus import wordnet as wn

# 单词寻找同义词集
print("单词寻找同义词集" + "-" * 10)
syns = wn.synsets("car", pos=wn.NOUN)
print(syns)
# 其中,"car.n.01"表示car在名词中的第一个含义。

# 查看同义词集的定义
print("查看同义词集的定义" + "-" * 10)
for synset in wn.synsets("car"):
    print(synset, synset.definition())

# 查询同义词集里第一个词义的使用示例
print("查询同义词集里第一个词义的使用示例" + "-" * 10)
print(syns[0].examples())
print(wn.synset('car.n.01').examples())

# 一个含义可能对应了多个单词,因而可以找到含义对应的多个词条(lemma,某含义所对应的具体一个单词)
# 查询一个同义词集中的所有词
print("查询一个同义词集中的所有词" + "-" * 10)
print(syns[0].lemma_names())
# 输出词集和词的配对——词条(lemma)
print('输出词集和词的配对——词条(lemma)' + '-' * 10)
print(syns[0].lemmas())
print(syns[0].lemmas()[1].name())
# 利用词条查询反义词
print("利用词条查询反义词" + '-' * 10)
good = wn.synsets('good', pos=wn.ADJ)
print(good[0].lemmas()[0].antonyms())
from nltk.corpus import wordnet as wn

# 对于名词,WordNet认为词集(含义)之间呈树形结构,因而词集有上位词与下位词
print("名词的上位词和下位词" + "-" * 10)
dog = wn.synset('dog.n.01')  # 创建词集对象
print("上位词集(父类)")
print(dog.hypernyms())
print("下位词(子类)")
print(dog.hyponyms())

# WordNet提供了两个词集之间的相似度(0~1,越大相似度越高)
print("名词的两个词集之间的相似度" + '-' * 10)
cat = wn.synset("cat.n.01")
print("dog和cat词集之间的相似度为:", dog.path_similarity(cat))
# 查看两个词集的最低公共祖先
print("dog和cat词集的最低公共祖先为:", dog.lowest_common_hypernyms(cat))
# 由于名词和动词都被组织成了明确的层次式分类体系
# 而形容词和副词没有
# 所以只有名词和动词可以使用path_similarity
# 形容词和副词只能使用similar tos查看关系
beautiful = wn.synset('beautiful.a.01')
print("beautiful的关系", beautiful.similar_tos())

# 对于动词,词之间的关系主要表现为蕴含关系
print("动词之间的蕴含关系" + "-" * 10)
walk = wn.synset("walk.v.01")
print("walk蕴含动词", walk.entailments())

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qyqyqyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值