summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2015-03-23 11:01:45 +0100
committerPatrick Simianer <p@simianer.de>2015-03-23 11:01:45 +0100
commite84265273b121eb5fbf465b80ea39d43602703fe (patch)
treea9d81c8493eec4fb360c86d3645c5845ee034268
parentcaf2fa0398fc29d373bce5b3a6cd54e3948e9866 (diff)
fix prototype
-rw-r--r--prototype/README.md3
-rwxr-xr-xprototype/test_hg.rb4
-rwxr-xr-xprototype/test_parse.rb33
-rwxr-xr-xprototype/weaver_proto.rb (renamed from prototype/weaver.rb)1
4 files changed, 21 insertions, 20 deletions
diff --git a/prototype/README.md b/prototype/README.md
new file mode 100644
index 0000000..7216d49
--- /dev/null
+++ b/prototype/README.md
@@ -0,0 +1,3 @@
+experimental scfg machine translation decoder in ruby, currently implements cky+
+parsing and viterbi on hypergraphs
+
diff --git a/prototype/test_hg.rb b/prototype/test_hg.rb
index 65b61f1..d8071fb 100755
--- a/prototype/test_hg.rb
+++ b/prototype/test_hg.rb
@@ -6,9 +6,6 @@ def main
# viterbi
semiring = ViterbiSemiring.new
hypergraph, nodes_by_id = HG::read_hypergraph_from_json('../example/toy/toy.json', semiring, true)
- #hypergraph, nodes_by_id = HG::read_hypergraph_from_json('../example/toy/toy-test.json', semiring, true)
- #hypergraph, nodes_by_id = HG::read_hypergraph_from_json('../example/glue/glue.json', semiring, true)
- #hypergraph, nodes_by_id = HG::read_hypergraph_from_json('../example/3/3.json', semiring, true)
path, score = HG::viterbi_path hypergraph, nodes_by_id[-1], semiring
s = HG::derive path, path.last.head, []
path.each { |e| puts "#{e.rule}" }
@@ -26,6 +23,5 @@ def main
}
end
-
main
diff --git a/prototype/test_parse.rb b/prototype/test_parse.rb
index cae6168..f57984a 100755
--- a/prototype/test_parse.rb
+++ b/prototype/test_parse.rb
@@ -1,24 +1,24 @@
#!/usr/bin/env ruby
+require 'zipf'
require_relative 'parse'
def main
- STDERR.write "> reading input from TODO\n"
- input = 'ich sah ein kleines haus'.split
- #input = 'lebensmittel schuld an europäischer inflation'.split
- #input = 'offizielle prognosen sind von nur 3 prozent ausgegangen , meldete bloomberg .'.split
+ fn = '../example/toy/in'
+ #fn = '../example/glue/in'
+ STDERR.write "> reading input from #{fn}\n"
+ input = ReadFile.new(fn).readlines_strip.first.split
n = input.size
STDERR.write "> reading grammar\n"
- #grammar = Grammar::Grammar.new '../example/toy/grammar'
- grammar = Grammar::Grammar.new '../example/toy/grammar-test'
+ grammar = Grammar::Grammar.new '../example/toy/grammar'
+ #grammar = Grammar::Grammar.new '../example/toy/grammar-test'
#grammar = Grammar::Grammar.new '../example/glue/grammar'
- #grammar = Grammar::Grammar.new '../example/3/grammar'
STDERR.write ">> adding glue grammar\n"
grammar.add_glue_rules
- STDERR.write ">> adding pass-through grammar\n"
+ #STDERR.write ">> adding pass-through grammar\n"
#grammar.add_pass_through_rules input
STDERR.write "> initializing charts\n"
@@ -29,15 +29,16 @@ def main
STDERR.write "> parsing\n"
Parse::parse input, n, active_chart, passive_chart, grammar
- puts "\n---\npassive chart"
- Parse::visit(1, 0, n) { |i,j| k=0; puts "#{i},#{j}"; passive_chart.at(i,j).each { |item| puts " #{k} #{item.to_s}"; k+=1 }; puts }
+ STDERR.write "\n---\npassive chart\n"
+ Parse::visit(1, 0, n) { |i,j| k=0; STDERR.write "#{i},#{j}\n"; passive_chart.at(i,j).each { |item| STDERR.write " #{k} #{item.to_s}\n"; k+=1 }; STDERR.write "\n" }
- weights_file = '../example/toy/weights'
- #weights_file = '../example/glue/weights'
- #weights_file = '../example/3/weights.init'
- weights = SparseVector.from_kv(ReadFile.read(weights_file), ' ', "\n")
- if !weights
- weights = SparseVector.new
+ weights_fn = '../example/toy/weights.toy'
+ #weights_fn = nil
+ weights = nil
+ if weights_fn
+ weights = SparseVector.from_kv(ReadFile.read(weights_fn), ' ', "\n")
+ else
+ weights = SparseVector.new
end
puts passive_chart.to_hg.to_json weights
diff --git a/prototype/weaver.rb b/prototype/weaver_proto.rb
index 5cda844..912090b 100755
--- a/prototype/weaver.rb
+++ b/prototype/weaver_proto.rb
@@ -75,6 +75,7 @@ def main
path, score = HG::viterbi_path hypergraph, hypergraph.nodes_by_id[-1], semiring
s = HG::derive path, path.last.head, []
STDOUT.write "#{s.map { |i| i.word }.join ' '} ||| #{Math.log score}\n"
+
}
end