当前位置: 首页 > news >正文

NLP入门——数据预处理:编码规范化

编码规范化

在计算机中,我们需要将字符与字节序列之间建立起映射关系,这个过程被称为编码。有许多不同的编码方式,例如 ASCII、UTF-8、UTF-16 和 GBK 等。这些编码方式会将每个字符编码为一个或多个字节,以便于在计算机、网络和其他设备之间进行存储和传输。

Unicode是一种字符集,它为每个字符、符号和表情符分配了一个唯一的码位(整数),它与许多不同的编码方式结合使用。

编解码

英文数据处理特点:首字母大写、词与词间用空格分隔、标点符号与词汇写在一起。
中文数据处理与英文不同,没有分词,所有词之间没有空格
数据处理的目的在于去除脏数据,保留干净可用的部分,其中编解码是关键环节。

chr() 是 Python 中的一个内置函数,它将一个整数(Unicode 码位)转换为一个字符

>>> chr(a)
'a'

chr() 函数的逆函数是 ord(),它将一个字符(长度为 1 的字符串)转换为一个整数(Unicode 码位)

>>> ord('A')
65

编码标准

用不同的编码标准会得到不同的字节序列,尽管在文本中显示的是同一个字

>>> "可".encode("gbk")
b'\xbf\xc9'
>>> "可".encode("utf-8")
b'\xe5\x8f\xaf'
>>> a = "可".encode("utf-8")
>>> b = "可".encode("gbk")
>>> a == b
False

将其解码后与Python默认的Unicode字符集对应

>>> a.decode("utf-8") == '可'
True

1.处理编解码错误

检测文本是否以UTF-8编码。

#encoding: utf-8import sysdef handle(sl1,sl2,rl1,rl2):ens = "\n".encode("utf-8")with open(sl1,"rb") as fs1,open(sl2,"rb") as fs2,open(rl1,"wb") as fr1,open(rl2,"wb") as fr2:for l1, l2 in zip(fs1,fs2): #按行读t1 ,t2 = l1.strip(), l2.strip() #去除每行首、尾的回车、制表、空格if t1 and t2: #如果t1、t2 非空try: #解码t1, t2 = t1.decode("utf-8"), t2.decode("utf-8")except Exception as e: #decode方法抛出异常,说明原文不满足u8编码t1 = t2 = "" #异常置空if t1 and t2: #以U8再编码fr1.write(t1.encode("utf-8"))fr1.write(ens) #将strip()过的回车添加上,将行隔开fr2.write(t2.encode("utf-8"))fr2.write(ens)if __name__=="__main__":handle(*sys.argv[1:]) 

执行后,在命令行使用wc -l fname 查看行数,统计因编解码错误而被丢掉的行。

2.编码统一

HTML数据清洗

在网页上爬取的数据编码方式可能不同,例如使用Python的html库:

>>> import html
>>> html.escape("&")
'&'

escape()函数的逆函数是unescape(),会将HTML标记转化为Unicode字符。

>>> html.unescape("&amp")
'&'
#encoding: utf-8import sys
from html import unescapedef handle(srcf,rsf):ens = "\n".encode("utf-8")with open(srcf,"rb") as frd, open(rsf,"wb") as fwrt:for line in frd:tmp = line.strip()if tmp:tmp = unescape(tmp.decode("utf-8"))fwrt.write(tmp.encode("utf-8"))fwrt.write(ens)if __name__=="__main__":handle(*sys.argv[1:])

md5sum 是一个 Linux 和 Unix 操作系统中的命令行工具,用于计算和验证文件的 MD5 校验和。MD5 是一种哈希函数,它可以将任意长度的数据转换为一个固定长度的哈希值。
通过对比数据清洗前后的md5sum值,可以看到文件是否发生变化。

全角转为半角

全角字符与半角字符的unicode编码不一致

>>> a = 'a'
>>> b = 'a'
>>> a == b
False
>>> ord(a),ord(b)
(97, 65345)

他们的差值即是95345-97=65248

>>> chr(ord(b)-65248) == a
True

full2half.py

