python获取txt文件词向量过程详解


Posted in Python onJuly 05, 2019

在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直接导入模型然后indexword即可。

因为这是一个txt大文件,尝试了DataFrame,np.loadtxt等,都没有成功,其中主要遇到的问题是:

  • 如何读取完整的大文件,而不会出现内存不足memery error等问题
  • 将读取出来的文件,保存为npy文件
  • 根据词找到对应的向量

解决办法

尝试使用的代码:

代码1:
try:
lines=np.loadtxt(filepath)
catch:
感觉这块不会写了咦,,,
  print(ValueError)
但这样的话,它就不会继续循环去读上边的txt了呢
代码2:
lines=[]
with open(filepath) as f:
  for line in f:
    lines.append(line)
np.save(filepath,lines)
代码3
 
def readEmbedFile(embedFile):
#   embedId = {}
#   input = open(embedFile,'r',encoding="utf-8")
#   lines = []
#   a=0
#   for line in input:
#     lines.append(line)
#     a=a+1
#     print(a)
#   nwords = len(lines) - 1
#   splits = lines[1].strip().split(' ') # 因为第一行是统计信息,所以用第二行
#   dim = len(splits) - 1
#   embeddings=[]
#   # embeddings = [[0 for col in range(dim)] for row in range(nwords)]
#   b=0
#   for lineId in range(len(lines)):
#     b=b+1
#     print(b)
#     splits = lines[lineId].split(' ')
#     if len(splits) > 2:
#       # embedId赋值
#       embedId[splits[0]] = lineId
#       # embeddings赋值
#       emb = [float(splits[i]) for i in range(1, 300)]
#       embeddings.append(emb)
#   return embedId, embeddings
代码4:
def load_txt(filename):
  lines=[]
  vec_dict={}
  with open(filename,r) as f:
    for line in f:
    list=line.strip()
    lines.append(line)
  for i, line in emuate(lines):
    if i=0:
      continue
    line=line.split(" ")
    wordID=line[0]
    wordvec=[float line[i] for i in range(1,300)]
  vec_dict[wordId]=np.array(wordvec)  
 
  return vec_dict

具体内存不足主要的原因是:

我的虚拟机中确实内存不太够,后来使用实验室32G的主机后,可以得到idvec,而得不到向量的,报的错还是memory error.
另一个原因,是需要把词向量转换为float形式,在python中str 占的内存>float类型,如代码所示:

print("str",sys.getsizeof(""))
print("float",sys.getsizeof(1.1))
print("int",sys.getsizeof(1))
print("list",sys.getsizeof([]))
print("tuple",sys.getsizeof(()))
print("dic",sys.getsizeof([]))
str 49
float 24
int 28
list 64
tuple 48
dic 64

在我的电脑,64位操作系统,64位的python, 所占内存大小排序为:

dic=list>str>tuple>int>float

读取时候可以用np.load().item就可以复原原来的字典,主要参照下述文件:

然后通过python的字典操作就可以遍历得到每个词的词向量了,dic[vocab]

心得

距离完全解决项目的问题还有5~6的大关卡,但静下心来,一步步地做总会突破的呀!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
深入理解python中的闭包和装饰器
Jun 12 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python3实现高效的端口扫描
Aug 31 Python
python多线程实现TCP服务端
Sep 03 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
利用python绘制数据曲线图的实现
Apr 09 Python
Django中的AutoField字段使用
May 18 Python
python三引号如何输入
Jul 06 Python
Python 的字典(Dict)是如何存储的
Jul 05 #Python
关于Python 的简单栅格图像边界提取方法
Jul 05 #Python
Python3+Appium安装使用教程
Jul 05 #Python
Python叠加两幅栅格图像的实现方法
Jul 05 #Python
用vue.js组件模拟v-model指令实例方法
Jul 05 #Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 #Python
Python 计算任意两向量之间的夹角方法
Jul 05 #Python
You might like
php FPDF类库应用实现代码
2009/03/20 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
numpy.linspace 生成等差数组的方法
2018/07/02 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
什么是lambda函数
2013/09/17 面试题
工地门卫岗位职责范本
2014/07/01 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
小英雄雨来观后感
2015/06/09 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Python中的pprint模块
2021/11/27 Python
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server