我正在尝试在这里读取二进制文件。该文件包含由 Mikolov 在word2vec程序中训练的单词表示,格式如下:
前 12 个字节包含字符串:“3000000 300\n”
后续字节:“<1st variable word string>[space]<4*300 bytes to form 300 dimension float vector> [May be something there] <2nd word>....<3000000th word>[space]<4*300字节>"
使用此C
代码:
fscanf(in_file, "%s%c", &buff, &ch);
for (a = 0; a < size; a++) fread(&M[a], sizeof(float), 1, in_file);
我可以读取每个单词存储在buff
和相应的向量存储在M
. 但是当我在Python
这个测试代码中尝试相同的策略时:
_f = open("GoogleNews-vectors-negative300.bin")
print _f.read(12)
print _f.read(4), _f.read(1) == ' '
_f.read(4*300)
print _f.read(2), _f.read(1) == ' '
_f.read(4*300)
print _f.read(3), _f.read(1) == ' '
_f.read(4*300)
print _f.read(1), _f.read(1) == ' '
它产生结果:
3000000 300
</s>
真的
在真
为真
; 错误的
显然是错误的,因为第三个词必须是that
。我无法弄清楚我在这里做错了什么!