我可以从word2vec网站下载GoogleNews-vectors-
negative300.bin.gz。.bin文件(大约3.4GB)是对我无用的二进制格式。Tomas
Mikolov向我们保证:“将二进制格式转换为文本格式应该很简单(尽管这将占用更多的磁盘空间)。检查距离工具中的代码,读取二进制文件相当简单。”
不幸的是,我对C的了解不足,无法理解http://word2vec.googlecode.com/svn/trunk/distance.c。
据说gensim能做到这一点还,但我已经找到了教程似乎是有关转换 的 文本,而不是相反。
有人可以建议修改C代码或gensim发出文本的指令吗?
在word2vec-toolkit邮件列表上,Thomas
Mensink以小型C程序的形式提供了一个答案,该程序会将.bin文件转换为文本。这是distance.c文件的修改。我用下面的Thomas代码替换了原来的distance.c,并重建了word2vec(make
clean; make),并将编译后的距离重命名为readbin。然后./readbin vector.bin
将创建vector.bin的文本版本。
// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
const long long max_size = 2000; // max length of strings
const long long N = 40; // number of closest words that will be shown
const long long max_w = 50; // max length of vocabulary entries
int main(int argc, char **argv) {
FILE *f;
char file_name[max_size];
float len;
long long words, size, a, b;
char ch;
float *M;
char *vocab;
if (argc < 2) {
printf("Usage: ./distance <FILE>\nwhere FILE contains word projections in the BINARY FORMAT\n");
return 0;
}
strcpy(file_name, argv[1]);
f = fopen(file_name, "rb");
if (f == NULL) {
printf("Input file not found\n");
return -1;
}
fscanf(f, "%lld", &words);
fscanf(f, "%lld", &size);
vocab = (char *)malloc((long long)words * max_w * sizeof(char));
M = (float *)malloc((long long)words * (long long)size * sizeof(float));
if (M == NULL) {
printf("Cannot allocate memory: %lld MB %lld %lld\n", (long long)words * size * sizeof(float) / 1048576, words, size);
return -1;
}
for (b = 0; b < words; b++) {
fscanf(f, "%s%c", &vocab[b * max_w], &ch);
for (a = 0; a < size; a++) fread(&M[a + b * size], sizeof(float), 1, f);
len = 0;
for (a = 0; a < size; a++) len += M[a + b * size] * M[a + b * size];
len = sqrt(len);
for (a = 0; a < size; a++) M[a + b * size] /= len;
}
fclose(f);
//Code added by Thomas Mensink
//output the vectors of the binary format in text
printf("%lld %lld #File: %s\n",words,size,file_name);
for (a = 0; a < words; a++){
printf("%s ",&vocab[a * max_w]);
for (b = 0; b< size; b++){ printf("%f ",M[a*size + b]); }
printf("\b\b\n");
}
return 0;
}
我从中删除了“ \ b \ b” printf
。
顺便说一句,生成的文本文件仍然包含文本单词和一些不必要的空格,我不希望这些空格用于某些数值计算。我使用bash命令从每一行中删除了初始文本列和尾随空白。
cut --complement -d ' ' -f 1 GoogleNews-vectors-negative300.txt > GoogleNews-vectors-negative300_tuples-only.txt
sed 's/ $//' GoogleNews-vectors-negative300_tuples-only.txt
问题内容: 我使用APKTool对Android应用程序进行了反向工程,并获得了.Smali文件作为源代码输出。我将带有应用程序的.Smali文件转换为.Java文件。我能够成功编辑.Java文件,但现在我想将它们转换回.Smali,以便可以使用新的.Smali文件重新编译应用程序。当我只留下.Java文件时,它不会重新编译并给出一些错误。我在互联网上找不到有关将.Java编译为.Smali的任何
问题内容: 有什么方法可以将File对象转换为MultiPartFile?这样我就可以将该对象发送到接受接口对象的方法? 问题答案: 存在MockMultipartFile为此目的。如你的代码段中所示,如果文件路径已知,则以下代码对我有用。
有没有办法将文件对象转换为多部分文件?以便我可以将该对象发送到接受接口对象的方法?
问题内容: 按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要从现有的(X)HTML文档自动生成PDF文件。输入文件(报告)使用非常简单的基于表的布局,因此可能不需要支持真正精美的JavaScript / CSS。
我有一些scala代码是我用IntelliJ和SBT-Plugin编写的,希望提供给我作为C++的DLL的代码。 我已经尝试过使用'ikvmc':我通过'package'将所有类打包在一个jar中。之后,我手动设置了一个jar,其中包含我使用的所有依赖项(scala-library、scama、jamtio、jama)。不幸的是,我得到了很多警告:'IKVMC0119'、“Emitted java
问题内容: 我公司已经开发了一个Web应用程序(J2EE环境/ Tomcat服务器),并希望将其作为产品出售。客户可以将此产品用作基本版或高级版。在高级版中,客户具有一些额外的功能(可能是一些额外的链接)。这种区别是基于串行密钥进行的。 讨论上述问题时,我只是一个听众。 是否可以解决上述问题?我们如何将War文件转换为exe文件并嵌入逻辑以区分高级版本或基本版本。 问题答案: 我们如何将War文件