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 相关文章推荐
跟老齐学Python之坑爹的字符编码
Sep 28 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
python如何生成各种随机分布图
Aug 27 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
python实现剪切功能
Jan 23 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
在python中求分布函数相关的包实例
Apr 15 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
python中adb有什么功能
Jun 07 Python
如何理解python对象
Jun 21 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格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php计算年龄精准到年月日
2015/11/17 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
python静态方法实例
2015/01/14 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
Python 图片处理库exifread详解
2021/02/25 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
AJAX的全称是什么
2012/11/06 面试题
食品销售计划书
2014/04/26 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
医院志愿者活动总结
2015/05/06 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB