(NLP)文本预处理

目录

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

  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

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)

import collections
vocab = collections.Counter(token)

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] = i

print(vocab_dict['你'])
print(vocab_dict['文化'])

结果如下:

3
5

词频图如下:

(NLP)文本预处理

Original: https://blog.csdn.net/qq_43871173/article/details/125731254
Author: lambda99
Title: (NLP)文本预处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544515/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球