热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

文本预处理(文本准备)

1.文本预处理概述和机器学习任务一样,自然语言处理任务的第一步工作也是文本(数据)准备或叫文本(数据)预处理

1. 文本预处理概述

和机器学习任务一样,自然语言处理任务的第一步工作也是文本(数据)准备或叫文本(数据)预处理。文本预处理的流程如下图所示:
在这里插入图片描述

文本预处理工作以分词步骤为界,之前的文本标准化和文本清洗是语料级(篇章级)颗粒度文本处理,之后词的清洗、标准化和文本表示是单词级颗粒度文本处理。

语料级文本处理的作用对象是数据集中的每一篇语料,它比单词级文本处理效率更高,并且可以提前去除影响分词效果的障碍(如:英文中按空格分词,但与单词直接相邻的逗号等标点会产生非标准单词的分词结果(‘word,’ 标准形式应该是’word’))。

单词级文本处理执行在语料分词之后,它的处理对象是每篇语料中的每一个单词,主要执行单词的过滤、单词写法的标准化(如大写数字与阿拉伯数字书写形式的统一、统一英文单词不同时态、语态书写形式的统一等)、拼写纠错和文本表示四大步工作。


2. 文本标准化


2.1 字符编码标准化(全角英文字符转半角)

在计算机中,所有中文字符都是全角字符,而英文字母、阿拉伯数字及符号有全角和半角两种unicode编码方式。它们的全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E),半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E);而空格符比较特殊,全角unicode编码为12288 (0x3000),半角为32 (0x20)。

可见除空格符外,每个全角字符的unicode编码等于其半角字符的unicode编码加65248,因此字符unicode编码标准化实现代码如下:

#全角转半角
def full_to_half(text:str): #输入为一个句子_text = ""for char in text:inside_code = ord(char)#以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值if inside_code == 12288: #全角空格直接转换inside_code = 32elif 65281 <= inside_code <= 65374: #全角字符(除空格)根据关系转化inside_code -= 65248_text += chr(inside_code)return _text

2.2 英文大小写字母统一化

英文字母大小写的统一化可直接借助python内置字符串方法实现,具体代码如下:

#大写字母转为小写字母
def upper2lower(text:str):return text.lower()

2.3 中文繁简字统一化

中文繁体字与简体字的统一化借助opencc包的OpenCC类实现,该类通过不同的转换功能代码实现不同的文字转化功能,转换功能代码表如下所示:


转换代码功能说明
t2s繁体中文转简体
s2t简体中文转繁体
s2twp简体中文转繁体中文(带短语)
t2hk繁体中文转繁体(香港标准)
hk2s繁体中文(香港标准)转简体中文
s2hk简体中文转繁体中文(香港标准)
t2tw繁体中文转繁体(台湾标准)
tw2s繁体中文(台湾标准)转简体中文
tw2sp繁体中文(台湾标准)转简体中文(带短语)
s2tw简体中文转换成繁体中文(台湾标准)

繁简体统一化实现代码如下:

#大写字母转为小写字母
def chinese_standard(text:str, conversion=&#39;t2s&#39;):cc = OpenCC(conversion)return cc.convert(text)

3. 文本清洗

文本清洗中,常通过Unicode码过滤来去除非文本内容。Unicode码表中,中日韩统一表意文字字符区间为 4E00~9FA5,半角英文字母、阿拉伯数字及符号的字符区间为 0x21~0x7E,所以标准文本字符范围为 [4E00,9FA5]∪[0x21,0x7E][\text{4E00}, \text{9FA5}] \cup[\text{0x21}, \text{0x7E}][4E00,9FA5][0x21,0x7E]

非文本内容过滤与标点符号过滤一同借助正则表达式实现,具体代码如下:

import re
def clear_character(text): pattern = ["[^\u4e00-\u9fa5^a-z^A-Z^0-9^\u0020^\u0027^\u002e]", # save_standing_character"\.$" # remove_full_stop] #只取合法字符 return re.sub(&#39;|&#39;.join(pattern), &#39;&#39;, text)

4. 分词

敬请详见作者文章: 文本表示:分词.


5. 词的清洗

敬请详见作者文章: 文本表示:词的清洗.


6. 词的标准化

敬请详见作者文章: 文本表示:词的标准化.


7. 拼写纠错

敬请详见作者文章: 文本预处理:拼写纠错.


7. 文本表示

敬请详见作者文章: 文本表示:文本表示(文本特征编码).


推荐阅读
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • Python默认字符解析:深入理解Python中的字符串处理
    在Python中,字符串是编程中最基本且常用的数据类型之一。尽管许多初学者是从C语言开始接触字符串,通常通过经典的“Hello, World!”程序入门,但Python对字符串的处理方式更为灵活和强大。本文将深入探讨Python中的字符串处理机制,包括字符串的创建、操作、格式化以及编码解码等方面,帮助读者全面理解Python字符串的特性和应用。 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射)
    提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射) ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 使用种子数据在Asp.NET Core 3.0 Web API迁移过程中写入数据库的详细步骤
    本文详细阐述了如何在Asp.NET Core 3.0 Web API的迁移过程中利用种子数据将信息写入数据库的具体步骤。对于开发人员而言,掌握这一技术能够显著提高数据初始化的效率和准确性。文章不仅提供了详细的代码示例,还深入解析了每个步骤背后的原理,帮助读者更好地理解和应用这一方法。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
author-avatar
mobiledu2502860093
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有