Python 实现 NLP 的完整流程

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长。

🔍 博客内容包括:

  • Java核心技术与微服务:涵盖Java基础、JVM、并发编程、Redis、Kafka、Spring等,帮助您全面掌握企业级开发技术。
  • 大数据技术:涵盖Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper等相关技术。
  • 开发工具:分享常用开发工具(IDEA、Git、Mac、Alfred、Typora等)的使用技巧,提升开发效率。
  • 数据库与优化:总结MySQL及其他常用数据库技术,解决实际工作中的数据库问题。
  • Python与大数据:专注于Python编程语言的深度学习,数据分析工具(如Pandas、NumPy)和大数据处理技术,帮助您掌握数据分析、数据挖掘、机器学习等技术。
  • 数据结构与算法:总结数据结构与算法的核心知识,提升编程思维,帮助您应对大厂面试挑战。

🌟 我的目标:持续学习与总结,分享技术心得与解决方案,和您一起探索技术的无限可能!在这里,我希望能与您共同进步,互相激励,成为更好的自己。

📣 欢迎订阅本专栏,与我一起在这个知识的海洋中不断学习、分享和成长!💻🚀


📍版权声明:本博客所有内容均为原创,遵循CC 4.0 BY-SA协议,转载请注明出处。

目录

1. 安装和导入必要的库

2. 文本数据准备

3. 文本预处理

3.1 小写化

3.2 分词(Tokenization)

3.3 去除停用词

3.4 词干提取(Stemming)

4. 特征提取

5. 训练测试数据集划分

6. 训练模型

7. 评估模型

8. 模型预测

9. 总结



1. 安装和导入必要的库

首先,确保已安装必要的 NLP 库:

pip install numpy pandas matplotlib scikit-learn nltk spacy

然后导入必要的 Python 库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, confusion_matrix
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import spacy

2. 文本数据准备

在实际应用中,你可能需要从文件、数据库或网页中获取文本数据。这里我们以一个简单的文本数据集为例:

# 示例文本数据
data = {
    'text': [
        "I love programming in Python.",
        "Python is a great language for machine learning.",
        "Natural language processing is fun!",
        "I enjoy solving problems using code.",
        "Deep learning and NLP are interesting fields.",
        "Machine learning and AI are revolutionizing industries."
    ],
    'label': [1, 1, 1, 0, 1, 0]  # 1表示正面情感,0表示负面情感
}

df = pd.DataFrame(data)
print(df)

3. 文本预处理

文本预处理是 NLP 的关键步骤,通常包括:分词、去除停用词、词干提取和小写化。

3.1 小写化

将文本中的所有字母转换为小写,确保词汇的一致性。

# 小写化
df['text'] = df['text'].apply(lambda x: x.lower())
3.2 分词(Tokenization)

分词是将一段文本分割成一个个单独的词。

nltk.download('punkt')  # 下载 punkt 分词器

# 分词
df['tokens'] = df['text'].apply(word_tokenize)
print(df['tokens'])
3.3 去除停用词

停用词是一些常见但不携带实际信息的词,如 "the", "is", "and" 等。我们需要去除这些词。

nltk.download('stopwords')  # 下载停用词库

stop_words = set(stopwords.words('english'))

# 去除停用词
df['tokens'] = df['tokens'].apply(lambda x: [word for word in x if word not in stop_words])
print(df['tokens'])
3.4 词干提取(Stemming)

词干提取是将词语还原为其基本形式(词干)。例如,将“running”还原为“run”。

from nltk.stem import PorterStemmer

stemmer = PorterStemmer()

# 词干提取
df['tokens'] = df['tokens'].apply(lambda x: [stemmer.stem(word) for word in x])
print(df['tokens'])

4. 特征提取

文本数据无法直接用于机器学习模型,因此需要将其转换为数字特征。常见的特征提取方法是 TF-IDF(Term Frequency-Inverse Document Frequency)。

