UOM // Dealing with Namespace Pollusion.
This commit is contained in:
parent
b8216b9d87
commit
90bea14752
|
@ -23,7 +23,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
using namespace vChewing;
|
namespace vChewing {
|
||||||
|
|
||||||
// About 20 generations.
|
// About 20 generations.
|
||||||
static const double DecayThreshould = 1.0 / 1048576.0;
|
static const double DecayThreshould = 1.0 / 1048576.0;
|
||||||
|
@ -33,8 +33,8 @@ static double Score(size_t eventCount,
|
||||||
double eventTimestamp,
|
double eventTimestamp,
|
||||||
double timestamp,
|
double timestamp,
|
||||||
double lambda);
|
double lambda);
|
||||||
static bool IsEndingPunctuation(const string& value);
|
static bool IsEndingPunctuation(const std::string& value);
|
||||||
static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
static std::string WalkedNodesToKey(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex);
|
size_t cursorIndex);
|
||||||
|
|
||||||
UserOverrideModel::UserOverrideModel(size_t capacity, double decayConstant)
|
UserOverrideModel::UserOverrideModel(size_t capacity, double decayConstant)
|
||||||
|
@ -43,11 +43,11 @@ UserOverrideModel::UserOverrideModel(size_t capacity, double decayConstant)
|
||||||
m_decayExponent = log(0.5) / decayConstant;
|
m_decayExponent = log(0.5) / decayConstant;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserOverrideModel::observe(const std::vector<NodeAnchor>& walkedNodes,
|
void UserOverrideModel::observe(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex,
|
size_t cursorIndex,
|
||||||
const string& candidate,
|
const std::string& candidate,
|
||||||
double timestamp) {
|
double timestamp) {
|
||||||
string key = WalkedNodesToKey(walkedNodes, cursorIndex);
|
std::string key = WalkedNodesToKey(walkedNodes, cursorIndex);
|
||||||
auto mapIter = m_lruMap.find(key);
|
auto mapIter = m_lruMap.find(key);
|
||||||
if (mapIter == m_lruMap.end()) {
|
if (mapIter == m_lruMap.end()) {
|
||||||
auto keyValuePair = KeyObservationPair(key, Observation());
|
auto keyValuePair = KeyObservationPair(key, Observation());
|
||||||
|
@ -76,20 +76,20 @@ void UserOverrideModel::observe(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string UserOverrideModel::suggest(const std::vector<NodeAnchor>& walkedNodes,
|
std::string UserOverrideModel::suggest(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex,
|
size_t cursorIndex,
|
||||||
double timestamp) {
|
double timestamp) {
|
||||||
string key = WalkedNodesToKey(walkedNodes, cursorIndex);
|
std::string key = WalkedNodesToKey(walkedNodes, cursorIndex);
|
||||||
auto mapIter = m_lruMap.find(key);
|
auto mapIter = m_lruMap.find(key);
|
||||||
if (mapIter == m_lruMap.end()) {
|
if (mapIter == m_lruMap.end()) {
|
||||||
return string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto listIter = mapIter->second;
|
auto listIter = mapIter->second;
|
||||||
auto& keyValuePair = *listIter;
|
auto& keyValuePair = *listIter;
|
||||||
const Observation& observation = keyValuePair.second;
|
const Observation& observation = keyValuePair.second;
|
||||||
|
|
||||||
string candidate;
|
std::string candidate;
|
||||||
double score = 0.0;
|
double score = 0.0;
|
||||||
for (auto i = observation.overrides.begin();
|
for (auto i = observation.overrides.begin();
|
||||||
i != observation.overrides.end();
|
i != observation.overrides.end();
|
||||||
|
@ -112,7 +112,7 @@ string UserOverrideModel::suggest(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
return candidate;
|
return candidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UserOverrideModel::Observation::update(const string& candidate,
|
void UserOverrideModel::Observation::update(const std::string& candidate,
|
||||||
double timestamp) {
|
double timestamp) {
|
||||||
count++;
|
count++;
|
||||||
auto& o = overrides[candidate];
|
auto& o = overrides[candidate];
|
||||||
|
@ -134,16 +134,16 @@ static double Score(size_t eventCount,
|
||||||
return prob * decay;
|
return prob * decay;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsEndingPunctuation(const string& value) {
|
static bool IsEndingPunctuation(const std::string& value) {
|
||||||
return value == "," || value == "。" || value== "!" || value == "?" ||
|
return value == "," || value == "。" || value== "!" || value == "?" ||
|
||||||
value == "」" || value == "』" || value== "”" || value == "’";
|
value == "」" || value == "』" || value== "”" || value == "’";
|
||||||
}
|
}
|
||||||
static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
static std::string WalkedNodesToKey(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex) {
|
size_t cursorIndex) {
|
||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
std::vector<NodeAnchor> n;
|
std::vector<Taiyan::Gramambular::NodeAnchor> n;
|
||||||
size_t ll = 0;
|
size_t ll = 0;
|
||||||
for (std::vector<NodeAnchor>::const_iterator i = walkedNodes.begin();
|
for (std::vector<Taiyan::Gramambular::NodeAnchor>::const_iterator i = walkedNodes.begin();
|
||||||
i != walkedNodes.end();
|
i != walkedNodes.end();
|
||||||
++i) {
|
++i) {
|
||||||
const auto& nn = *i;
|
const auto& nn = *i;
|
||||||
|
@ -154,19 +154,19 @@ static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<NodeAnchor>::const_reverse_iterator r = n.rbegin();
|
std::vector<Taiyan::Gramambular::NodeAnchor>::const_reverse_iterator r = n.rbegin();
|
||||||
|
|
||||||
if (r == n.rend()) {
|
if (r == n.rend()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
string current = (*r).node->currentKeyValue().key;
|
std::string current = (*r).node->currentKeyValue().key;
|
||||||
++r;
|
++r;
|
||||||
|
|
||||||
s.clear();
|
s.clear();
|
||||||
s.str(std::string());
|
s.str(std::string());
|
||||||
if (r != n.rend()) {
|
if (r != n.rend()) {
|
||||||
string value = (*r).node->currentKeyValue().value;
|
std::string value = (*r).node->currentKeyValue().value;
|
||||||
if (IsEndingPunctuation(value)) {
|
if (IsEndingPunctuation(value)) {
|
||||||
s << "()";
|
s << "()";
|
||||||
r = n.rend();
|
r = n.rend();
|
||||||
|
@ -181,12 +181,12 @@ static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
} else {
|
} else {
|
||||||
s << "()";
|
s << "()";
|
||||||
}
|
}
|
||||||
string prev = s.str();
|
std::string prev = s.str();
|
||||||
|
|
||||||
s.clear();
|
s.clear();
|
||||||
s.str(std::string());
|
s.str(std::string());
|
||||||
if (r != n.rend()) {
|
if (r != n.rend()) {
|
||||||
string value = (*r).node->currentKeyValue().value;
|
std::string value = (*r).node->currentKeyValue().value;
|
||||||
if (IsEndingPunctuation(value)) {
|
if (IsEndingPunctuation(value)) {
|
||||||
s << "()";
|
s << "()";
|
||||||
r = n.rend();
|
r = n.rend();
|
||||||
|
@ -201,7 +201,7 @@ static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
} else {
|
} else {
|
||||||
s << "()";
|
s << "()";
|
||||||
}
|
}
|
||||||
string anterior = s.str();
|
std::string anterior = s.str();
|
||||||
|
|
||||||
s.clear();
|
s.clear();
|
||||||
s.str(std::string());
|
s.str(std::string());
|
||||||
|
@ -209,3 +209,5 @@ static string WalkedNodesToKey(const std::vector<NodeAnchor>& walkedNodes,
|
||||||
|
|
||||||
return s.str();
|
return s.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace vChewing
|
||||||
|
|
|
@ -22,7 +22,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR TH
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "Gramambular.h"
|
#include "Gramambular.h"
|
||||||
|
|
||||||
|
@ -34,12 +33,12 @@ class UserOverrideModel {
|
||||||
public:
|
public:
|
||||||
UserOverrideModel(size_t capacity, double decayConstant);
|
UserOverrideModel(size_t capacity, double decayConstant);
|
||||||
|
|
||||||
void observe(const std::vector<NodeAnchor>& walkedNodes,
|
void observe(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex,
|
size_t cursorIndex,
|
||||||
const string& candidate,
|
const std::string& candidate,
|
||||||
double timestamp);
|
double timestamp);
|
||||||
|
|
||||||
string suggest(const std::vector<NodeAnchor>& walkedNodes,
|
std::string suggest(const std::vector<Taiyan::Gramambular::NodeAnchor>& walkedNodes,
|
||||||
size_t cursorIndex,
|
size_t cursorIndex,
|
||||||
double timestamp);
|
double timestamp);
|
||||||
|
|
||||||
|
@ -56,7 +55,7 @@ private:
|
||||||
std::map<std::string, Override> overrides;
|
std::map<std::string, Override> overrides;
|
||||||
|
|
||||||
Observation() : count(0) {}
|
Observation() : count(0) {}
|
||||||
void update(const string& candidate, double timestamp);
|
void update(const std::string& candidate, double timestamp);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::pair<std::string, Observation> KeyObservationPair;
|
typedef std::pair<std::string, Observation> KeyObservationPair;
|
||||||
|
|
Loading…
Reference in New Issue