summaryrefslogtreecommitdiff
path: root/decoder
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2014-08-19 21:51:44 +0100
committerPatrick Simianer <p@simianer.de>2014-08-19 21:51:44 +0100
commitb9be57140b1e9cab50ff8eb0c6cd90815ab6da0e (patch)
tree801ad795d5da542e1259b0818f5fbb5a1cc4fae5 /decoder
parentf33ab2ff3f1cf135ffb80721e1f4d71d124bc8f9 (diff)
added minimal decoder
Diffstat (limited to 'decoder')
-rw-r--r--decoder/Makefile.am5
-rw-r--r--decoder/minimal_decoder.cc45
2 files changed, 49 insertions, 1 deletions
diff --git a/decoder/Makefile.am b/decoder/Makefile.am
index 8e61c13e..9c4c7142 100644
--- a/decoder/Makefile.am
+++ b/decoder/Makefile.am
@@ -1,4 +1,4 @@
-bin_PROGRAMS = cdec
+bin_PROGRAMS = cdec minimal_decoder
noinst_PROGRAMS = \
trule_test \
@@ -23,6 +23,9 @@ cdec_SOURCES = cdec.cc
cdec_LDFLAGS= -rdynamic
cdec_LDADD = libcdec.a ../mteval/libmteval.a ../utils/libutils.a ../klm/search/libksearch.a ../klm/lm/libklm.a ../klm/util/libklm_util.a ../klm/util/double-conversion/libklm_util_double.a
+minimal_decoder_SOURCES = minimal_decoder.cc
+minimal_decoder_LDADD = libcdec.a ../utils/libutils.a
+
AM_CPPFLAGS = -DTEST_DATA=\"$(top_srcdir)/decoder/test_data\" -DBOOST_TEST_DYN_LINK -W -Wno-sign-compare -I$(top_srcdir) -I$(top_srcdir)/mteval -I$(top_srcdir)/utils -I$(top_srcdir)/klm
rule_lexer.cc: rule_lexer.ll
diff --git a/decoder/minimal_decoder.cc b/decoder/minimal_decoder.cc
new file mode 100644
index 00000000..0aa281ae
--- /dev/null
+++ b/decoder/minimal_decoder.cc
@@ -0,0 +1,45 @@
+#include <fstream>
+#include <iostream>
+#include <sstream>
+
+#include "fdict.h"
+#include "filelib.h"
+#include "hg.h"
+#include "hg_io.h"
+#include "sparse_vector.h"
+#include "viterbi.h"
+
+
+using namespace std;
+
+/*
+ * Reads hypergraph from JSON file argv[1],
+ * reweights it using weights from argv[2],
+ * and outputs viterbi translation.
+ *
+ */
+int main(int argc, char** argv)
+{
+ ReadFile rf(argv[1]);
+ Hypergraph hg;
+ HypergraphIO::ReadFromJSON(rf.stream(), &hg);
+ SparseVector<double> v;
+ ifstream f(argv[2]);
+ string line;
+ while (getline(f, line)) {
+ istringstream ss(line);
+ string k; weight_t w;
+ ss >> k >> w;
+ v.add_value(FD::Convert(k), w);
+ }
+ hg.Reweight(v);
+ clock_t begin = clock();
+ hg.TopologicallySortNodesAndEdges(hg.NumberOfNodes()-1);
+ vector<WordID> trans;
+ ViterbiESentence(hg, &trans);
+ cout << TD::GetString(trans) << endl << flush;
+ clock_t end = clock();
+ double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
+ cout << elapsed_secs << " s" << endl;
+}
+