# 使用 TF-IDF 向量化文本
vectorizer = TfidfVectorizer()

# 将文本数据转换为 TF-IDF 特征矩阵
X = vectorizer.fit_transform(df['text'])

# 查看转换后的 TF-IDF 特征矩阵
print(X.toarray())

5. 训练测试数据集划分

将数据集分成训练集和测试集,通常是 80% 训练集和 20% 测试集。

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, df['label'], test_size=0.2, random_state=42)

print(f"训练集大小: {X_train.shape}")
print(f"测试集大小: {X_test.shape}")

6. 训练模型

我们使用 朴素贝叶斯(Naive Bayes) 模型来训练数据。朴素贝叶斯是一种常用的分类算法,适用于文本分类任务。

# 创建并训练模型
model = MultinomialNB()
model.fit(X_train, y_train)

7. 评估模型

训练好模型后,我们需要用测试集来评估模型的性能。主要评估指标包括准确率和混淆矩阵。

# 使用测试集进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.4f}")

# 显示混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)

# 可视化混淆矩阵
plt.matshow(conf_matrix, cmap='Blues')
plt.title("Confusion Matrix")
plt.xlabel('Predicted')
plt.ylabel('True')
plt.colorbar()
plt.show()

8. 模型预测

使用训练好的模型对新的文本数据进行预测。

# 新文本数据
new_text = ["I love learning about AI and machine learning."]

# 文本预处理
new_text = [text.lower() for text in new_text]
new_tokens = [word_tokenize(text) for text in new_text]
new_tokens = [[stemmer.stem(word) for word in tokens if word not in stop_words] for tokens in new_tokens]
new_text_clean = [' '.join(tokens) for tokens in new_tokens]

# 特征提取
new_features = vectorizer.transform(new_text_clean)

# 预测
prediction = model.predict(new_features)
print(f"预测标签: {prediction[0]}")

9. 总结

在这篇文章中,我们展示了一个完整的 NLP 流程,包括:

  1. 文本预处理:小写化、分词、去除停用词、词干提取。
  2. 特征提取:使用 TF-IDF 将文本转换为特征矩阵。
  3. 模型训练:使用朴素贝叶斯分类器进行文本分类。
  4. 模型评估:使用准确率和混淆矩阵来评估模型表现。
  5. 模型预测:对新文本进行预测。

这是一个典型的 NLP 流程,可以根据实际需求进行扩展,加入更多的特征、算法和调优步骤。

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

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

相关文章

redux 结合 @reduxjs/toolkit 的使用

1,使用步骤 使用React Toolkit 创建 counterStore(store目录下) --> 为React注入store(src下面的index) --> React组件使用store中的数据(组件) 2,例如下面有一个简单加减的…

GDC杂感:怎么提高游戏销量?

1、2018年的一个独立游戏制作人在GDC分享了其教训总结,得奖但销量不佳, 大意是:画面,辨识度的重要性,平庸的游戏容易扑街; 直播对不同类型的作用不同,差别能达到几十倍。 游戏品质与销量并不…

【Kotlin】上手学习之类型篇

一、类型 1.1 基本类型 主要分为 数字及其无符号版布尔字符字符串数组 1.1.1 数字 整数类型 Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同: 类型大小(比特数)最小…

迅为RK3576开发板Android 多屏显示

迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。 1.1 Android 多屏同显 iTOP-RK3576 开发板支持…

解决关于Xcode16提交审核报错

# 问题描述 The following issues occurred while distributing your application. Asset validation failed Invalid Executable. The executable xxx.app/Frameworks/HappyDNS.framework/HappyDNS contains bitcode.(lD:ef5dd249-731f-4731-8173-8e4a12519352) Asset valida…

语义检索效果差?深度学习rerank VS 统计rerank选哪个

前段时间我开发了一个用白话文搜索语义相近的古诗词的应用(详见:《朋友圈装腔指南:如何用向量数据库把大白话变成古诗词》),但是有时候搜索结果却不让人满意,排名靠前的结果和查询的语义没啥关系&#xff0…

