Python 如何进行自然语言处理(NLTK, SpaCy)

news2024/9/28 15:29:41

自然语言处理(Natural Language Processing, NLP)是计算机科学和人工智能的一个重要领域,旨在实现计算机对人类语言的理解和处理。在Python中,有许多工具和库可以用于自然语言处理,其中最流行的两个是NLTK(Natural Language Toolkit)和SpaCy。

NLTK(Natural Language Toolkit)

NLTK是一个广泛使用的Python库,用于处理文本数据和进行各种自然语言处理任务。它提供了丰富的文本处理工具和数据集,适合初学者和研究人员。

安装NLTK

要使用NLTK,首先需要安装它。可以使用pip进行安装:

pip install nltk
导入NLTK

安装完成后,可以导入NLTK库:

import nltk
下载NLTK数据

NLTK提供了许多数据集和模型,可以通过以下命令下载这些资源:

nltk.download('all')

这将下载NLTK所有可用的数据和模型,当然,你也可以选择性下载特定的资源,例如:

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('wordnet')
1. 句子分割和词语标记

句子分割(Sentence Tokenization)和词语标记(Word Tokenization)是文本处理的基础步骤。

from nltk.tokenize import sent_tokenize, word_tokenize

text = "NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces."

# 句子分割
sentences = sent_tokenize(text)
print(sentences)

# 词语标记
words = word_tokenize(text)
print(words)
2. 词性标注(POS Tagging)

词性标注是指为每个单词分配一个词性标签,如名词、动词、形容词等。

from nltk import pos_tag

words = word_tokenize(text)
pos_tags = pos_tag(words)
print(pos_tags)
3. 词干提取和词形还原

词干提取(Stemming)和词形还原(Lemmatization)是将单词还原为其基本形式的过程。

from nltk.stem import PorterStemmer, WordNetLemmatizer

stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()

word = "running"

# 词干提取
stemmed_word = stemmer.stem(word)
print(stemmed_word)

# 词形还原
lemmatized_word = lemmatizer.lemmatize(word, pos='v')
print(lemmatized_word)
4. 命名实体识别(NER)

命名实体识别是识别文本中具有特定意义的实体(如人名、地名、组织等)。

from nltk import ne_chunk

# 需要先进行词性标注
pos_tags = pos_tag(words)
named_entities = ne_chunk(pos_tags)
print(named_entities)
5. 句法分析(Parsing)

句法分析是将句子结构解析为语法树的过程。

from nltk import CFG
from nltk.parse.generate import generate

grammar = CFG.fromstring("""
  S -> NP VP
  VP -> V NP | V NP PP
  PP -> P NP
  V -> "saw" | "ate" | "walked"
  NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
  Det -> "a" | "an" | "the" | "my"
  N -> "man" | "dog" | "cat" | "telescope" | "park"
  P -> "in" | "on" | "by" | "with"
""")

for sentence in generate(grammar, n=10):
    print(' '.join(sentence))

SpaCy

SpaCy是一个高效且现代的Python自然语言处理库,专为处理大量文本数据而设计。与NLTK相比,SpaCy更适合实际应用,提供了更快的性能和更友好的接口。

安装SpaCy

使用pip安装SpaCy:

pip install spacy

然后下载SpaCy的语言模型,例如英文模型:

python -m spacy download en_core_web_sm
导入SpaCy
import spacy
加载语言模型
nlp = spacy.load('en_core_web_sm')
1. 文本处理流水线

SpaCy提供了一整套的文本处理流水线,包括分词、词性标注、依存解析等。

doc = nlp("SpaCy is an open-source library for advanced Natural Language Processing in Python.")

# 词语标记
for token in doc:
    print(token.text, token.pos_, token.dep_)
2. 命名实体识别(NER)
for ent in doc.ents:
    print(ent.text, ent.label_)
3. 词干提取和词形还原

与NLTK不同,SpaCy自动进行词形还原,而不支持词干提取。

