00001 #include "ug_phrasepair.h" 00002 00003 namespace sapt { 00004 00005 void 00006 fill_lr_vec2 00007 ( LRModel::ModelType mdl, float const* const cnt, 00008 float const total, float* v) 00009 { 00010 if (mdl == LRModel::Monotonic) 00011 { 00012 float denom = log(total + 2); 00013 v[LRModel::M] = log(cnt[LRModel::M] + 1.) - denom; 00014 v[LRModel::NM] = log(total - v[LRModel::M] + 1) - denom; 00015 } 00016 else if (mdl == LRModel::LeftRight) 00017 { 00018 float denom = log(total + 2); 00019 v[LRModel::R] = log(cnt[LRModel::M] + cnt[LRModel::DR] + 1.) - denom; 00020 v[LRModel::L] = log(cnt[LRModel::S] + cnt[LRModel::DL] + 1.) - denom; 00021 } 00022 else if (mdl == LRModel::MSD) 00023 { 00024 float denom = log(total + 3); 00025 v[LRModel::M] = log(cnt[LRModel::M] + 1) - denom; 00026 v[LRModel::S] = log(cnt[LRModel::S] + 1) - denom; 00027 v[LRModel::D] = log(cnt[LRModel::DR] + 00028 cnt[LRModel::DL] + 1) - denom; 00029 } 00030 else if (mdl == LRModel::MSLR) 00031 { 00032 float denom = log(total + 4); 00033 v[LRModel::M] = log(cnt[LRModel::M] + 1) - denom; 00034 v[LRModel::S] = log(cnt[LRModel::S] + 1) - denom; 00035 v[LRModel::DL] = log(cnt[LRModel::DL] + 1) - denom; 00036 v[LRModel::DR] = log(cnt[LRModel::DR] + 1) - denom; 00037 } 00038 else UTIL_THROW2("Reordering type not recognized!"); 00039 } 00040 00041 00042 } // namespace sapt 00043