Linux 常用命令 - chmod 【改变文件或目录权限】

简介 “chmod” 这个命令来自于 “change mode” 的缩写,用于更改文件或目录的访问权限。这个命令允许用户设定谁可以读取、写入或执行一个文件。在 Linux 和其他类 Unix 系统中,文件权限对系统安全和用户隐私至关重要。 Linux/Unix 的文件调用权限分为…

基于机器学习的电信用户流失预测与数据分析可视化

完整源码项目包获取→点击文章末尾名片! 背景描述 根据IBM商业社区分享团队描述,该数据集为某电信公司在加利福尼亚为7000余位用户(个人/家庭)提供电话和互联网服务的相关记录。描述用户基本情况,包括每位用户已注册的…

【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)

文章目录 Mysql 5.7 递归查询Mysql 8 实现递归查询Oracle递归示例SQL Server 递归查询示例PostgreSQL 递归查询示例 更多相关内容可查看 Mysql 5.7 递归查询 MySQL 5.7 本身不直接支持标准 SQL 中的递归查询语法(如 WITH RECURSIVE 这种常见的递归查询方式&#xf…

接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报,进行去重、分组、静默、抑制等操作,并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。 主要功能 去重:合并相同或相似的警报&…

Qt应用之MDI(多文档设计)

qt creator 版本6.8.0 MinGW 64bit 由此模块可以扩展成设计一个qt文本编辑器。 界面如下 部分功能展示如下 新建文件 打开文件 mdi模式、级联模式和平铺模式 界面和程序构建过程。 1.如图所需.cpp和.h文件 2.mainwindow.ui和tformdoc.ui界面布局如下 不懂什么是Action如何…

软件授权管理中的软件激活向导示例

软件激活向导示例 在软件许可中,提供许可应该是简单和安全的。这适用于想要在中央许可证服务器上创建新许可证的软件开发人员,也适用于需要在其设备上获得许可证的最终用户。如果所讨论的系统有互联网连接,或是暂时的连接,就可以…

GB44495-2024 汽车整车信息安全技术要求 - V2X部分前置要求

背景 GB 44495-2024《汽车整车信息安全技术要求》中关于V2X(车与外界通信)的部分,主要关注于通信安全要求,旨在确保车辆在与外部设备进行数据交互时的信息安全。其测试大致可分为消息层(数据无异常)、应用…

phpstudy靶场搭建问题

前言: 靶场搭建遇到的问题,记录一下,可能是基础不牢吧,老是遇到奇奇怪怪的问题 思路: 跟着网上的搭建走一遍 内容: 目录 搭建pikachu遇到的问题 搭建pikachu遇到的问题 其实并不是第一次搭建&#x…

【Excel】【VBA】双列排序:坐标从Y从大到小排列之后相同Y坐标的行再对X从小到大排列

Excel VBA 双列排序 功能概述 这段VBA代码实现了Excel中的双列排序功能,具体是: 跳过前3行表头先按C列数据从大到小排序在C列值相同的情况下,按B列从大到小排序排序时保持整行数据的完整性 流程图 #mermaid-svg-XJERemQluZlM4K8l {font-fa…

Hive SQL必刷练习题:留存率问题

首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100% 解决思…

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…

基于unity的多人家装应用的设计与实现

摘要 本课题根据主流家装应用存在的问题和结合了Unity3D引擎所具有的优势,在主流家装应用的基础上弥补了常见的缺憾,实现了一种新型的交互更强的家装展示系统。 本系统主要通过将家具模型资源和材质等资源导入Unity3D平台中,通过C#代码开发&a…

Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)

前期文章中我们完成了创建第一个场景、添加轨道控制器的功能,接下来我们继续阐述其他的功能,本篇文章中主要讲述如何应用lil-GUI调试开发3D效果,在开始具体流程和步骤之前,请先查看之前的内容,因为该功能必须在前期内容…