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 的核心用法,包括分词、词性标注、句法分析、情感分析和文本分类等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElementUI el-form表单多层数组的校验

问题描述 提示:这里描述项目中遇到的问题: ElementUI el-form表单多层数组的校验 页面效果: 数据结构: addform: {code: ,type: ,value: ,state: 1,remark: ,fieldList: [{fieldCode: ,resolverEntities: [{resolverType: , re…

Java SpringBoot调用大模型AI构建AI应用

本文是一个用springboot 结合spring mvc 和spring ai alibaba 调用国产大模型通义千问的具体例子,按照这个做能够快速的搞定Java应用的调用。 然后就可以把这类应用泛化到所有的涉及到非结构化数据结构化的场景中。 Spring AI:简化Java中大模型调用的框…

利用frp进行SSH端口转发(内网穿透同理)

题记 公司内网有一台设备,可以根据微步情报来对恶意服务器进行封禁。很不幸我的vps因为开着cs被标记为恶意了,导致我在公司网络连不上我的vps,每次连还要挂代理。于是我打算将我vps的22端口转发到我们公司的vps的10022端口上。本篇文章来自11…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展,循环神经网络(RNN)及其变种如门控循环…

CSS、Less、Scss

CSS、Less和SCSS都是用于描述网页外观的样式表语言,但它们各自具有不同的特点和功能。以下是对这三者的详细阐述及区别对比: 详细阐述 CSS(Cascading Style Sheets) 定义:CSS是一种用来表现HTML或XML等文件样式的计算机…

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成! 磁盘分区 开始分区: mkpart data_mysql # 分区名&…

OpenCV视觉分析之目标跟踪(9)计算扩展相关系数computeECC()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两幅图像之间的增强相关系数值 78 Enhanced Correlation Coefficient (ECC):增强相关系数是一种用于图像配准的技术&#xff0c…

ESP32-C3 入门笔记03:VScode + flash_download_tool 下载烧录程序(ESP-IDF + PlatformIO)

ESP32-C3 支持多种烧录方式,主要包括以下几种: VS Code 串口烧录:使用 VS Code 配合 PlatformIO 或 ESP-IDF 插件进行串口烧录。串口连接通常使用 UART 接口,通过 USB 转串口芯片与电脑连接。步骤大致如下: 配置 VS Co…

Java使用apache.commons.io框架下的FileUtils类实现文件的写入、读取、复制、删除

Apache Commons IO 是 Apache 开源基金组织提供的一组有关IO(Input/Output)操作的小框架,它是 Apache Commons 项目的一部分,专注于提供简单易用的 API,用于处理输入和输出操作。Apache Commons IO 是一个功能强大的 J…

Mac 电脑 使用sudo创建项目后,给了读写权限,仍报权限问题

问题:sudo创建的项目,都已经改成读写权限了,但是修改项目中的内容还是报没权限。 原因:当你使用 sudo 创建项目时。这是因为 sudo 会以 root 用户的身份创建文件和目录,这些文件和目录默认属于 root 用户,…

3. keil + vscode 进行stm32协同开发

1. 为什么使用vscode 主要还是界面友好,使用习惯问题,vscode 从前端,js, c/c, qt, 仓颉,rust都有很好插件的支持,并且有romote, wsl 等很多插件可以提高效率, 唯一的问题就是要使用插件进行环境…

Spring MVC 完整生命周期和异常处理流程图

先要明白 // 1. 用户发来请求: localhost:8080/user/1// 2. 处理器映射器(HandlerMapping)的工作 // 它会找到对应的Controller和方法 GetMapping("/user/{id}") public User getUser(PathVariable Long id) {return userService.getById(id); }// 3. 处理器适配…

Hadoop生态圈框架部署(四)- Hadoop完全分布式部署

文章目录 前言一、Hadoop完全分布式部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 hdfs-site…

【智能算法应用】天鹰优化算法求解二维路径规划问题

摘要 路径规划问题在机器人和无人机导航中起着关键作用。本文提出了一种基于天鹰优化算法的二维路径规划方法。天鹰优化算法(Eagle Strategy Optimization, ESO)通过模拟天鹰的捕猎行为,寻找最优路径。实验结果显示,该算法能够有…

数据结构之二叉树——堆 详解(含代码实现)

1.堆 如果有一个关键码的集合 K { , , , … ,},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,则称为小堆( 或大堆 ) 。将根节点最大的堆叫做最大堆或大根堆,根节点最小的…

【机器学习】25. 聚类-DBSCAN(density base)

聚类-DBSCAN-density base 1. 介绍2. 实现案例计算 3. K-dist4. 变化密度5. 优缺点 1. 介绍 DBSCAN – Density-Based Spatial Clustering of Applications with Noise 与K-Means查找圆形簇相比,DBSCAN可以查找任意形状和复杂形状的簇,如S形、椭圆、半圆…

MongoDB 8.0.3版本安装教程

MongoDB 8.0.3版本安装教程 一、下载安装 1.进入官网 2.选择社区版 3.点击下载 4.下载完成后点击安装 5.同意协议,下一步 6.选择第二个Custon,自定义安装 7.选择安装路径 !记住安装路径 8.默认,下一步 9.取…

怎么做才能降低APP用户的卸载率?

常年困扰 App 开发者的始终是一个问题:怎么做才能降低用户卸载率呢? 不要慌,今天这篇文章里,你就会找到解决方案啦。首先请记住: 每个 App 都是有自己独立个性的,所以没有一个通用的公式能让大家套用。 还…

elasticsearch 8.x 插件安装(三)之拼音插件

elasticsearch 8.x 插件安装(三)之拼音插件 elasticsearch插件安装合集 elasticsearch插件安装(一)之ik分词器安装(含MySQL更新) elasticsearch 8.x插件(二)之同义词安装如何解决…

CSP-J2024入门级T3:小木棍

题目链接 CSP-J2024T3:小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后,他闲来无事,便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数,满足如下条件: 拼出这个数恰好使用