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("&")
'&'
#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入门——数据预处理:编码规范化
编码规范化 在计算机中,我们需要将字符与字节序列之间建立起映射关系,这个过程被称为编码。有许多不同的编码方式,例如 ASCII、UTF-8、UTF-16 和 GBK 等。这些编码方式会将每个字符编码为一个或多个字节,以便于在计算机、网络和其…...
代码随想录算法训练营第四十八天| 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
70. 爬楼梯 (进阶) 题目链接:70. 爬楼梯 (进阶) 文档讲解:代码随想录/爬楼梯 (进阶) 状态:已完成(0遍) 解题过程 这几天博主忙着面试和入职&am…...
c++11 constexpr关键字
constexpr 是 C11 引入的一个关键字,它允许在编译时计算表达式的值,并将这些值存储在程序的常量部分中。这意味着 constexpr 变量和函数可以在编译时进行求值,从而避免了运行时的开销。 constexpr变量 constexpr 变量必须在编译时初始化&am…...
ios 获取图片的一部分区域
可以使用如下的代码: // 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 基本操作 元素进栈出栈 只能在栈顶进行!!! 经常考的题: 穿插的进行进栈和出栈 可能有多个选项 1.3 顺序栈 1.3.1 初始化 下标是从0开始的 1.3.2 进栈 更简单的写法: 1.3…...
数据库(入门)
文章目录 一、数据库(DB) 二、数据库管理系统(DBMS) 三、SQL(结构化查询语言) 四、三者的关系 五、端口号(port number) 一、数据库(DB) 定义:按照一定格式存储数据的一些文件的组合。 简单来…...
ChatTTS+Python编程搞定语音报时小程序
文字转语音神器Python编程搞定语音报时小程序 今天一个好哥们发了一个文字转语音的AI神器的短视频。这个神器的网站是[ChatTTS - Text-to-Speech for Conversational Scenarios][https://chattts.com/],如下图所示: 这个开源项目可以从github.com上下载…...
【Mac】Alfred 5 for Mac(苹果效率提升工具)v5.5软件介绍及安装教程
软件介绍 Alfred 是适用于 Mac 操作系统的流行生产力应用程序。它旨在帮助用户在 Mac 电脑上更高效地启动应用程序、搜索文件和文件夹以及执行各种任务。借助 Alfred,用户可以创建自定义键盘快捷方式、设置自定义工作流程并使用热键访问功能。 Alfred for Mac 的一…...
PDF文件处理不再复杂:9个Python库让一切变得简单
大家好,这里是程序员晚枫,2年前发布了一个开源项目:python-office,目前在GitHub上有800⭐,最近在开发新功能时感觉Python知识有点不够用了。 所以打算从2方面补充自己的知识:研究优秀的第三方库和学习Pyth…...
安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?
安防视频融合汇聚平台EasyCVR兼容性强,可支持Windows系统、Linux系统以及国产化操作系统等,平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-FLV、…...
Liunx音频
一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声: echo -e "\a"(这里的 -e 选项允许解释反斜杠转义的字符,而 \a 是一个响铃(bell)字符) 二. beep 下载对应的包 yum -y install beep 发声命令 be…...
2024前端面试准备3-JS异步-进阶
1.请描述Event loop(事件循环)的机制。 JS是单线程的,异步需要基于毁掉来实现,event loop 就是异步回调的实现原理。 同步代码,一行一行放在Call Stack执行,遇到异步任务,标记一下让其他线程去处…...
lm studio 0.2.24国内下载模型
1.修改C:\Users\Admin\AppData\Local\LM-Studio\app-0.2.24\resources\app\.webpack\main中的3个js文件: index.js llmworker.js worker.js 中替换huggingface.co为hf-mirror.com。这样就能实现搜索模型文件 2.点击模型,选择下载,出现下载…...
卷积池化尺寸计算公式
卷积层[Conv]: 卷积CNN是我们最常使用的,但是有时候需要观察他的输出前后的差异,这里描述下计算方式,具体如下: 图片大小:WxHxD W:宽 H:高 D:通道(RGB) 例: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,
报错信息如下: 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(操作系统)学习笔记(一)---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建&#x…...
Java核心: 为图片生成水印
今天干了一件特别不务正业的事,做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人,手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能,但会把我的图片上传到他们的服务器,身份证太…...
Spark MLlib 机器学习详解
目录 🍉引言 🍉Spark MLlib 简介 🍈 主要特点 🍈常见应用场景 🍉安装与配置 🍉数据处理与准备 🍈加载数据 🍈数据预处理 🍉分类模型 🍈逻辑回归 &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…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...
初级程序员入门指南
初级程序员入门指南 在数字化浪潮中,编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言,明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 (一)编程语言抉择 编…...
