|
|
|
#include "ug_bitext_jstats.h" |
|
namespace sapt |
|
{ |
|
|
|
uint32_t jstats::rcnt() const { return my_rcnt; } |
|
float jstats::wcnt() const { return my_wcnt; } |
|
float jstats::bcnt() const { return my_bcnt; } |
|
uint32_t jstats::cnt2() const { return my_cnt2; } |
|
|
|
|
|
bool jstats::valid() { return my_wcnt >= 0; } |
|
void jstats::validate() { if (my_wcnt < 0) my_wcnt *= -1; } |
|
void jstats::invalidate() { if (my_wcnt > 0) my_wcnt *= -1; } |
|
|
|
jstats:: |
|
jstats() |
|
: my_rcnt(0), my_cnt2(0), my_wcnt(0), my_bcnt(0) |
|
{ |
|
for (int i = 0; i <= LRModel::NONE; ++i) |
|
ofwd[i] = obwd[i] = 0; |
|
my_aln.reserve(1); |
|
} |
|
|
|
jstats:: |
|
jstats(jstats const& other) |
|
{ |
|
my_rcnt = other.rcnt(); |
|
my_wcnt = other.wcnt(); |
|
my_bcnt = other.bcnt(); |
|
my_aln = other.aln(); |
|
sids = other.sids; |
|
indoc = other.indoc; |
|
for (int i = 0; i <= LRModel::NONE; i++) |
|
{ |
|
ofwd[i] = other.ofwd[i]; |
|
obwd[i] = other.obwd[i]; |
|
} |
|
} |
|
|
|
uint32_t |
|
jstats:: |
|
dcnt_fwd(PhraseOrientation const idx) const |
|
{ |
|
assert(idx <= LRModel::NONE); |
|
return ofwd[idx]; |
|
} |
|
|
|
uint32_t |
|
jstats:: |
|
dcnt_bwd(PhraseOrientation const idx) const |
|
{ |
|
assert(idx <= LRModel::NONE); |
|
return obwd[idx]; |
|
} |
|
|
|
size_t |
|
jstats:: |
|
add(float w, float b, std::vector<unsigned char> const& a, uint32_t const cnt2, |
|
uint32_t fwd_orient, uint32_t bwd_orient, int const docid, |
|
uint32_t const sid, bool const track_sid) |
|
{ |
|
boost::lock_guard<boost::mutex> lk(this->lock); |
|
my_cnt2 = cnt2; |
|
my_rcnt += 1; |
|
my_wcnt += w; |
|
my_bcnt += b; |
|
if (a.size()) |
|
{ |
|
size_t i = 0; |
|
while (i < my_aln.size() && my_aln[i].second != a) ++i; |
|
if (i == my_aln.size()) |
|
my_aln.push_back(std::pair<size_t,std::vector<unsigned char> >(1,a)); |
|
else |
|
my_aln[i].first++; |
|
if (my_aln[i].first > my_aln[i/2].first) |
|
push_heap(my_aln.begin(),my_aln.begin()+i+1); |
|
} |
|
++ofwd[fwd_orient]; |
|
++obwd[bwd_orient]; |
|
|
|
if (track_sid) |
|
{ |
|
if (!sids) |
|
sids.reset(new std::vector<uint32_t>); |
|
sids->push_back(sid); |
|
} |
|
if (docid >= 0) |
|
{ |
|
|
|
++indoc[docid]; |
|
} |
|
return my_rcnt; |
|
} |
|
|
|
std::vector<std::pair<size_t, std::vector<unsigned char> > > const& |
|
jstats:: |
|
aln() const |
|
{ return my_aln; } |
|
|
|
} |
|
|