我一直在尝试将格式化文本读入我的C ++程序,我找到了解决方案。然而,我不满足于我的代码的优雅/风格,我要求你的帮助,以找出是否有更好的解决方案来解决我的问题。
我需要将rcv1数据集加载到我的程序中。您可能已知的数据集以<did> [<tid>:<weight>]+
格式提供矢量化内容,其中执行, tid 和权重分别表示文档ID , term id 和相应术语的权重。数据集中文件中的每一行都包含唯一的文档ID,该文档的 [tid,weight] 对数量不同。
我找到了一个如下加载数据的解决方案(下面是我程序中循环的代码摘录):
while( docCount < docPerW ) {
getline( docsFile, line );
if ( docsFile.eof() ) {
docsFile.close();
docPos = 0;
fileID++;
if ( fileID >= numFiles ) {
topsFile.close();
tag = 1;
break;
}
docsFile.open( dataFolder + docFName +
to_string( fileID ) + ".dat" );
docsFile.seekg( docPos );
continue;
}
istringstream docsStream( line );
docsStream >> docDocID;
map< int, double > docData;
while( docsStream >> tID >> docDelim >> tWeight)
docData[ tID ] = tWeight;
documents[ docDocID ] = docData;
docCount++;
}
上面,文件读取发生在主工作者设置中。如果仍然存在要读取的文件,则每个工作人员都需要阅读 docPerW 文档。 topsFile 是另一个文件对象,我需要从中读取主题(这不是我的问题的相关内容)。
总之,是否有更好的方式来阅读与以这种格式给出的文件相关的术语及其权重
1.先行,
2.然后将其转换为 istringstream 对象,并且,
3.最后从该对象读取直到流结束?
感谢您的帮助和建议。