for token in doc:
    print(token.text, token.lemma_)
4. 依存解析

依存解析是分析句子中词语之间的依存关系。

for token in doc:
    print(token.text, token.dep_, token.head.text)
5. 文本相似度

SpaCy可以通过词向量计算文本相似度。

doc1 = nlp("I love coffee")
doc2 = nlp("I adore tea")

print(doc1.similarity(doc2))
6. 自定义词汇和规则

SpaCy允许用户添加自定义词汇和规则,以适应特定需求。

from spacy.matcher import Matcher

matcher = Matcher(nlp.vocab)

# 定义匹配规则
pattern = [{"LOWER": "hello"}, {"IS_PUNCT": True, "OP": "?"}, {"LOWER": "world"}]
matcher.add("HelloWorld", [pattern])

doc = nlp("Hello, world! Hello world!")
matches = matcher(doc)

for match_id, start, end in matches:
    span = doc[start:end]
    print(span.text)

NLTK和SpaCy各有优缺点,NLTK适合学术研究和教学,提供了丰富的资源和灵活的功能;而SpaCy则更注重性能和实际应用,提供了更现代化的接口和高效的处理能力。选择哪个库取决于具体的需求和使用场景。在实际项目中,这两个库往往可以互补使用,以充分发挥各自的优势。

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

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

相关文章

【Python脚本】定时任务脚本实现、自动关机等功能脚本实现(保姆篇)

文章目录 功能描述源码分析依赖参数配置数据校验多线程并发执行定时任务注册自动关机主程序 源码整合本篇小结 更多相关内容可查看 功能描述 需要python环境,详情可看主页python相关文章【Python】从0开始写脚本、Selenium详细教程、附源码案例(保姆篇&…

3dsMax模型展开UV之后无法删除,3dsmax删除模型上已经展开的UV

3dsmax展开UV之后如何删除UV 方法二 如果不能重置UV通道,在实用工具》更多工具》UVW移除,选中模型,点击UVW移除,移除模型的UVW。

机器人抓取与操作的挑战与进展——挑战赛角度

从竞赛中看机器人抓取与操作的挑战与进展 前言一、国际机器人竞赛有哪些?二、感知方面的挑战与进展二、抓取方面的挑战与进展三、操作方面的挑战与进展总结 前言 本文根据最近的机器人抓取和操作挑战赛 (Robotic Grasping andManipulation Competitions (RGMCs))&a…

OCR图片矫正、表格检测及裁剪综合实践

问题描述 实际工程中,我们经常需要对图片进行预处理,比如: 1、图片是倾斜的 2、图片背景需要处理掉 3、图片的公章需要剔除 4、图片过暗,过亮 5、图片表格检测 6、图片表格版面分析 。。。。。。等等各种情况。 结果展示…

解决PuppeteerSharp生成PDF颜色问题的最佳实践

在现代网络开发中,使用爬虫技术生成PDF文件已成为一种常见需求。然而,开发者经常会遇到一些棘手的问题,其中之一便是使用PuppeteerSharp生成PDF时颜色丢失的问题。本篇文章将概述如何解决这一问题,并提供最佳实践和相关代码示例。…

TI音频功放TAS6511(二)

3.数字音频处理 芯片支持高级数字音频处理能力,包括: 高通滤波器/直流阻断 数字音量控制 PVDD的Foldback/AGL 热Foldback 双象限增益补偿 混合调制 实时负载诊断 低延迟路径 喇叭功率限制 1)PVDD Foldback 本功能主要为了防止音频…

学习笔记--算法(双指针)2

复写零 链接:https://leetcode.cn/problems/duplicate-zeros/ 题目 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的…

分享一个基于微信小程序的旅游自助拼团系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

想业余时间做个网赚项目,有啥捷径?

