python NLTK快速入门

目录

  1. NLTK简介
  2. 安装NLTK
  3. 主要模块及用法
    • 词汇与语料库
    • 分词与词性标注
    • 句法分析
    • 情感分析
    • 文本分类
  4. 综合实例:简单的文本分析项目
  5. 总结

1. NLTK简介

NLTK(Natural Language Toolkit)是一个强大的Python库,专门用于自然语言处理(NLP)任务,常用于文本分析、语言数据处理和机器学习。NLTK包含丰富的语料库和词汇资源,还提供了众多分析工具。

2. 安装NLTK

在Python环境下,您可以用以下命令来安装NLTK:

pip install nltk

之后,运行下面代码来下载NLTK的语料库(语料库包含了大量预训练的文本数据):

import nltk

nltk.download('all')


3. 主要模块及用法

3.1 词汇与语料库

NLTK 提供了许多内置的语料库和词典,可以帮助我们更好地分析文本。

from nltk.corpus import gutenberg # 获取《爱丽丝梦游仙境》前100个字符 
text = gutenberg.raw('carroll-alice.txt') 
print(text[:100])

讲解:这里我们使用 gutenberg 语料库,它包含了很多经典书籍的文本。我们选择了《爱丽丝梦游仙境》并打印了前100个字符。

3.2 分词与词性标注

在自然语言处理中,分词(Tokenization)和词性标注(POS Tagging)是常见的基础操作。

分词示例

from nltk.tokenize import word_tokenize text = "NLTK makes it easy to work with text data." tokens = word_tokenize(text) print(tokens)

讲解word_tokenize 函数会将一句话分割成一个个词语。这里我们输入了一段文字,输出结果是按词语切分的一个列表。

词性标注示例

from nltk import pos_tag 
tokens = word_tokenize("The quick brown fox jumps over the lazy dog.") 
tagged = pos_tag(tokens) 
print(tagged)

讲解pos_tag 函数会将分好的词语标注上词性(如名词、动词等),输出的是一个包含词语及其词性标注的元组列表。

3.3 句法分析

NLTK 提供了句法分析工具,可以帮助我们解析句子的语法结构。

示例

from nltk import CFG 
from nltk.parse import RecursiveDescentParser # 定义简单的语法 
grammar = CFG.fromstring(""" S -> NP VP NP -> Det N VP -> V NP Det -> 'the' N -> 'cat' | 'dog' V -> 'chases' """) parser = RecursiveDescentParser(grammar) 
sentence = "the cat chases the dog".split() 
for tree in parser.parse(sentence): print(tree)

讲解:这里我们定义了一个简单的上下文无关语法(CFG)来解析句子结构,然后使用 RecursiveDescentParser进行解析。

3.4 情感分析

情感分析是自然语言处理中非常常见的任务,用来分析文本的情感(如积极、消极等)。

示例

from nltk.sentiment import SentimentIntensityAnalyzer sia = SentimentIntensityAnalyzer() 
text = "I love programming!" 
sentiment = sia.polarity_scores(text) 
print(sentiment)

讲解SentimentIntensityAnalyzer 会给出一个情感分数,输出包含正面、负面、客观及总体评分。

3.5 文本分类

NLTK也提供了文本分类的基本工具,可以帮助我们训练模型进行文本分类。

示例

import random
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import movie_reviews# 数据处理:随机打乱文档列表
documents = [(list(movie_reviews.words(fileid)), category)for category in movie_reviews.categories()for fileid in movie_reviews.fileids(category)
]
random.shuffle(documents)  # 随机打乱顺序,以避免偏差# 特征提取:将单词作为特征
def document_features(words):return {word: True for word in words}# 准备训练集
train_set = [(document_features(d), c) for (d, c) in documents]# 训练分类器:使用前100个文档进行训练
classifier = NaiveBayesClassifier.train(train_set[:100])# 测试分类
test_words = ["love", "wonderful", "amazing"]
print("测试句子:", test_words)
print("分类结果:", classifier.classify(document_features(test_words)))# 显示分类器的性能
print("\n分类器的特征:")
classifier.show_most_informative_features(5)

讲解:这里我们使用了贝叶斯分类器(Naive Bayes),并使用影评数据集对其进行训练,最终用“love”、“wonderful”等词进行分类测试。


4. 综合实例:简单的文本分析项目

结合以上知识点,我们可以进行一个简单的文本分析小项目。

示例:分析电影影评的情感倾向

from nltk.classify import NaiveBayesClassifier
from nltk.corpus import movie_reviews# 数据处理
documents = [(list(movie_reviews.words(fileid)), category)for category in movie_reviews.categories()for fileid in movie_reviews.fileids(category)
]# 特征提取
def document_features(words):return {word: True for word in words}# 训练分类器
train_set = [(document_features(d), c) for (d, c) in documents]
classifier = NaiveBayesClassifier.train(train_set[:100])# 测试分类
print(classifier.classify(document_features(["love", "wonderful", "amazing"])))

讲解:这里我们用影评数据集,并结合情感分析器进行影评倾向判断。通过遍历所有影评,统计正面和负面影评的数量。


5. 总结

通过以上步骤,您已经掌握了 NLTK 的核心用法,包括分词、词性标注、句法分析、情感分析和文本分类等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程

青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程 课题摘要:一、UDP编程1. 创建UDP连接(服务器和客户端)服务器端客户端 2. 读取和发送数据3. 关闭连接4. 错误处理5. 性能优化总结 二、UDP与TCP的区别1. 连接性2. 可靠性3. 流量控制和拥塞…

c++--动态内存

