From 4b7b2693e829166ccec8707b59fb2bc26179551b Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Tue, 22 Jul 2014 00:34:01 +0200 Subject: simple sparse vector type --- fast/hypergraph.cc | 91 +++++++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 46 deletions(-) (limited to 'fast/hypergraph.cc') diff --git a/fast/hypergraph.cc b/fast/hypergraph.cc index e6ec495..9101c92 100644 --- a/fast/hypergraph.cc +++ b/fast/hypergraph.cc @@ -3,36 +3,12 @@ namespace Hg { -std::ostream& -operator<<(std::ostream& os, const Node& n) -{ - os << \ - "Node"; - return os; -} - -std::ostream& -operator<<(std::ostream& os, const Edge& e) +template void +init(list& nodes, list::iterator root, Semiring& semiring) { - ostringstream _; - for (auto it = e.tails.begin(); it != e.tails.end(); it++) { - _ << (**it).id; if (*it != e.tails.back()) _ << ","; - } - os << \ - "Edgeid << \ - ", tails=[" << _.str() << "]" \ - ", score=" << e.score << \ - ", rule:'" << "TODO" << "'" << \ - ", f=" << "TODO" << \ - ", arity=" << e.arity << \ - ", mark=" << e.mark << ">"; - return os; + for (auto it = nodes.begin(); it != nodes.end(); it++) + (**it).score = semiring.null; + (**root).score = semiring.one; } void @@ -44,14 +20,6 @@ reset(list nodes, vector edges) (**it).mark = 0; } -template void -init(list& nodes, list::iterator root, Semiring& semiring) -{ - for (auto it = nodes.begin(); it != nodes.end(); it++) - (**it).score = semiring.null; - (**root).score = semiring.one; -} - void topological_sort(list& nodes, list::iterator root) { @@ -162,22 +130,21 @@ manual(Hypergraph& hg) { // nodes Node* a = new Node; a->id = 0; a->symbol = "root"; a->left = -1; a->right = -1; a->mark = 0; + hg.nodes.push_back(a); hg.nodes_by_id[a->id] = a; Node* b = new Node; b->id = 1; b->symbol = "NP"; b->left = 0; b->right = 1; b->mark = 0; + hg.nodes.push_back(b); hg.nodes_by_id[b->id] = b; Node* c = new Node; c->id = 2; c->symbol = "V"; c->left = 1; c->right = 2; c->mark = 0; + hg.nodes.push_back(c); hg.nodes_by_id[c->id] = c; Node* d = new Node; d->id = 3; d->symbol = "JJ"; d->left = 3; d->right = 4; d->mark = 0; + hg.nodes.push_back(d); hg.nodes_by_id[d->id] = d; Node* e = new Node; e->id = 4; e->symbol = "NN"; e->left = 3; e->right = 5; e->mark = 0; + hg.nodes.push_back(e); hg.nodes_by_id[e->id] = e; Node* f = new Node; f->id = 5; f->symbol = "NP"; f->left = 2; f->right = 5; f->mark = 0; + hg.nodes.push_back(f); hg.nodes_by_id[f->id] = f; Node* g = new Node; g->id = 6; g->symbol = "NP"; g->left = 1; g->right = 5; g->mark = 0; + hg.nodes.push_back(g); hg.nodes_by_id[g->id] = g; Node* h = new Node; h->id = 7; h->symbol = "S"; h->left = 0; h->right = 6; h->mark = 0; - - hg.add_node(a); - hg.add_node(b); - hg.add_node(c); - hg.add_node(d); - hg.add_node(e); - hg.add_node(f); - hg.add_node(g); - hg.add_node(h); + hg.nodes.push_back(h); hg.nodes_by_id[h->id] = h; // edges Edge* q = new Edge; q->head = hg.nodes_by_id[1]; q->tails.push_back(hg.nodes_by_id[0]); q->score = 0.367879441171; @@ -251,5 +218,37 @@ manual(Hypergraph& hg) } // namespace +ostream& +operator<<(ostream& os, const Node& n) +{ + os << \ + "Node"; + return os; +} + +ostream& +operator<<(ostream& os, const Edge& e) +{ + ostringstream _; + for (auto it = e.tails.begin(); it != e.tails.end(); it++) { + _ << (**it).id; if (*it != e.tails.back()) _ << ","; + } + os << \ + "Edgeid << \ + ", tails=[" << _.str() << "]" \ + ", score=" << e.score << \ + ", rule:'" << "TODO" << "'" << \ + ", f=" << "TODO" << \ + ", arity=" << e.arity << \ + ", mark=" << e.mark << ">"; + return os; +} + } // namespace -- cgit v1.2.3