前两年我陷入一段迷茫、浮躁、焦虑期。 主要原因是,心很大,力不足。 总想着找到一个高利润、高复购、少竞争的“蓝海”产品。 于是就面临一个尴尬的境地:普通业务看不上,蓝海业务找不着。 而且总想着做推广一步登天&#xff0…

程序员日志之DNF手游女鬼剑前瞻

目录 传送门正文日志1、概要女鬼剑 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) MyBatis框架(精品) MyBatis-Plus SpringDataJPA SpringClou…

【教资 · 科目一】综合素质

【科目一】综合素质 单选题:29道/2分,共58分材料分析题:3道/14分,共42分写作题:1道,50分 卷面满分150分 —— 报告满分120分 及格分数99分以上 —— 及格分数70分 ‍ 考试内容: 职业理念&a…

Flink笔记整理(七)

Flink笔记整理(七) 文章目录 Flink笔记整理(七)九、容错机制9.1 检查点(Checkpoint)检查点的保存从检查点恢复状态检查点算法9.2 状态一致性9.3 端到端精确一次(End-To-End Exactly-Once&#x…

中科亿海微SoM模组——光纤陀螺控制板

光纤陀螺控制板 光纤陀螺仪是一种高精度、高可靠性的惯性测量仪器,被广泛应用于导航、姿态控制等应用场景,具有非常重要的应用价值。 本文介绍的光纤陀螺控制板是基于中科亿海微自研的SiP芯片平台,以及光纤陀螺数字信号处理流程&#xff0c…

安泰高压功率放大器的作用以及应用有哪些

高压功率放大器是一种用于增强信号强度的电子设备。它的作用是将输入信号的功率放大到足够的水平,以便在系统中进行传输或执行特定的任务。高压功率放大器在各种领域都有广泛的应用,从通信到科学研究再到医疗设备等多个领域都可以找到其身影。 高压功率放…

echarts横向柱状图

一、效果图 二、代码 let option {grid: {top: 8%,bottom: -20,right: 20,left: 20,containLabel: true},xAxis: {show: false},yAxis: [{triggerEvent: true,show: true,inverse: true,data: getArrByKey(data, name),axisLine: {show: false},splitLine: {show: false},axi…

React(五):XLS、XLSX文件在线预览

效果 依赖 $ yarn add xlsx源码 .xlsx-wrap {position: relative;width: 100%;height: 100%;background-color: #fafafa;.ant-tabs {width: 100%;height: 100%;.ant-tabs-nav {height: 50px;padding: 0 10px;margin-bottom: 0;}.ant-tabs-content-holder {border-top: 1px so…

JavaScript对象转数组的三种简单方法

大家好!今天我们要聊的是JavaScript中一个非常实用的技巧——将对象转换为数组。 方法1:使用Object.keys()和Array.map() 首先介绍一种基础但非常实用的方法,就是通过Object.keys()获取对象的键,然后用Array.map()把这些键对应的值…

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01

C primer plus 第17 章 输入、输出和文件:文件输入和输出01 C primer plus 第17 章 输入、输出和文件:文件输入和输出01 文章目录 C primer plus 第17 章 输入、输出和文件:文件输入和输出0117.4 文件输入和输出17.4.1 简单的文件 1/0程序清…

商家转账到零钱分销返佣申请方案及驳回处理办法

分销返佣场景是商家申请最多的场景,因而申请被驳回也是最多的,根据我们上万次成功开通商家转账到零钱的经验,当商家转账到零钱的分销返佣场景被驳回时,按照以下步骤,商家都可以快速过审: 一、分析驳回原因 …

C Primer Plus 第6章——第一篇

你该逆袭了 第6章:重点摘录 零、本章内容介绍一、while 循环1、程序注释(1)伪代码 2、C 风格读取循环 二、while 语句1、终止 while 循环2、语法要点 三、用 关系运算符 和 表达式 比较大小1、fabs( ) 函数 比较 浮点数(1) fabs( ) 函数 2、什么是 真&am…