用于自然语言处理的 Python:理解文本数据

一、说明
Python是一种功能强大的编程语言,在自然语言处理(NLP)领域获得了极大的普及。凭借其丰富的库集,Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中,我们将介绍 Python for NLP 的一些基础知识,重点是理解文本数据和实现代码来执行各种 NLP 任务。
二、用于自然语言处理的 Python:理解文本数据
文本数据在 NLP 应用程序中起着重要作用,从情感分析到机器翻译。了解文本数据的结构和属性对于有效地处理和从中提取有意义的信息非常重要。
2.1 什么是文本数据?
通常,文本数据是指任何形式的人类可读文本。它可以来自各种媒介,包括书籍、网站、社交媒体帖子或客户评论。文本数据通常表示为字符、单词或标记的序列。
2.2 标记化:将文本分解为单元
标记化是将文本数据分解为更小、有意义的单元(称为标记)的过程。标记可以是单词、短语,甚至是单个字符。有几个库,如NLTK(自然语言工具包)和spaCy,提供高效的标记化功能。
import nltk
nltk.download('punkt')text = "Python is my favourite programming language."
tokens = nltk.word_tokenize(text)
print(tokens)
2.3 词形还原和词干提取
词形还原和词干提取是用于规范化文本数据中的单词的技术。词形还原将单词简化为其基本形式或字典形式,称为引理。另一方面,词干分析通过删除前缀和后缀将单词修剪为根形式。这些技术有助于减少单词变化并提高后续NLP任务的效率。
from nltk.stem import WordNetLemmatizer, PorterStemmer
nltk.download('wordnet')lemmatizer = WordNetLemmatizer()
stemmer = PorterStemmer()word = "running"
print("Lemmatized Word:",lemmatizer.lemmatize(word))
print("Stemmed Word:",stemmer.stem(word))
2.4 停用词:滤除噪音
停用词是语言中通常出现的词,不具有重要意义。停用词的示例包括“the”、“is”和“and”。在NLP中,从文本数据中删除停用词通常是有益的,因为它们会引入噪声并阻碍分析的准确性。像NLTK这样的Python库为不同的语言提供了预定义的停用词列表。
from nltk.corpus import stopwords
nltk.download('stopwords')stop_words = set(stopwords.words('english'))
filtered_tokens = [token for token in tokens if token not in stop_words]
print(filtered_tokens)
2.5 词性 (POS) 标记
词性标记是为句子中的单词分配语法标签的过程,指示它们的句法角色。这些标签可以是名词、动词、形容词或其他词性。POS 标记对于理解文本数据中单词的上下文和含义至关重要。像NLTK和spaCy这样的库提供了高效的POS标记功能。
nltk.download('averaged_perceptron_tagger')pos_tags = nltk.pos_tag(tokens)
print(pos_tags)
三、不同应用和目的
3.1 命名实体识别 (NER)
命名实体识别是 NLP 的一个子任务,涉及识别和分类文本数据中的命名实体。命名实体可以是人员、组织、位置或任何其他专有名词的名称。像spaCy这样的Python库为NER提供了预先训练的模型,使得从文本中提取有价值的信息变得更加容易。
import spacynlp = spacy.load('en_core_web_sm')
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")for ent in doc.ents:print(ent.text, ent.label_)
3.2 情绪分析
情感分析是确定文本数据的情绪或情感基调的过程。它涉及将文本分类为正面、负面或中性。Python 提供了各种库,例如 NLTK 和 TextBlob,它们为情感分析提供了预先训练的模型。这些模型可用于分析客户反馈、社交媒体帖子或任何其他文本数据,以深入了解公众舆论。
from textblob import TextBlobtext = "Python is a great programming language." blob = TextBlob(text) print(blob.sentiment)
3.3 主题建模
主题建模是一种用于从文档集合中提取基础主题或主题的技术。它有助于理解文本数据中存在的主要思想或概念。Python的流行库Gensim为主题建模提供了有效的算法,例如潜在狄利克雷分配(LDA)。这些算法可以应用于大型文本语料库,以发现隐藏的模式并生成有意义的摘要。
from gensim import corpora, modelsdocuments = ["Human machine interface for lab abc computer applications","A survey of user opinion of computer system response time","The EPS user interface management system","System and human system engineering testing of EPS"]texts = [doc.split() for doc in documents] dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts]lda_model = models.LdaModel(corpus, num_topics=2, id2word=dictionary) print(lda_model.print_topics())
3.4 文本分类
文本分类是将文本数据分类为预定义类或类别的过程。它在垃圾邮件过滤、情绪分析、新闻分类和许多其他领域找到了应用。文本分类模型可以使用Python库(如scikit-learn和TensorFlow)进行构建和训练。
from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNBX = ["Python is a versatile programming language.", "I love Python.", "Python is great for data analysis."] y = ["positive", "positive", "positive"] vectorizer = CountVectorizer() X_transformed = vectorizer.fit_transform(X)clf = MultinomialNB().fit(X_transformed, y) print(clf.predict(vectorizer.transform(["Python is awesome!"])))
3.5 词嵌入
词嵌入是单词的密集向量表示,用于捕获它们之间的语义关系。它们广泛用于 NLP 任务,例如单词相似性、文档聚类和语言翻译。Python的库spaCy提供了预先训练的词嵌入模型,如Word2Vec和GloVe。
nlp = spacy.load('en_core_web_md')tokens = nlp("dog cat banana")for token in tokens:print(token.text, token.has_vector, token.vector_norm, token.is_oov)
3.6 语言翻译
语言翻译涉及将文本从一种语言转换为另一种语言。Python的流行库PyTorch提供了一个强大的机器翻译工具包,称为Fairseq。它利用深度学习模型(如变形金刚)来实现准确流畅的翻译。
您可以安装以下库
pip install torch fairseq
import torch
from fairseq.models.transformer import TransformerModel# Load the pre-trained translation model
model_name = 'transformer.wmt19.en-de'
model = TransformerModel.from_pretrained(model_name)# Set the model to evaluation mode
model.eval()# Define the source sentence to be translated
source_sentence = "Hello, how are you?"# Translate the source sentence to the target language
translated_sentence = model.translate(source_sentence)# Print the translated sentence
print("Translated Sentence:", translated_sentence)
3.7 文本生成
文本生成是一项具有挑战性的 NLP 任务,涉及根据给定提示生成连贯且上下文相关的文本。Python的库OpenAI GPT为ChatGPT提供支持,是一个最先进的模型,擅长文本生成。它可以在特定域上进行微调,也可以开箱即用地用于各种创意写作应用程序。
import openai# Set up your OpenAI GPT model
model_name = "text-davinci-003"
openai.api_key = "YOUR_API_KEY_HERE"# Define the prompt for text generation
prompt = "Once upon a time"# Set the maximum number of tokens to generate
max_tokens = 100# Generate text based on the prompt
response = openai.Completion.create(engine=model_name,prompt=prompt,max_tokens=max_tokens
)# Extract the generated text from the API response
generated_text = response.choices[0].text.strip()# Print the generated text
print("Generated Text:")
print(generated_text)
四、用于 NLP 的 Python 库
Python 为 NLP 提供了广泛的库和框架,使其成为文本数据处理的首选语言。一些流行的库包括:
- 自然语言工具包 (NLTK)
- 空间
- 根西姆
- TextBlob
- scikit-learn
- 张量流
- PyTorch
- 费尔塞克
- OpenAI GPT
这些库为各种 NLP 任务提供了广泛的功能和预先训练的模型,使开发人员能够专注于手头的特定问题。
五、结论
Python已经成为自然语言处理(NLP)的流行语言,因为它可以做许多不同的事情,并且有很多库。本文探讨了将 Python 用于 NLP 的基础知识,强调了理解文本数据和利用代码执行各种 NLP 任务的重要性。从词汇分词和词形还原到停止词删除、词性标记、命名实体识别、情感分析、主题建模、文本分类、单词嵌入、语言翻译和文本生成,Python 库(如 NLTK、spaCy、Gensim、TextBlob、scikit-learn、TensorFlow、PyTorch、Fairseq 和 OpenAI GPT)为高效的文本数据处理和分析提供了强大的解决方案和预训练模型。
纳文·潘迪
相关文章:
用于自然语言处理的 Python:理解文本数据
一、说明 Python是一种功能强大的编程语言,在自然语言处理(NLP)领域获得了极大的普及。凭借其丰富的库集,Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中,我们将介绍 Python for NLP 的一些基础知识&…...
历史服务器
二、配置历史服务器 在spark-3.1.1-bin-hadoop2.7/conf/spark-defaults.conf添加以下配置,其中d:/log/spark为日志保存位置 spark.eventLog.enabled true spark.eventLog.dir file:///d:/log/spark spark.eventLog.compress true spark.history.fs.logDirectory fil…...
竞赛无人机搭积木式编程(四)---2023年TI电赛G题空地协同智能消防系统(无人机部分)
竞赛无人机搭积木式编程(四) ---2023年TI电赛G题空地协同智能消防系统(无人机部分) 无名小哥 2023年9月15日 赛题分析与解题思路综述 飞控用户在学习了TI电赛往届真题开源方案以及用户自定义航点自动飞行功能方案讲解后&#x…...
深入理解JavaScript中的事件冒泡与事件捕获
在JavaScript中,事件是交互式网页开发中的关键概念之一。了解事件冒泡和事件捕获是成为一名优秀的前端开发者所必需的技能之一。本文将深入探讨这两个概念,解释它们是如何工作的,以及如何在实际应用中使用它们来处理事件。 一.什么是事件冒泡…...
纯css html 真实水滴效果
惯例,不多说直接上图 秉承着开源精神,我们将这段代码无私地分享给大家,因为我们深信,信息的共享和互相学习是推动科技进步的关键。我们鼓励大家在使用这段代码的同时,也能够将其中的原理、思想和经验分享给更多的人。 这份代码是我们团队用心…...
HBASE集群主节点迁移割接手动操作步骤
HBASE集群主节点迁移割接手动操作步骤 HBASE集群主节点指的是包含zk、nn、HM和rm服务的节点,一般这类服务都是一起复用在同一批节点上,我把这一类节点统称为HBASE集群主节点。 本文中使用了rsync、pssh等工具,这类是开源的,自己…...
TRB爆仓分析,套利分析,行情判断!
毫无疑问昨日TRB又成为涨幅榜的明星,总结下来,多军赚麻,空头爆仓,套利爽歪歪! 先说风险最小的套利情况,这里两种套利都能实现收益。 现货与永续合约的资金费率套利年化资金费率达到惊人的3285%——DeFi的…...
LVGL - RV1109 LVGL UI刷新效率优化-02
说明 前面好早写过一个文章,说明如何把LVGL移到RV1109上的操作,使用DRM方式!但出现刷新效率不高的问题! 因为一直没有真正的应用在产品中,所以也就放下了! 最近开发上需要考虑低成本,低内存的…...
5、布局管理器
5、布局管理器 一、流式布局 package com.dryant.lesson1;import java.awt.*;public class TestFlowLayout {public static void main(String[] args) {Frame frame new Frame();Button button1 new Button("bt1");Button button2 new Button("bt2");…...
What is a UDP Flood Attack?
用户数据报协议 (UDP) 是计算机网络中使用的无连接、不可靠的协议。它在互联网协议 (IP) 的传输层上运行,并提供跨网络的快速、高效的数据传输。与TCP(其更可靠的对应物)不同,UDP不提…...
多核 ARM Server 性能调优
概述 thinkforce ARM Server是多核心ARM服务器,硬件环境资源如下: CPU信息如下: yuxunyuxun:/$ lscpu Architecture: aarch64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian …...
oracle执行计划中,同一条语句块,在不同情况下执行计划不一样问题。子查询,union 导致索引失效。
场景: 需要获取部分数据集(视图)的业务时间最大值,希望只通过一条语句获取多个的最大值。 则使用select (视图1业务时间最大值),(视图2业务时间最大值),(视图3业务时间最大值) from dual 程序执行过程中,发现语句执行较慢,则进行s…...
【新的小主机】向日葵远程控制ubuntu
向日葵远程控制ubuntu 一、简介二、问题及解决方法2.1 向日葵远程连接Ubuntu22主机黑屏?2.2 Ubuntu如何向日葵开机自启?2.3 无显示器情况下,windows远程桌面连接Ubuntu? 三、待续。。。 一、简介 系统:ubuntu22.04.3 目的&#…...
在Android studio高版本上使用低版本的Github项目库报错未能解析:Landroid/support/v4/app/FrageActivity;
我在我的项目中有一个导包: // 基础依赖包,必须要依赖 沉浸式狀態欄 implementation com.gyf.immersionbar:immersionbar:3.0.0 但是我的as版本比较高,我使用这个导包里面的方法会直接报错: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/suppor…...
自动混剪多段视频、合并音频、添加文案的技巧分享
在如今的社交媒体时代,视频的重要性越来越被人们所重视。许多人喜欢记录生活中的美好瞬间,并将其制作成视频分享给朋友和家人。然而,对于那些拍摄了大量视频的人来说,一个一个地进行剪辑和合并可能是一项令人头痛的任务。但是&…...
学习笔记——BSGS
众所周知,北上广深是中国非常一线的城市,北京是首都,地处…… 正片开始! 一、BSGS基础算法 实现目标: A x ≡ B ( m o d P ) , ( gcd ( P , A ) 1 ) A^x\equiv B(\mod P),(\gcd(P,A)1) Ax≡B(modP),(gcd(P,A)1)…...
【AI视野·今日NLP 自然语言处理论文速览 第四十期】Mon, 25 Sep 2023
AI视野今日CS.NLP 自然语言处理论文速览 Mon, 25 Sep 2023 Totally 46 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers ReConcile: Round-Table Conference Improves Reasoning via Consensus among Diverse LLMs Authors Justin C…...
Linux C/C++下收集指定域名的子域名信息(类似dnsmap实现)
我们知道dnsmap是一个工具,主要用于收集指定域名的子域名信息。它对于渗透测试人员在基础结构安全评估的信息收集和枚举阶段非常有用,可以帮助他们发现目标公司的IP网络地址段、域名等信息。 dnsmap的操作原理 dnsmap(DNS Mappingÿ…...
linux-定时任务
目录 一、crond命令 1、什么是计划任务 2、crond服务的概念 3、crontab 二、at命令 1、at任务的概念 三、邮件服务 1、概念 2、启动postfix 四、mailx命令 1、三个概念: 2、交互式发邮件 3、非交互式发邮件 四、cron定时任务实践 1、系统定时任务配置…...
在Spring Boot项目中使用Redisson
在Spring Boot项目中使用Redisson Redisson简介 Redisson官网仓库 Redisson中文文档 Redission是一个基于Java的分布式缓存和分布式任务调度框架,用于处理分布式系统中的缓存和任务队列。它是一个开源项目,旨在简化分布式系统的开发和管理。 以下是…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