目录 1.栈和堆的概念 1.1 new 运算符的使用 1.2 new 与 malloc() 的区别 1.3 代码示例(delete):释放内存 1.栈和堆的概念 栈 (Stack) 栈内存 是一种自动分配的内存空间。函数内部声明的变量和函数调用都在栈上操作。当一个函数结束时,栈上的变量会自动释放。 …

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表,主键是学号,含有学生号、学生名、班级、班级名,违反了数据库第几范式? --非主属性不依赖于主键,不满足第二范式 有一个订单表,包含以下字段:订单ID&…

《C语言程序设计现代方法》note-3 选择语句 循环语句

助记提要 关系运算符、判等运算符、逻辑运算符的优先级和结合性;条件运算符;C语言中如何使用布尔值;switch语句的注意;for语句省略表达式;逗号表达式;goto语句;空语句; 不应该以聪明…

电子电气架构 --- Trace 32(劳特巴赫)多核系统的调试

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

Markdown转HTML

来源: https://juejin.cn/post/7310787455112445987 Markdown 一种简单易用的标记语言,旨在使纯文本格式化变得简单且易于阅读,它的设计目标是使文档易于阅读和书写同时保持格式的清晰和简洁 为什么会有Markdown转HTML的需求 尽管 Markdo…

哈希表与unordered_map

1.哈希概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数,因此顺序结构中查找的时间复杂度O(N),平…

Python | Leetcode Python题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:mid (low high) // 2mid - mid & 1if nums[mid] nums[mid 1]:low mid 2else:high midreturn nums[l…

C++ 项目中使用 .dll 和 .def 文件的操作指南

在 C 项目中使用 sqlite3.dll 和 .def 文件的操作指南 在 C 项目中&#xff0c;当我们只有 sqlite3.dll 和 .def 文件&#xff0c;但没有 .lib 文件时&#xff0c;通常需要生成 .lib 文件以便项目链接或直接调用 sqlite3.dll。本文将介绍几种方法来生成 .lib 文件&#xff0c;…

有Bootloader,为什么还要BROM?

有Bootloader&#xff0c;为什么还要BROM? 不少硬件平台都提供类似Boot ROM或者PBL(高通平台)固化的一段程序&#xff0c;出厂后用户一定不能修改。BROM可以引导Bootloader程序。大家知道&#xff0c;每个可启动的平台都会在存储设备&#xff0c;例如EMMC/NAND/UFS保存Bootloa…

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…

期权懂|股指期权开户门槛不够该怎么办?

期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期权开户门槛不够该怎么办&#xff1f; 股指期权开户门槛不够&#xff0c;可以考虑利用资管分仓账户‌&#xff0c;选择已开通期权交易资格的主账户进行分仓&#xff0c;账户…

数据库SQL学习笔记

第 1 章 绪论 1.1 数据库系统概述 1.1.1 四个基本概念 数据库系统(DBS) 定义&#xff1a;是指在计算机系统中引入数据库后的系统构成 构成&#xff1a;数据库&#xff0c;数据库管理系统&#xff08;及其开发工具&#xff09;&#xff0c;应用系统&#xff0c;数据库管理员…

Jenkins系列

jenkins 1、搭建Jenkins 搭建Jenkins 2、这是什么 3、这是什么 4、 这是什么 5、这是什么 文章目录 jenkins1、搭建Jenkins2、这是什么3、这是什么4、 这是什么5、这是什么 前言 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随…

WPF(C#)学习日志10:Prism框架下按键绑定

在Prism框架下&#xff0c;提供了DelegateCommand类用于处理了UI的按键请求&#xff0c;XAML中可以直接采用 Command"{Binding **}" 来绑定这些方法。这个类是一个泛型的类生命时仅需要DelegateCommand<T>即可&#xff0c;同时在XAML中绑定CommandParameter&qu…

嵌入式常用功能之通讯协议1--串口

嵌入式常用功能之通讯协议1--串口&#xff08;本文&#xff09; 嵌入式常用功能之通讯协议1--IIC 嵌入式常用功能之通讯协议1--SPI&#xff08;待定&#xff09; ...... 一、串口协议简介 1&#xff0c;简介 UART(异步串行通信)&#xff1a;时钟基准不是同一个&#xff08…

云渲染与汽车CGI图像技术优势和劣势

在数字时代&#xff0c;云渲染技术以其独特的优势在汽车CGI图像制作中占据了重要地位。云渲染通过利用云计算的分布式处理能力&#xff0c;将渲染任务分配给云端的服务器集群进行计算&#xff0c;从而实现高效、高质量的渲染效果。 这种技术的优势主要体现在以下几个方面&#…

Android 延时操作的常用方法

一、简介 在Android开发中我们可能会有延时执行某个操作的需求&#xff0c;例如我们启动应用的时候&#xff0c;一开始呈现的是引导页面&#xff0c;3秒后进入主界面&#xff0c;这就是一个延时操作。还有一种是执行某些接口任务时&#xff0c;需要有超时机制。下面介绍常用的…

Foundry 单元测试

安装 Foundry 如果你还没有安装 Foundry&#xff0c;请按照此处的说明进行操作&#xff1a;Foundry 安装 Foundry Hello World 只需运行以下命令&#xff0c;它将为你设置环境&#xff0c;创建测试并运行它们。&#xff08;当然&#xff0c;这假设你已经安装了 Foundry&…

Anaconda超详细下载安装教程(附安装包)

文章目录 一、下载二、安装Anaconda1.解压下载的安装包2.开始安装3.测试配置是否成功4.其他问题1.查看Anaconda版本2.查看当前是否可以使用python 一、下载 Anaconda安装包下载&#xff1a;https://pan.quark.cn/s/ae29fb506730 &#xff08;直接下载&#xff0c;解压安装即可…