diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-24 21:18:01 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-07-24 21:18:01 +0000 |
commit | 5bc0b9b1fc76064d13d2c553c019a381ee52dfa1 (patch) | |
tree | 6871a265a8dcf07c4e08a0fee79b4f3e5696bc4b /decoder/ff_from_fsa.h | |
parent | 22e857a27ab9755b1f8655b0dcd94ac77cb790b8 (diff) |
FSA: simpler Scan1 ScanT1 methods, otherewise also expose edge to full Scan
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@399 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'decoder/ff_from_fsa.h')
-rwxr-xr-x | decoder/ff_from_fsa.h | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/decoder/ff_from_fsa.h b/decoder/ff_from_fsa.h index 75b99f52..20e7c5ca 100755 --- a/decoder/ff_from_fsa.h +++ b/decoder/ff_from_fsa.h @@ -58,7 +58,7 @@ public: } else { WordID ew=e[j]; FSAFFDBG(' '<<TD::Convert(ew)); - ff.Scan(smeta,ew,0,0,features); + ff.Scan(smeta,edge,ew,0,0,features); } } FSAFFDBG('\n'); @@ -69,7 +69,7 @@ public: W left_begin=(W)out_state; W left_out=left_begin; // [left,fsa_state) = left ctx words. if left words aren't full, then null wordid WP left_full=left_end_full(out_state); - FsaScanner<Impl> fsa(ff,smeta); + FsaScanner<Impl> fsa(ff,smeta,edge); TRule const& rule=*edge.rule_; Sentence const& e = rule.e(); for (int j = 0; j < e.size(); ++j) { // items in target side of rule @@ -141,23 +141,24 @@ public: //FIXME: it's assumed that the final rule is just a unary no-target-terminal rewrite (same as ff_lm) virtual void FinalTraversalFeatures(const SentenceMetadata& smeta, + const Hypergraph::Edge& edge, const void* residual_state, FeatureVector* final_features) const { ff.init_features(final_features); Sentence const& ends=ff.end_phrase(); if (!ssz) { - AccumFeatures(ff,smeta,begin(ends),end(ends),final_features,0); + AccumFeatures(ff,smeta,edge,begin(ends),end(ends),final_features,0); return; } SP ss=ff.start_state(); WP l=(WP)residual_state,lend=left_end(residual_state); SP rst=fsa_state(residual_state); - FSAFFDBG("(FromFsa) Final "<<name); + FSAFFDBG("(FromFsa) Final "<<name<< " before="<<*final_features); if (lend==rst) { // implying we have an fsa state - AccumFeatures(ff,smeta,l,lend,final_features,ss); // e.g. <s> score(full left unscored phrase) + AccumFeatures(ff,smeta,edge,l,lend,final_features,ss); // e.g. <s> score(full left unscored phrase) FSAFFDBG(" left: "<<ff.describe_state(ss)<<" -> "<<Sentence(l,lend)); - AccumFeatures(ff,smeta,begin(ends),end(ends),final_features,rst); // e.g. [ctx for last M words] score("</s>") + AccumFeatures(ff,smeta,edge,begin(ends),end(ends),final_features,rst); // e.g. [ctx for last M words] score("</s>") FSAFFDBG(" right: "<<ff.describe_state(rst)<<" -> "<<ends); } else { // all we have is a single short phrase < M words before adding ends int nl=lend-l; @@ -167,7 +168,7 @@ public: wordcpy(w+nl,begin(ends),ends.size()); FSAFFDBG(" score whole sentence: "<<whole); // whole = left-words + end-phrase - AccumFeatures(ff,smeta,w,end(whole),final_features,ss); + AccumFeatures(ff,smeta,edge,w,end(whole),final_features,ss); } FSAFFDBG(" = "<<*final_features<<'\n'); } |