我正在尝试使用ctypes将google的word2vec用于python中的新闻组预训练向量。
我这里有一大堆代码:
void initialize(){
...
long long words, size;
char *fname = "GoogleNews-vectors-negative300.bin.gz";
strcpy(file_name, fname);
printf("%s\n", file_name);
f = fopen(file_name, "rb");
if (f == NULL) {
printf("Input file not found\n");
return -1;
}
fscanf(f, "%lld ", &words);
fscanf(f, "%lld", &size);
printf("size of words is %d\n", words);
...
}
当我从主函数调用它时,此代码运行正常。但是,当我将它编译为.so文件并从ctypes调用它时,单词总是为零。用ftell检查,我注意到fscanf没有向前移动文件指针,fscanf总是返回0.它是一个二进制文件,所以我不知道fscanf在这里工作的区别是将这个3 GB二进制文件转换为更多大规模的.csv并从那里读取它。
如何解决这个问题?在这种情况下,避免使用fscanf的备用路由也可以。
答案 0 :(得分:1)
OP的文件是压缩文件" GoogleNews-vectors-negative300.bin.gz"和代码旨在读取未压缩的版本。
重试未压缩版本。