python - 麻烦加载手套 840B 300d 矢量

标签 python nlp stanford-nlp word2vec

似乎格式是,对于每一行,字符串就像'word number number .....'。所以很容易 split 它。 但是当我用下面的脚本拆分它们时

import numpy as np
def loadGloveModel(gloveFile):
    print "Loading Glove Model"
    f = open(gloveFile,'r')
    model = {}
    for line in f:
        splitLine = line.split()
        word = splitLine[0]
        embedding = np.array([float(val) for val in splitLine[1:]])
        model[word] = embedding
    print "Done.",len(model)," words loaded!"
    return model

我加载手套 840B 300d.txt。但是出现错误,我打印了我得到的 splitLine

['contact', 'name@domain.com', '0.016426', '0.13728', '0.18781', '0.75784', '0.44012', '0.096794' ... ]

['.', '.', '.', '.', '0.033459', '-0.085658', '0.27155', ...]

请注意,此脚本在 glove.6b 中运行良好。*

最佳答案

代码适用于以下文件:glove.6B.*d.txt、glove.42B.*d.txt,但不适用于 glove.6B.300d.txt。这是因为 glove.6B.300d.txt 中包含一个单词的空格。例如,它有这样一个词:'. . .'这些点之间有空格。我通过更改这一行解决了这个问题:

splitLine = line.split()

进入

splitLine = line.split(' ')

所以你的代码必须是这样的:

import numpy as np
def loadGloveModel(gloveFile):
    print "Loading Glove Model"
    f = open(gloveFile,'r', encoding='utf8')
    model = {}
    for line in f:
        splitLine = line.split(' ')
        word = splitLine[0]
        embedding = np.asarray(splitLine[1:], dtype='float32')
        model[word] = embedding
    print "Done.",len(model)," words loaded!"
    return model

关于python - 麻烦加载手套 840B 300d 矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083826/

相关文章:

python - 从列表中提取最长的子序列。无法找出类型错误

python - 我无法导入带有目录的照片

python - 在类中的函数之间传递变量

java - 评估 Stanford NER CRF 并以编程方式计算 Precision/Recall

nlp - 如何使用 Stanford Parser 或 Stanford CoreNLP 找到名词短语的语法关系

python - python - 为什么在python中调用其他脚本时子进程模块会给出奇怪的输出?

python - 在网站上查找一个单词并获取其页面链接

r - R 中的分类/预测

javascript - 给定一个索引位置,我如何拆分出该位置所在的句子?

从文本中提取日期