summaryrefslogtreecommitdiff
path: root/tools/fileDataProvider.h
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2015-04-27 11:04:58 +0800
committerJoe Zhao <ztuowen@gmail.com>2015-04-27 11:04:58 +0800
commit4f0acec64ad8edcea4269b4121b2ddb2215d3503 (patch)
tree40843bd303e7c0b69f673f29c294434d957d18e6 /tools/fileDataProvider.h
parenta8a7bf5f9b9a1eb0d41f839afd06cc532356a902 (diff)
downloadranksvm-4f0acec64ad8edcea4269b4121b2ddb2215d3503.tar.gz
ranksvm-4f0acec64ad8edcea4269b4121b2ddb2215d3503.tar.bz2
ranksvm-4f0acec64ad8edcea4269b4121b2ddb2215d3503.zip
RidFileDP & qid to string
Diffstat (limited to 'tools/fileDataProvider.h')
-rw-r--r--tools/fileDataProvider.h77
1 files changed, 76 insertions, 1 deletions
diff --git a/tools/fileDataProvider.h b/tools/fileDataProvider.h
index 942ec9b..c4f6a4a 100644
--- a/tools/fileDataProvider.h
+++ b/tools/fileDataProvider.h
@@ -7,6 +7,8 @@
#include <iostream>
#include <fstream>
+// Rank qid features
+
class FileDP:public DataProvider
{
private:
@@ -14,7 +16,6 @@ private:
std::ifstream fin;
public:
FileDP(std::string fn=""):fname(fn){};
- void setFname(std::string fn){fname=fn;};
virtual int getDataSet(DataList &out){
DataEntry* e;
out.clear();
@@ -44,4 +45,78 @@ public:
virtual int close(){fin.close();return 0;};
};
+// label features
+
+class RidFileDP:public DataProvider
+{
+private:
+ std::string fname;
+ std::ifstream fin;
+ DataList d;
+ bool read;
+ int pos;
+ int qid;
+public:
+ RidFileDP(std::string fn=""):fname(fn){read=false;};
+ virtual int getDataSet(DataList &out){
+ DataEntry *e;
+ int fsize;
+ if (!read) {
+ d.clear();
+ fin >> fsize;
+ LOG(INFO) << "Feature size:" << fsize;
+ d.setfSize(fsize);
+ while (!fin.eof()) {
+ e = new DataEntry;
+ fin >> e->qid;
+ if (e->qid == "0") {
+ delete e;
+ break;
+ }
+ e->feature.resize(fsize);
+ e->rank=-1;
+ for (int i = 0; i < fsize; ++i) {
+ fin >> e->feature(i);
+ }
+ d.addEntry(e);
+ }
+ pos = 0;
+ qid = 1;
+ }
+ out.clear();
+ fsize = d.getfSize();
+ std::vector<DataEntry*> & dat = d.getData();
+ for (int i=0;i<d.getSize();++i)
+ if (i!=pos)
+ {
+ if (dat[i]->qid == dat[pos]->qid)
+ {
+ e = new DataEntry;
+ e->rank=1;
+ dat[i]->qid=std::to_string(qid);
+ }
+ else
+ {
+ e = new DataEntry;
+ e->rank=-1;
+ }
+ e->feature.resize(d.getfSize());
+ e->qid=std::to_string(qid);
+ for (int j = 0; j < fsize; ++j) {
+ e->feature(i) = fabs(dat[i]->feature(j) -dat[pos]->feature(j));
+ }
+ out.addEntry(e);
+ }
+ dat[pos]->qid=std::to_string(qid);
+ ++qid;
+ while (pos<dat.size() && dat[pos]->rank!=-1)
+ ++pos;
+ if (pos==d.getSize())
+ eof = true;
+ return 0;
+ }
+ virtual int open(){fin.open(fname); eof=false;return 0;};
+ virtual int close(){fin.close(); d.clear();return 0;};
+};
+
#endif \ No newline at end of file