#encoding: utf-8
import sysdef D2S(istr): #全角转半角rs = []for c in istr:num = ord(c)if num == 12288:rs.append(" ") #如果检测到全角空格,则添加一个半角空格elif (num > 65280) and (num < 65375):rs.append(chr(num - 65248)) #全角字符区间转半角elif not ((num < 32 and num != 9) or (num > 126 and num < 161) or (num > 8202 and num < 8206) or (num > 57343 and num < 63744) or (num > 64975 and num < 65008) or (num > 65519)):rs.append(c)  #除去私有定义Unicode字符return ''.join(rs) ##将迭代对象连接成字符串def handle(srcf,rsf):ens="\n".encode("utf-8")with open(srcf,"rb") as frd,open(rsf,"wb") as fwrt:for line in frd:tmp = line.strip()if tmp:tmp = D2S(tmp.decode("utf-8")).encode("utf-8")fwrt.write(tmp)fwrt.write(ens)if __name__ == "__main__":handle(sys.argv[1],sys.argv[2]) 

Unicode规范化

docs python unicodedata
1.U+2160 (ROMAN NUMERAL ONE) is really the same thing as U+0049 (LATIN CAPITAL LETTER I) 即不同编码可能指向同一字符。
2. the character U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) can also be expressed as the sequence U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA)即同一字符可能有不同表示形式。
使用unicodedata.normalize(form, unistr)进行规范化

#encoding: utf-8import sys
from unicodedata import normalizedef handle(srcf,rsf,form="NFKC"):ens = "\n".encode("utf-8")with open(srcf,"rb") as frd, open(rsf,"wb") as fwrt:for line in frd:tmp = line.strip()if tmp:fwrt.write(normalize(form,tmp.decode("utf-8")).encode("utf-8"))fwrt.write(ens)if __name__=="__main__":handle(*sys.argv[1:])

相关文章:

NLP入门——数据预处理:编码规范化

编码规范化 在计算机中&#xff0c;我们需要将字符与字节序列之间建立起映射关系&#xff0c;这个过程被称为编码。有许多不同的编码方式&#xff0c;例如 ASCII、UTF-8、UTF-16 和 GBK 等。这些编码方式会将每个字符编码为一个或多个字节&#xff0c;以便于在计算机、网络和其…...

代码随想录算法训练营第四十八天| 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目链接&#xff1a;70. 爬楼梯 &#xff08;进阶&#xff09; 文档讲解&#xff1a;代码随想录/爬楼梯 &#xff08;进阶&#xff09; 状态&#xff1a;已完成&#xff08;0遍&#xff09; 解题过程 这几天博主忙着面试和入职&am…...

c++11 constexpr关键字

constexpr 是 C11 引入的一个关键字&#xff0c;它允许在编译时计算表达式的值&#xff0c;并将这些值存储在程序的常量部分中。这意味着 constexpr 变量和函数可以在编译时进行求值&#xff0c;从而避免了运行时的开销。 constexpr变量 constexpr 变量必须在编译时初始化&am…...

ios 获取图片的一部分区域

可以使用如下的代码&#xff1a; // get part of the image - (UIImage *)getPartOfImage:(UIImage *)img rect:(CGRect)partRect {CGImageRef imageRef img.CGImage;CGImageRef imagePartRef CGImageCreateWithImageInRect(imageRef, partRect);UIImage *retImg [UIImage i…...

数据结构(3)栈、队列、数组

1 栈 1.1 栈的定义 后进先出【LIFO】 1.2 基本操作 元素进栈出栈 只能在栈顶进行&#xff01;&#xff01;&#xff01; 经常考的题&#xff1a; 穿插的进行进栈和出栈 可能有多个选项 1.3 顺序栈 1.3.1 初始化 下标是从0开始的 1.3.2 进栈 更简单的写法&#xff1a; 1.3…...

数据库(入门)

文章目录 一、数据库(DB) 二、数据库管理系统&#xff08;DBMS&#xff09; 三、SQL&#xff08;结构化查询语言&#xff09; 四、三者的关系 五、端口号&#xff08;port number&#xff09; 一、数据库(DB) 定义&#xff1a;按照一定格式存储数据的一些文件的组合。 简单来…...

ChatTTS+Python编程搞定语音报时小程序

文字转语音神器Python编程搞定语音报时小程序 今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/]&#xff0c;如下图所示&#xff1a; 这个开源项目可以从github.com上下载…...

【Mac】Alfred 5 for Mac(苹果效率提升工具)v5.5软件介绍及安装教程

软件介绍 Alfred 是适用于 Mac 操作系统的流行生产力应用程序。它旨在帮助用户在 Mac 电脑上更高效地启动应用程序、搜索文件和文件夹以及执行各种任务。借助 Alfred&#xff0c;用户可以创建自定义键盘快捷方式、设置自定义工作流程并使用热键访问功能。 Alfred for Mac 的一…...

PDF文件处理不再复杂:9个Python库让一切变得简单

大家好&#xff0c;这里是程序员晚枫&#xff0c;2年前发布了一个开源项目&#xff1a;python-office&#xff0c;目前在GitHub上有800⭐&#xff0c;最近在开发新功能时感觉Python知识有点不够用了。 所以打算从2方面补充自己的知识&#xff1a;研究优秀的第三方库和学习Pyth…...

安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?

安防视频融合汇聚平台EasyCVR兼容性强&#xff0c;可支持Windows系统、Linux系统以及国产化操作系统等&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;可拓展性强、视频能力灵活&#xff0c;能对外分发RTMP、RTSP、HTTP-FLV、…...

Liunx音频

一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声&#xff1a; echo -e "\a"&#xff08;这里的 -e 选项允许解释反斜杠转义的字符&#xff0c;而 \a 是一个响铃(bell)字符&#xff09; 二. beep 下载对应的包 yum -y install beep 发声命令 be…...

2024前端面试准备3-JS异步-进阶

1.请描述Event loop&#xff08;事件循环&#xff09;的机制。 JS是单线程的&#xff0c;异步需要基于毁掉来实现&#xff0c;event loop 就是异步回调的实现原理。 同步代码&#xff0c;一行一行放在Call Stack执行&#xff0c;遇到异步任务&#xff0c;标记一下让其他线程去处…...

lm studio 0.2.24国内下载模型

1.修改C:\Users\Admin\AppData\Local\LM-Studio\app-0.2.24\resources\app\.webpack\main中的3个js文件&#xff1a; index.js llmworker.js worker.js 中替换huggingface.co为hf-mirror.com。这样就能实现搜索模型文件 2.点击模型&#xff0c;选择下载&#xff0c;出现下载…...

卷积池化尺寸计算公式

卷积层[Conv]&#xff1a; 卷积CNN是我们最常使用的&#xff0c;但是有时候需要观察他的输出前后的差异&#xff0c;这里描述下计算方式&#xff0c;具体如下&#xff1a; 图片大小&#xff1a;WxHxD W:宽 H:高 D:通道&#xff08;RGB&#xff09; 例:320x320x3 卷积核&…...

前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode

JSX <div className"container"><p onClick{onClick} data-name"p1">hello <b>{name}</b></p><img src{imgSrc}/><MyComponent title{title}></MyComponent> </div>Vue 模板 <div class"co…...

RabbitMQ启动报错:Error during startup: {error, {schema_integrity_check_failed,

报错信息如下&#xff1a; Error during startup: {error,{schema_integrity_check_failed,[{table_attributes_mismatch,rabbit_user,[username,password_hash,tags,hashing_algorithm,limits],[username,password_hash,tags,hashing_algorithm]},{table_attributes_mismatch…...

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities)

系列文章目录 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&#xff09;----课程实验环境搭建&#x…...

Java核心: 为图片生成水印

今天干了一件特别不务正业的事&#xff0c;做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人&#xff0c;手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能&#xff0c;但会把我的图片上传到他们的服务器&#xff0c;身份证太…...

Spark MLlib 机器学习详解

目录 &#x1f349;引言 &#x1f349;Spark MLlib 简介 &#x1f348; 主要特点 &#x1f348;常见应用场景 &#x1f349;安装与配置 &#x1f349;数据处理与准备 &#x1f348;加载数据 &#x1f348;数据预处理 &#x1f349;分类模型 &#x1f348;逻辑回归 &a…...

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...