summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--model/ranksvmtn.cpp7
-rw-r--r--tools/dataProvider.h14
2 files changed, 17 insertions, 4 deletions
diff --git a/model/ranksvmtn.cpp b/model/ranksvmtn.cpp
index cd58aa9..b82ce64 100644
--- a/model/ranksvmtn.cpp
+++ b/model/ranksvmtn.cpp
@@ -210,15 +210,16 @@ int RSVMTN::train(DataList &D){
vector<int> A1,A2;
int i,j;
LOG(INFO)<<"Processing input";
+ vector<DataEntry*> &dat = D.getData();
for (i=0;i<D.getSize();++i) {
- corr(i)=(D.getData()[i])->rank>0?0.5:-0.5;
+ corr(i)=(dat[i])->rank>0?0.5:-0.5;
for (j = 0; j < D.getfSize(); ++j)
- Data(i, j) = (D.getData()[i])->feature(j);
+ Data(i, j) = dat[i]->feature(j);
}
i=j=0;
while (i<D.getSize())
{
- if ((i+1 == D.getSize())|| D.getData()[i]->qid!=D.getData()[i+1]->qid)
+ if ((i+1 == D.getSize())|| dat[i]->qid!=dat[i+1]->qid)
{
A1.push_back(j);
A2.push_back(i);
diff --git a/tools/dataProvider.h b/tools/dataProvider.h
index 5a2f3e9..a8a5448 100644
--- a/tools/dataProvider.h
+++ b/tools/dataProvider.h
@@ -35,6 +35,14 @@ public:
delete data[i];
data.clear();
}
+ static DataEntry* copyEntry(DataEntry* d)
+ {
+ DataEntry* dat = new DataEntry;
+ dat->rank = d->rank;
+ dat->qid = d->qid;
+ dat->feature = d->feature;
+ return dat;
+ }
inline std::vector<DataEntry*>& getData(){
return data;
}
@@ -57,8 +65,12 @@ public:
while (!EOFile())
{
getDataSet(buf);
- out.getData().insert(out.getData().end(),buf.getData().begin(),buf.getData().end());
+ // won't work as data are discarded with every call to getDataSet
+ // out.getData().insert(out.getData().end(),buf.getData().begin(),buf.getData().end());
+ for (int i=0;i<buf.getSize();++i)
+ out.addEntry(out.copyEntry(buf.getData()[i]));
}
+ out.setfSize(buf.getfSize());
}
virtual int getDataSet(DataList &out) = 0;
virtual int open()=0;