0

我正在尝试在这里读取二进制文件。该文件包含由 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。我无法弄清楚我在这里做错了什么!

4

0 回答 0