nlp小白教程:word2vec之数据预处理
1. 数据预处理
首先说的就是分词,对英语来说每个词与词之间是通过空格辨别的,例如I love natural language processing
,每个词之间都是有空格的,所以很容划分为[i, love, natural, language, processing]
但是中文的词并没有分开,而是全部连在一起的,例如我爱自然语言处理
,我们可以通过分词工具进行切分,我这里使用的jieba分词
import jiebares = jieba.cut("我爱自然语言处理",cut_all=False)
print(list(res)) # ['我', '爱', '自然语言', '处理']
首先我们需要准备一段预料,一般情况下通常是一个非常大的语料库,这样才能覆盖更多的词语,训练的词向量也会更加准确,但是这里只是为了演示,所以随便搞一点就行。正好最近在看仙逆,截取前两章节作为训练语料。我们将其保存到一个txt中
首先我们需要对去除每一行的换行符,然后将每一行拼接在一起,送到jieba分词中
import jiebadef read_text_and_cut_word(cropus_path):data = []with open(cropus_path, 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:line = line.strip()if line != '': # 过滤掉空白行data.append(line)sentences = "\n".join(data) # 将文本拼接成一个字符串words = jieba.cut(sentences,cut_all=False) with open("p_input.txt", "w") as f: # 将分词的结果保存到txt中f.write(' '.join(words))read_text_and_cut_word('news.txt')
原始的文本已经分好词保存下来了,可以看到分的词里面有很多中文的停用词和标点符号,。?、\n
等等,通常情况下,分词的时候需要加载我们自定义的停用词,例如啊,的,是
等等,不过为了简单,这里只去除标点和数字,
def handle_stopwords_and_whitesapce():# 标点符号集stopwords = '''~!@#$%^&*()_+`1234567890-={}[]::";'<>,.?/|\、·!()¥“”‘’《》,。?/—-【】….'''stopwords_set = set([i for i in stopwords])stopwords_set.add("br") # 异常词也加入此集,方便去除with open("temp.txt", "r", encoding="utf-8") as f:lines = f.readlines()data = []for line in lines:line = line.strip()for s in stopwords_set:line = line.strip().replace(s, "")line = line.replace(" "," ").replace(" "," ")if line != "" and line != " ":data.append(line)all_text = " ".join(data)with open("train.txt", "w") as f:f.write(all_text)handle_stopwords_and_whitesapce()
很好,语聊基本就处理好了,现在每个词之间使用空格进行分割,我们就可以将切好的词输入到我们的网络中训练了。但是由于计算机只认识01,所以我们需要对词进行编码。
- 首先统计语料中有多少个词,每个词出现的次数是多少
- 给每个词进行id编码,为了扩展性,这里留出几个未定义的词
- 同时也将每个id编码重新映射为词
from collections import Counterword2idx = {}
idx2word = {}
max_idx = 0
def build_vocab(cropus,unused_cnt=100):with open(cropus, "r", encoding="utf-8") as f:all_text = f.readline()vocabs = all_text.split(" ") # 读出所有的词vocab_dict = dict(Counter(vocabs).most_common()) # 统计每个词出现的频率for i,w in enumerate(vocab_dict.keys()): word2idx[w] = i + unused_cnt # 为每个词进行id编码idx2word[i + unused_cnt] = w # id重新映射为词build_vocab('train.txt')words = ["铁柱", "坐在", "村内", "的", "小", "路边", "望", "着", "蔚蓝", "的", "天空"]token_id = [word2idx.get(w, 0) for w in words]
print(' '.join(words)) # 铁柱 坐在 村内 的 小 路边 望 着 蔚蓝 的 天空
print(token_id) # [101, 317, 318, 100, 456, 457, 124, 107, 458, 100, 459]newwords = [idx2word.get(i, '<UNK>') for i in token_id]
print(newwords) # ['铁柱', '坐在', '村内', '的', '小', '路边', '望', '着', '蔚蓝', '的', '天空']
nlp小白教程:word2vec之数据预处理相关推荐
- EEGLAB系列教程5:数据预处理2(ICA去伪迹)
EEGLAB系列教程5:数据预处理2(ICA去伪迹) 今天介绍EEG数据处理系列教程5,在前面的几期中,已经介绍了数据基本处理过程,可以参见以下链接: EEGLAB系列教程1:安装和启动 EEGLAB ...
- python 保留顺序去重_Python数据分析入门教程(二):数据预处理
作者 | CDA数据分析师 从菜市场买来的菜,总有一些不太好的,所以把菜买回来以后要先做一遍预处理,把那些不太好的部分扔掉.现实中大部分的数据都类似于菜市场的菜品,拿到以后都要先做一次预处理. 常见的 ...
- 小白自总结【数据预处理】英文数据预处理
任务介绍 (2--6) 任务心得 1)平时学习Python的过程中缺少实践,使得实际修改代码时花费较长时间: 2)对字符编码不清楚,如在"gbk"."utf-8" ...
- python预处理后变量情况描述_【数据预处理】python旅游网站数据清洗实践
利用python进行数据预处理,不能离开pandas,我看过的教程在介绍数据预处理时的流程都是:numpy介绍.pandas介绍.数据预处理. 对于numpy和pandas,我的经验是不用刻意去记,知 ...
- 【mmdetection3d】——03自定义数据预处理流程
教程 3: 自定义数据预处理流程 数据预处理流程的设计 遵循一般惯例,我们使用 Dataset 和 DataLoader 来调用多个进程进行数据的加载.Dataset 将会返回与模型前向传播的参数所对 ...
- NLP数据预处理与词嵌入
NLP数据预处理与词嵌入 NLP数据预处理 读入语料库 首先准备一个语料库,实际上就是一个 txt 文件,这里用的是小说 time machine ,该语料库比较短小,仅有 ~3000 行,~3000 ...
- Letswave 教程:脑电数据预处理与叠加平均
Letswave 教程:脑电数据预处理与叠加平均 1 实验与工具介绍 2 前期准备 2.1 letswave7安装与数据集准备 2.2 数据集导入 2.3 数据集检查 3 数据预处理 3.1 通道位置 ...
- [nlp] 小傻学数据预处理
[nlp] 小傻学数据预处理 1. 分词 1.1 分词方法 1.1.1 基于规格(词典.词库) 1.1.2 基于知识理解 1.1.3 基于(词频)统计 1.2 分词工具 1.3 jieba分词原理 1 ...
- letswave7中文教程3:脑电数据预处理-ICA去除伪影
目录 ICA/BSS的理论与模型 第5步:计算ICA矩阵 第6步:识别伪影成分 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 ICA/BSS的理论与模型 ...
最新文章
- 文巾解题 167. 两数之和 II - 输入有序数组
- 文本分类入门(四)训练Part 1
- 锁表的进程和语句,并杀掉
- 大二下学期软件工程概论总结
- VMware 提示与 Device/Credential Guard 不兼容
- 什么是UIScrollView
- 2017北京国庆刷题Day2 afternoon
- qt定时器暂停与重新开始_Qt编写自定义控件22-蚂蚁线
- 透视条件(Condition)技术
- 2元参数matlab图,二元作用参数 - 仿真模拟 - MATLAB - 小木虫论坛-学术科研互动平台...
- 士不可以不弘毅,任重而道远
- android 微信是否安装app,Android判断手机是否安装微信(总结)
- 最新苹果手机备份同步工具 iMazing2.16.4官方免费下载
- Kali linux安装步骤,史上最详细的步骤,傻瓜式教学
- 研发漫画之二:救火还需纵火犯
- element ui走马灯实现网易云音乐轮播图
- java 透明对话框_java实现jframe透明窗体示例
- 职场上,英文流利会有额外收益吗?
- matlab 理想低通滤波器函数,理想滤波器、原型模拟滤波器和窗函数的特性matlab6...
- sqlyog怎么连接mysql_Windows Server系统部署MySQL数据库
热门文章
- Airtest双11领喵币代码
- html50页面显示在线人数,50个网页常用小代码
- python图片压缩原理_LZ77无损压缩算法原理详解(结合图片和简单代码)
- vue结合elementUI,MinUi
- 为什么我说,卖货直播平台开发的定位可以从这方面入手
- Java web接入google身份验证器二次验证
- 计算机视觉之旅(Day5)
- 【算法】递归|迷宫回溯问题|八皇后问题
- RFID资产管理|超高频RFID技术在医院资产管理项目中的应用-铨顺宏
- 计算机软件方法专利撰写,干货 | 计算机软件专利撰写模板