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

news2024/11/28 15:56:39

一、说明

        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 spacy

nlp = 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 TextBlob

text = "Python is a great programming language."
blob = TextBlob(text)
print(blob.sentiment)

3.3 主题建模

        主题建模是一种用于从文档集合中提取基础主题或主题的技术。它有助于理解文本数据中存在的主要思想或概念。Python的流行库Gensim为主题建模提供了有效的算法,例如潜在狄利克雷分配(LDA)。这些算法可以应用于大型文本语料库,以发现隐藏的模式并生成有意义的摘要。

from gensim import corpora, models

documents = ["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 MultinomialNB

X = ["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)为高效的文本数据处理和分析提供了强大的解决方案和预训练模型。 

纳文·潘迪

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

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

相关文章

闲置手机电脑流量变现项目

在之前的文章中,我曾经介绍过一个叫Traffmonetizer的国外流量挂机项目,但是经过这段时间的测试。总体来说,收益非常差,并且没有相关的网络配置教程。 上一篇文章直达:流量挂机赚钱项目Traffmonetizer_Yokon_D的博客-C…

程序员的浪漫:如何用java代码画❤️表白呢?

有位小伙伴说,看到一个帖子,一个计算机博士接亲时,要求现场写代码,5分钟做出一个爱心。我们就看看如何用java设计出心形的代码。 我找了一下,发现方法竟然很多,我们就来见识一下,最后我们看一下…

论文字体,Word字体大小对照换算表(字号、磅、英寸、像素)

Word字体大小对照换算表(字号、磅、英寸、像素) https://blog.csdn.net/QAQ_King/article/details/128776411

设计模式之抽象工厂模式--创建一系列相关对象的艺术(简单工厂、工厂方法、到抽象工厂的进化过程,类图NS图)

目录 概述概念适用场景结构类图 衍化过程业务需求基本的数据访问程序工厂方法实现数据访问程序抽象工厂实现数据访问程序简单工厂改进抽象工厂使用反射抽象工厂反射配置文件衍化过程总结 常见问题总结 概述 概念 抽象工厂模式是一种创建型设计模式,它提供了一种将相…

rabbitMQ死信队列快速编写记录

文章目录 1.介绍1.1 什么是死信队列1.2 死信队列有什么用 2. 如何编码2.1 架构分析2.2 maven坐标2.3 工具类编写2.4 consumer1编写2.5 consumer2编写2.6 producer编写 3.整合springboot3.1 架构图3.2 maven坐标3.3 构建配置类,创建exchange,queue&#x…

OpenCV查找和绘制轮廓:findContours和drawContours

1 任务描述: 绘制图中粗线矩形的2个边界,并找到其边界的中心线 图1 原始图像 2.函数原型 findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, …

知识总结 1

传输层重点协议----TCP 1、TCP① TCP协议段格式② TCP原理Ⅰ 确认应答机制(可靠性)Ⅱ 超时重传机制(可靠性)Ⅲ 连接管理机制(可靠性)Ⅳ 滑动窗口机制(效率)Ⅴ 流量控制机制&#xff…

内存函数的介绍和模拟实现

目录 1.memcpy的使用(内存拷贝) 2.memcpy的实现 3.memmove的使用(内存拷贝) 4.memmove的实现 5.memset 的使用(内存设置) 6.memcmp的使用(内存比较) 1.memcpy的使用(内存拷贝) void * memcpy ( void * …

【C++】C++11------线程库

目录 线程库接口线程接口使用lock_guard与unique_lockmutex(互斥锁)lock_guardunique_lock 原子性操作库条件变量(condition_variable) 线程库接口 在C11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口&#x…

PMSM——转子位置估算基于QPLL

文章目录 前言仿真模型观测器速度观测位置观测转矩波形电流波形 前言 今后是电机控制方向的研究生的啦,期待有同行互相交流。 仿真模型 观测器 速度观测 位置观测 转矩波形 电流波形

Fake Maxpooling 二维滑动窗口

先对每一行求一遍滑动窗口&#xff0c;列数变为(列数-k1) 再对每一列求一遍滑动窗口&#xff0c;行数变为(行数-k1) 剩下的就是每一个窗口里的最大值啦 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing nam…

【图论C++】链式前向星(图(树)的存储)

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人…

idea debug 重启弹窗提示窗口询问是否关闭运行着的服务器

目录 方法121版本的IDEA idea重新启动服务器时会有一个提示窗口询问是否关闭运行着的服务器&#xff0c;&#xff0c;这个窗口不小心点了不再提示.重新打开弹窗方法 方法1 idea编辑器由于勾选了不再提示选项导致的弹窗无法继续弹出&#xff1a;解决方案 1.打开项目没提示&…

Rust 使用Cargo

Rust 使用技巧 Rust 使用crates 假设你正在编写一个 Rust 程序&#xff0c;要使用一个名为 rand 的第三方库来生成随机数。首先&#xff0c;你需要在 Cargo.toml 文件中添加以下依赖项&#xff1a; toml [dependencies] rand "0.7.3" 然后运行 cargo build&…

Mybatis 二级缓存(使用Ehcache作为二级缓存)

上一篇我们介绍了mybatis中二级缓存的使用&#xff0c;本篇我们在此基础上介绍Mybatis中如何使用Ehcache作为二级缓存。 如果您对mybatis中二级缓存的使用不太了解&#xff0c;建议您先进行了解后再阅读本篇&#xff0c;可以参考&#xff1a; Mybatis 二级缓存https://blog.c…

VisionTransformer(ViT)详细架构图

这是原版的架构图&#xff0c;少了很多东西。 这是我根据源码总结出来的详细版 有几点需要说明的&#xff0c;看架构图能看懂就不用看注释了。 &#xff08;1&#xff09;输入图片必须是 224x224x3 的&#xff0c;如果不是就把它缩放到这个尺寸。 &#xff08;2&#xff09;T…

文本嵌入层

1、代码演示 embedding nn.Embedding(10,3) print(embedding) input torch.LongTensor([[1,2,3,4],[4,3,2,9]]) embedding(input) 2、构建Embeddings类来实现文本嵌入层 # 构建Embedding类来实现文本嵌入层 class Embeddings(nn.Module):def __init__(self,d_model,vocab):…

uboot启动流程-涉及_main汇编函数

一. uboot启动流程涉及函数 本文简单分析一下 save_boot_params_ret调用的函数&#xff1a;_main汇编函数。 本文继之前文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-涉及s_init汇编函数_凌肖战的博客-CSDN博客 二. uboot启动流程涉及的 _main汇编函数 经过之…

微信公众号

title: “微信公众号” createTime: 2022-01-05T10:14:2008:00 updateTime: 2022-01-05T10:14:2008:00 draft: false author: “name” tags: [“杂”] categories: [“software”] description: “测试的” 公众号发布文章 文章目录 title: "微信公众号" createTim…

数据结构与算法基础-(5)---栈的应用-(1)括号匹配

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…