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,所以我们需要对词进行编码。

  1. 首先统计语料中有多少个词,每个词出现的次数是多少
  2. 给每个词进行id编码,为了扩展性,这里留出几个未定义的词
  3. 同时也将每个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之数据预处理相关推荐

  1. EEGLAB系列教程5:数据预处理2(ICA去伪迹)

    EEGLAB系列教程5:数据预处理2(ICA去伪迹) 今天介绍EEG数据处理系列教程5,在前面的几期中,已经介绍了数据基本处理过程,可以参见以下链接: EEGLAB系列教程1:安装和启动 EEGLAB ...

  2. python 保留顺序去重_Python数据分析入门教程(二):数据预处理

    作者 | CDA数据分析师 从菜市场买来的菜,总有一些不太好的,所以把菜买回来以后要先做一遍预处理,把那些不太好的部分扔掉.现实中大部分的数据都类似于菜市场的菜品,拿到以后都要先做一次预处理. 常见的 ...

  3. 小白自总结【数据预处理】英文数据预处理

    任务介绍 (2--6) 任务心得 1)平时学习Python的过程中缺少实践,使得实际修改代码时花费较长时间: 2)对字符编码不清楚,如在"gbk"."utf-8" ...

  4. python预处理后变量情况描述_【数据预处理】python旅游网站数据清洗实践

    利用python进行数据预处理,不能离开pandas,我看过的教程在介绍数据预处理时的流程都是:numpy介绍.pandas介绍.数据预处理. 对于numpy和pandas,我的经验是不用刻意去记,知 ...

  5. 【mmdetection3d】——03自定义数据预处理流程

    教程 3: 自定义数据预处理流程 数据预处理流程的设计 遵循一般惯例,我们使用 Dataset 和 DataLoader 来调用多个进程进行数据的加载.Dataset 将会返回与模型前向传播的参数所对 ...

  6. NLP数据预处理与词嵌入

    NLP数据预处理与词嵌入 NLP数据预处理 读入语料库 首先准备一个语料库,实际上就是一个 txt 文件,这里用的是小说 time machine ,该语料库比较短小,仅有 ~3000 行,~3000 ...

  7. Letswave 教程:脑电数据预处理与叠加平均

    Letswave 教程:脑电数据预处理与叠加平均 1 实验与工具介绍 2 前期准备 2.1 letswave7安装与数据集准备 2.2 数据集导入 2.3 数据集检查 3 数据预处理 3.1 通道位置 ...

  8. [nlp] 小傻学数据预处理

    [nlp] 小傻学数据预处理 1. 分词 1.1 分词方法 1.1.1 基于规格(词典.词库) 1.1.2 基于知识理解 1.1.3 基于(词频)统计 1.2 分词工具 1.3 jieba分词原理 1 ...

  9. letswave7中文教程3:脑电数据预处理-ICA去除伪影

    目录 ICA/BSS的理论与模型 第5步:计算ICA矩阵 第6步:识别伪影成分 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 ICA/BSS的理论与模型 ...

最新文章

  1. 文巾解题 167. 两数之和 II - 输入有序数组
  2. 文本分类入门(四)训练Part 1
  3. 锁表的进程和语句,并杀掉
  4. 大二下学期软件工程概论总结
  5. VMware 提示与 Device/Credential Guard 不兼容
  6. 什么是UIScrollView
  7. 2017北京国庆刷题Day2 afternoon
  8. qt定时器暂停与重新开始_Qt编写自定义控件22-蚂蚁线
  9. 透视条件(Condition)技术
  10. 2元参数matlab图,二元作用参数 - 仿真模拟 - MATLAB - 小木虫论坛-学术科研互动平台...
  11. 士不可以不弘毅,任重而道远
  12. android 微信是否安装app,Android判断手机是否安装微信(总结)
  13. 最新苹果手机备份同步工具 iMazing2.16.4官方免费下载
  14. Kali linux安装步骤,史上最详细的步骤,傻瓜式教学
  15. 研发漫画之二:救火还需纵火犯
  16. element ui走马灯实现网易云音乐轮播图
  17. java 透明对话框_java实现jframe透明窗体示例
  18. 职场上,英文流利会有额外收益吗?
  19. matlab 理想低通滤波器函数,理想滤波器、原型模拟滤波器和窗函数的特性matlab6...
  20. sqlyog怎么连接mysql_Windows Server系统部署MySQL数据库

热门文章

  1. Airtest双11领喵币代码
  2. html50页面显示在线人数,50个网页常用小代码
  3. python图片压缩原理_LZ77无损压缩算法原理详解(结合图片和简单代码)
  4. vue结合elementUI,MinUi
  5. 为什么我说,卖货直播平台开发的定位可以从这方面入手
  6. Java web接入google身份验证器二次验证
  7. 计算机视觉之旅(Day5)
  8. 【算法】递归|迷宫回溯问题|八皇后问题
  9. RFID资产管理|超高频RFID技术在医院资产管理项目中的应用-铨顺宏
  10. 计算机软件方法专利撰写,干货 | 计算机软件专利撰写模板