summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fast_weaver.cc3
-rw-r--r--src/hypergraph.cc25
-rw-r--r--src/hypergraph.hh3
3 files changed, 30 insertions, 1 deletions
diff --git a/src/fast_weaver.cc b/src/fast_weaver.cc
index bdf21f8..a520d0b 100644
--- a/src/fast_weaver.cc
+++ b/src/fast_weaver.cc
@@ -20,7 +20,8 @@ main(int argc, char** argv)
// viterbi
clock_t begin_viterbi = clock();
Hg::Path p;
- Hg::viterbi_path(hg, p);
+ Hg::sv_path(hg, p);
+ exit(1);
vector<string> s;
Hg::derive(p, p.back()->head, s);
for (auto it: s)
diff --git a/src/hypergraph.cc b/src/hypergraph.cc
index 0a965d0..6ec8441 100644
--- a/src/hypergraph.cc
+++ b/src/hypergraph.cc
@@ -97,6 +97,31 @@ viterbi_path(Hypergraph& hg, Path& p)
}
}
+void
+sv_path(Hypergraph& hg, Path& p)
+{
+ list<Node*>::iterator root = \
+ find_if(hg.nodes.begin(), hg.nodes.end(), \
+ [](Node* n) { return n->incoming.size() == 0; });
+ //list<Node*>::iterator root = hg.nodes.begin();
+
+ Hg::topological_sort(hg.nodes, root);
+ // ^^^ FIXME do I need to do this when reading from file?
+
+ for (const auto it: hg.nodes)
+ it->score = 0;
+ (**root).score = 1.0;
+
+ for (auto n: hg.nodes) {
+ Edge* best_edge;
+ bool best = false;
+ for (auto e: n->incoming) {
+ e->rule->f->repr(cout);
+ cout << endl;
+ }
+ }
+}
+
void
derive(const Path& p, const Node* cur, vector<string>& carry)
diff --git a/src/hypergraph.hh b/src/hypergraph.hh
index d1217a5..7a268c3 100644
--- a/src/hypergraph.hh
+++ b/src/hypergraph.hh
@@ -84,6 +84,9 @@ void
viterbi_path(Hypergraph& hg, Path& p);
void
+sv_path(Hypergraph& hg, Path& p);
+
+void
derive(const Path& p, const Node* cur, vector<string>& carry);
namespace io {