Download tools/mosesdecoder/scripts/analysis/sg2dot.perl from Quagmire1/wiki-cased: direct link, hf CLI and curl.
- Browser
- Download file 2.6 kB
-
https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/scripts/analysis/sg2dot.perl
- Command line
-
hf download hf://Quagmire1/wiki-cased/tools/mosesdecoder/scripts/analysis/sg2dot.perl
-
curl -L -o sg2dot.perl https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/scripts/analysis/sg2dot.perl
2.6 kB
| #!/usr/bin/env perl | |
| # | |
| # Author : Loic BARRAULT | |
| # Script to convert MOSES searchgraph to DOT format | |
| # | |
| # This file is part of moses. Its use is licensed under the GNU Lesser General | |
| # Public License version 2.1 or, at your option, any later version. | |
| use warnings; | |
| use strict; | |
| use File::Path; | |
| use File::Basename; | |
| use File::Copy; | |
| use Getopt::Long; | |
| my $organize_to_stacks = 0; | |
| GetOptions( | |
| "organize-to-stacks" => \$organize_to_stacks, | |
| ) or exit 1; | |
| my %stacks = (); | |
| $stacks{0}{0} = 0; | |
| print STDOUT "digraph searchgraph\n{\nrankdir=LR\n"; | |
| my($line, $cpt, $from, $to, $label, $recombined, $transition, $o, $stack, $state); | |
| $cpt = 0; | |
| $line=<>; #skip first line (the empty hypothesis, no arc in fact) | |
| my $nr = 0; | |
| while(($line=<>) ) | |
| { | |
| $nr++; | |
| $from = ""; | |
| $to = ""; | |
| $label = ""; | |
| $recombined = ""; | |
| chomp($line); | |
| #print STDERR "$line\n"; | |
| #Three kinds of lines in searchgraph | |
| #0 hyp=0 stack=0 forward=1 fscore=-205.192 | |
| #0 hyp=5 stack=1 back=0 score=-0.53862 transition=-0.53862 forward=181 fscore=-205.36 covered=0-0 out=I am , pC=-0.401291, c=-0.98555 | |
| #256 hyp=6566 stack=2 back=23 score=-2.15644 transition=-0.921959 recombined=6302 forward=15519 fscore=-112.807 covered=2-2 out=countries , , pC=-0.640574, c=-1.07215 | |
| if($line =~ /hyp=(\d+).+stack=(\d+).+back=(\d+).+transition=([^ ]*).+recombined=(\d+).+out=(.*)(, pC|$)/) | |
| { | |
| #print STDERR "hyp=$1, stack=$2, from=$3, transition=$4, recombined=$5, out=$6\n"; | |
| $to = $1; | |
| $stack = $2; | |
| $from = $3; | |
| $transition=$4; | |
| $recombined = $5; | |
| $o = $6; | |
| $label = "[color=blue label="; | |
| $to = $recombined; | |
| $stacks{$stack}{$recombined} = $recombined if $organize_to_stacks; | |
| #$stack++; | |
| #$stacks{$stack}{$recombined} = $recombined; | |
| } | |
| elsif($line =~ /hyp=(\d+).+stack=(\d+).+back=(\d+).+transition=([^ ]*).+out=(.*)(, pC|$)/) | |
| { | |
| #print STDERR "hyp=$1, stack=$2, from=$3, transition=$4, out=$5\n"; | |
| $to = $1; | |
| $stack = $2; | |
| $from = $3; | |
| $transition=$4; | |
| $o = $5; | |
| $label = "[label="; | |
| $stacks{$stack}{$to} = $to if $organize_to_stacks; | |
| #$stack++; | |
| #$stacks{$stack}{$to} = $to; | |
| } | |
| else{ | |
| die "$nr:Bad line: $line\n"; | |
| } | |
| $o =~ s/\"/\\"/g ; | |
| #print STDERR "out = $o after regexp\n"; | |
| $label .= "\"$o p=$transition\"]\n"; | |
| #$label .= " p=$transition\"]\n"; | |
| print STDOUT "$from -> $to $label"; | |
| $cpt++; | |
| } | |
| if ($organize_to_stacks) { | |
| foreach $stack (sort (keys(%stacks))) | |
| { | |
| print STDOUT "{ rank=same; "; | |
| foreach $state (sort keys %{ $stacks{$stack} } ) | |
| { | |
| print STDOUT "$stacks{$stack}{$state} "; | |
| } | |
| print STDOUT "}\n"; | |
| } | |
| } | |
| print STDOUT "\n}\n"; | |
| print STDERR "Converted $nr lines.\n"; | |