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中的XML 工具
Apr 13 Python
在windows系统中实现python3安装lxml
Mar 23 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
Python中最大递归深度值的探讨
Mar 05 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
Django中FilePathField字段的用法
May 21 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
讲解Python实例练习逆序输出字符串
May 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
PHP4实际应用经验篇(5)
2006/10/09 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
破解Session cookie的方法
2006/07/28 Javascript
js 字符串操作函数
2009/07/25 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
初步探究Python程序的执行原理
2015/04/11 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
python实现顺序表的简单代码
2018/09/28 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
什么是网络协议
2016/04/07 面试题
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
2015年测量员工作总结
2015/05/23 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
python3 字符串str和bytes相互转换
2022/03/23 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android