目录

  • 读取文本数据集
  • 分词
  • 词表

文本预处理的基本步骤包括以下几个:

  1. 将文本作为字符串加载到内存中。
  2. 将字符串拆分为词元(如单词和字符)。
  3. 建立一个词表,将拆分的词元映射到数字索引。
  4. 将文本转换为数字索引序列,方便模型操作。

读取文本数据集

以今日头条中文新闻(短文本)分类数据集为例。其包含38万条短新闻,包含于15个类中。
头条新闻数据集下载

数据格式如下所示:

6551700932705387022_!_101_!_news_culture_!_京城最值得你来场文化之旅的博物馆_!_保利集团,马未都,中国科学技术馆,博物馆,新中国

每行为一条数据,以_!_分割的个字段,从前往后分别是 新闻ID,分类code(见下文),分类名称(见下文),新闻字符串(仅含标题),新闻关键词。

下面读取数据,并且切除ID,分类code,分类名称,新闻关键字,只保留标题文本。

# 导入包
import re# 定义要去掉的标点
punc = '[~`!#$%^&*()_+-=|\';":/.,?><~·!@#¥%……&*()——+-=“:’;、。,?》《{}]'with open('toutiao_cat_data.txt', 'r', encoding='utf') as f:lines = f.readlines()for i in range(len(lines)):lines[i] = lines[i].strip().split('_!_')[3]lines[i]= re.sub(punc, '', lines[i])  # 将文本中的标点用空字符代替print(f'文本总行数:{len(lines)}')
for i in range(5):print(lines[i])

结果如下:

文本总行数:382688
京城最值得你来场文化之旅的博物馆
发酵床的垫料种类有哪些哪种更好
上联黄山黄河黄皮肤黄土高原怎么对下联
林徽因什么理由拒绝了徐志摩而选择梁思成为终身伴侣
黄杨木是什么树

分词

在语言学中,词是具备独立意义的最小单位。由合适的词进行排列组合形成有意义的句子。对文本信息进行处理的第一步就是进行分词。
如果是英文文本的话,分词就简单许多了,由于英文的语法特性,其句子中的每个词都用空格分开,因此英文分词就直接利用python自带的split()函数以空格分割就行。
如果文本是中文的话,情况就要复杂一些了。一个分词策略就是:我们先准备一个很大很大词典,对一句话中的第一个字进行查询,如果它能够在词典中查到,说明它是词,那就取前两个字,再进行查询,一直到无法查询位置,然后再将下标移动到查不到词的最后一个字,重复。
感觉自己实现有一点复杂,还好python有相应的库——jieba (得自己下载)。利用jieba.lcut()就可以进行分词。

import jieba# 提高jieba的日志等级,我也不知道为啥,不提高就会警告
import logging
jieba.setLogLevel(logging.INFO)# 创建一个空列表来储存分词后的结果
token_lines = []for line in lines:token_lines.append(jieba.lcut(line))# 打印两条看看效果
print(token_lines[0])
print(token_lines[1])

结果如下:

['京城', '最', '值得', '你', '来场', '文化', '之旅', '的', '博物馆']
['发酵', '床', '的', '垫料', '种类', '有', '哪些', '哪', '种', '更好']

词表

我们通过头条新闻数据集来构建一个自己的词表。
首先将分词结果都添加到一个列表中,再将重复的单词去掉,最后再将其变成字典的形式方便索引,因为学习模型无法处理字符串,只能处理数字。

# 创建一个空列表保存所有词
token = []for token_line in token_lines:token.extend(token_line)# 利用collections.Counter()来统计一下词频,它会将统计结果返回为一个字典的形式
import collections
vocab = collections.Counter(token)# 可视化按词频排序的前3000个单词的出现频率
from matplotlib import pyplot as plt
x = [i for i in range(3000)]
y = list(vocab.values())[0:3000]
plt.plot(x, y)
plt.show()# 创建一个空字典来存储词和其对应的索引
vocab_dict = {}
for i, j in enumerate(vocab):vocab_dict[j] = iprint(vocab_dict['你'])
print(vocab_dict['文化'])

结果如下:

3
5

词频图如下:

(NLP)文本预处理相关推荐

  1. NLP文本预处理:步骤、示例 | 附github源码

    点击关注我哦 一篇文章带你了解NLP文本预处理:步骤.示例 | 附github源码 注:关注[小白玩转Python]公众号,后台回复[NLP文本预处理],可以获取完整源码以及项目所需数据集. 文本数据 ...

  2. NLP | 文本预处理

    一.文本预处理 作用:文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选择, ...

  3. nlp文本预处理构建词汇表

    文本预处理: 建立字典,将每个词或者字映射到一个唯一的索引(index) 将文本从词或者字的序列转换为索引的序列,方便输入模型 并且label同步映射 import jsonfrom ner impo ...

  4. NLP —— 文本预处理

    一.分词简介 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形 ...

  5. NLP文本预处理去除标点符号

    from string import punctuation import re import sys reload(sys) sys.setdefaultencoding('utf-8')impor ...

  6. 文本预处理方法_生产中的自然语言处理27种快速文本预处理方法

    文本预处理方法 大纲(Outline) Estimates state that 70%–85% of the world's data is text (unstructured data) [1] ...

  7. NLP任务中的文本预处理步骤、工具和示例

    作者 | Viet Hoang Tran Duong 来源 | DeepHub IMBA 头图 | CSDN付费下载于视觉中国 数据是新的石油,文本是我们需要更深入钻探的油井.文本数据无处不在,在实际 ...

  8. 【NLP】文本预处理:删除单词停用词

    作者 | Chetna Khanna 编译 | VK 来源 | Towards Data Science 我们很清楚这样一个事实:计算机可以很容易地处理数字. 然而,我们掌握的大部分信息都是以文本的形 ...

  9. 使用Stanford NLP software进行中文文本预处理

    中文文本预处理的几个主要步骤有: 中文分词,词性标注,生成词向量,生成中文依存语法树. Stanford NLP software是Stanford NLP小组提供的一个NLP处理工具集合,部分工具支 ...

  10. 自然语言处理(NLP)入门(3)——文本预处理

    **数据和特征决定了机器学习的上限,而模型和算法只是无线逼近这个上限.**正是因为数据处理的重要性,在NLP算法的工作中,大部分的时间是与数据打交道,文本预处理更是重中之重! 文本预处理 方法: 文本 ...

最新文章

  1. 用了这么久配置中心,还不知道长轮询是什么?
  2. 一起来造一个RxJava,揭秘RxJava的实现原理
  3. ALV中调用Excel, 丢掉前面的0问题解决
  4. html5 实现坦克大战,HTML5实现坦克大战(一)
  5. redis5 外部不能连接_【硬见小百科】PCB连接的方法
  6. 计算机语言由低到高就被分为了什么阶段,2004年4月高等教育自学考试认知心理试题...
  7. 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
  8. (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  9. 卷积神经网络(CNN)结尾篇:可视化跟踪(Visualize)
  10. SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
  11. php自定义函数指定参数类型,php – Doctrine:如何添加带可选参数的自定义函数?...
  12. hist 和imhist的区别
  13. 一次全链路压测-总结
  14. 工厂智能化远程运营管理系统方案
  15. FlashFXP,flashfxp安装
  16. 电路串联和并联图解_电路的串联和并联有什么区别
  17. FlinkX脏值处理
  18. 大陆地区OpenStack项目Core现状(截至2016年1月28日,转载自陈沙克日志)
  19. AltiumDesigner PCB案牍(2)——自定义原理图模板
  20. a标签下载txt,会直接打开txt文件的处理方法

热门文章

  1. 开机 米兔积木机器人_小米之家携手米兔积木机器人 开展编程表演赛
  2. Android面试题及答案
  3. 线性代数:置换、转置矩阵和向量空间
  4. 怎么用白光干涉仪的拼接测量功能
  5. Tomcat部署Web项目
  6. svn初步安装使用(详细教程图文操作)
  7. STL 源码分析之string(一)基础篇
  8. 过亿海量数据处理分析
  9. RISC-V SiFive U64内核——HPM硬件性能监视器
  10. SQL Server域Alwayson 部署