diff options
author | Joe Zhao <ztuowen@gmail.com> | 2015-04-27 11:04:58 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2015-04-27 11:04:58 +0800 |
commit | 4f0acec64ad8edcea4269b4121b2ddb2215d3503 (patch) | |
tree | 40843bd303e7c0b69f673f29c294434d957d18e6 /tools/fileDataProvider.h | |
parent | a8a7bf5f9b9a1eb0d41f839afd06cc532356a902 (diff) | |
download | ranksvm-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.h | 77 |
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 |