summaryrefslogtreecommitdiff
path: root/utils/weights.cc
diff options
context:
space:
mode:
Diffstat (limited to 'utils/weights.cc')
-rw-r--r--utils/weights.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/utils/weights.cc b/utils/weights.cc
index 575877b6..effdfc5e 100644
--- a/utils/weights.cc
+++ b/utils/weights.cc
@@ -4,6 +4,7 @@
#include "fdict.h"
#include "filelib.h"
+#include "stringlib.h"
#include "verbose.h"
using namespace std;
@@ -156,4 +157,27 @@ void Weights::ShowLargestFeatures(const vector<weight_t>& w) {
cerr << endl;
}
+string Weights::GetString(const vector<weight_t>& w,
+ bool hide_zero_value_features) {
+ ostringstream os;
+ os.precision(17);
+ int nf = FD::NumFeats();
+ for (unsigned i = 1; i < nf; i++) {
+ weight_t val = (i < w.size() ? w[i] : 0.0);
+ if (hide_zero_value_features && val == 0.0) {
+ continue;
+ }
+ os << ' ' << FD::Convert(i) << '=' << val;
+ }
+ return os.str().substr(1);
+}
+void Weights::UpdateFromString(string& w_string,
+ vector<weight_t>& w) {
+ vector<string> tok = SplitOnWhitespace(w_string);
+ for (vector<string>::iterator i = tok.begin(); i != tok.end(); i++) {
+ int delim = i->find('=');
+ int fid = FD::Convert(i->substr(0, delim));
+ w[fid] = strtod(i->substr(delim + 1).c_str(), NULL);
+ }
+}