自然语言处理:使用NLTK库进行文本分析

Python的NLTK(Natural Language Toolkit)库为语言处理提供了强大的工具和资源。本学习笔记将通过一个实际的例子,介绍如何使用NLTK进行基本的文本分析任务。

# 导入NLTK库的必要组件

import nltk
from nltk.tokenize import word_tokenize    # 分词
from nltk.corpus import stopwords          # 获取停用词列表
from nltk import pos_tag                   # 进行词性标注
from nltk.chunk import RegexpChunkParser   # 创建正则表达式分块解析器
from nltk import ne_chunk                  # 命名实体识别
# 分析的文本字符串
mystring = 'Its informal conversational style would make interaction comfortable, and yet the machine would remain slightly unpredictable and therefore interesting.'

# 对文本进行分词处理
tokens = word_tokenize(mystring)

# 将分词结果转换为小写,以便统一处理
tokens = [word.lower() for word in tokens]

# 将分词结果转换为集合,以去除重复的词汇
tokens_set = set(tokens)

# 过滤掉分词结果中的停用词
filtered_words = [w for w in tokens_set if(w not in stopwords.words('english'))]

# 对过滤后的词汇进行词性标注
tags = pos_tag(filtered_words)

此时tags为下面的列表:

[('remain', 'NN'),
 ('.', '.'),
 ('slightly', 'RB'),
 ('informal', 'JJ'),
 ('yet', 'RB'),
 ('would', 'MD'),
 ('interaction', 'VB'),
 ('conversational', 'JJ'),
 ('style', 'NN'),
 ('machine', 'NN'),
 ('interesting', 'VBG'),
 ('unpredictable', 'JJ'),
 (',', ','),
 ('therefore', 'RB'),
 ('make', 'VBP'),
 ('comfortable', 'JJ')]

各个词性的含义参照下表:

'''
NN: 名词 (Noun)
NNS: 复数名词 (Noun, plural)
NNP: 专有名词 (Proper noun, singular)
NNPS: 复数专有名词 (Proper noun, plural)
PRP: 人称代词 (Personal pronoun)
PRP$: 物主代词 (Possessive pronoun)
RB: 副词 (Adverb)
RBR: 比较级副词 (Adverb, comparative)
RBS: 最高级副词 (Adverb, superlative)
VB: 动词原形 (Verb, base form)
VBD: 动词过去式 (Verb, past tense)
VBG: 现在分词 (Verb, gerund or present participle)
VBN: 过去分词 (Verb, past participle)
VBP: 动词非第三人称单数现在时 (Verb, non-3rd person singular present)
VBZ: 动词第三人称单数现在时 (Verb, 3rd person singular present)
JJ: 形容词 (Adjective)
JJR: 比较级形容词 (Adjective, comparative)
JJS: 最高级形容词 (Adjective, superlative)
DT: 限定词 (Determiner)
CC: 连词 (Coordinating conjunction)
IN: 介词或从属连词 (Preposition or subordinating conjunction)
MD: 情态动词 (Modal)
CD: 基数 (Cardinal number)
EX: 存在量词 (Existential there)
FW: 外来词 (Foreign word)
POS: 所有格结束词 (Possessive ending)
RP: 小品词 (Particle)
SYM: 符号 (Symbol)
TO: "to" 作为介词或不定式标记 (to)
WDT: wh-限定词 (Wh-determiner)
WP: wh-代词 (Wh-pronoun)
WP$: wh-物主代词 (Possessive wh-pronoun)
WRB: wh-副词 (Wh-adverb)
'''
# 定义句子结构的语法规则
grammar = "NP: {<DT>?<JJ>*<NN>}"

# 创建一个句子对象,用于解析
sentence = nltk.sent_tokenize(mystring)[0]

# 使用上面定义的语法规则,创建一个正则表达式分块解析器
cp = nltk.RegexpParser(grammar)

# 解析句子,生成一个树结构
result = cp.parse(tags)

# 打印解析结果
print(result)

# 绘制树结构
result.draw()

绘制出来的树:

# 进行命名实体识别的另一个示例
sentence = 'Ada went to Wuhan University today'

# 打印命名实体识别的结果
print(ne_chunk(pos_tag(word_tokenize(sentence))))

结果:

(S
  (PERSON Ada/NNP)
  went/VBD
  to/TO
  (PERSON Wuhan/NNP University/NNP)
  today/NN)

spaCy库也有类似的功能,且识别更准确,可参考另一篇文章:自然语言处理:Python的spaCy库及文章人名统计

NLTK作为一个功能强大的语言处理工具,为我们提供了探索语言的丰富资源和方法。随着技术的深入,我们期待解锁更多自然语言处理的秘密,开启语言和计算机之间更深层次的交流。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值