grammar_cop 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.DS_Store +0 -0
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +8 -0
- data/data/.DS_Store +0 -0
- data/data/Makefile +511 -0
- data/data/Makefile.am +4 -0
- data/data/Makefile.in +511 -0
- data/data/de/.DS_Store +0 -0
- data/data/de/4.0.affix +7 -0
- data/data/de/4.0.dict +474 -0
- data/data/de/Makefile +387 -0
- data/data/de/Makefile.am +9 -0
- data/data/de/Makefile.in +387 -0
- data/data/en/.DS_Store +0 -0
- data/data/en/4.0.affix +26 -0
- data/data/en/4.0.batch +1002 -0
- data/data/en/4.0.biolg.batch +411 -0
- data/data/en/4.0.constituent-knowledge +127 -0
- data/data/en/4.0.dict +8759 -0
- data/data/en/4.0.dict.m4 +6928 -0
- data/data/en/4.0.enwiki.batch +14 -0
- data/data/en/4.0.fixes.batch +2776 -0
- data/data/en/4.0.knowledge +306 -0
- data/data/en/4.0.regex +225 -0
- data/data/en/4.0.voa.batch +114 -0
- data/data/en/Makefile +554 -0
- data/data/en/Makefile.am +19 -0
- data/data/en/Makefile.in +554 -0
- data/data/en/README +173 -0
- data/data/en/tiny.dict +157 -0
- data/data/en/words/.DS_Store +0 -0
- data/data/en/words/Makefile +456 -0
- data/data/en/words/Makefile.am +78 -0
- data/data/en/words/Makefile.in +456 -0
- data/data/en/words/currency +205 -0
- data/data/en/words/currency.p +28 -0
- data/data/en/words/entities.given-bisex.sing +39 -0
- data/data/en/words/entities.given-female.sing +4141 -0
- data/data/en/words/entities.given-male.sing +1633 -0
- data/data/en/words/entities.locations.sing +68 -0
- data/data/en/words/entities.national.sing +253 -0
- data/data/en/words/entities.organizations.sing +7 -0
- data/data/en/words/entities.us-states.sing +11 -0
- data/data/en/words/units.1 +45 -0
- data/data/en/words/units.1.dot +4 -0
- data/data/en/words/units.3 +2 -0
- data/data/en/words/units.4 +5 -0
- data/data/en/words/units.4.dot +1 -0
- data/data/en/words/words-medical.adv.1 +1191 -0
- data/data/en/words/words-medical.prep.1 +67 -0
- data/data/en/words/words-medical.v.4.1 +2835 -0
- data/data/en/words/words-medical.v.4.2 +2848 -0
- data/data/en/words/words-medical.v.4.3 +3011 -0
- data/data/en/words/words-medical.v.4.4 +3036 -0
- data/data/en/words/words-medical.v.4.5 +3050 -0
- data/data/en/words/words.adj.1 +6794 -0
- data/data/en/words/words.adj.2 +638 -0
- data/data/en/words/words.adj.3 +667 -0
- data/data/en/words/words.adv.1 +1573 -0
- data/data/en/words/words.adv.2 +67 -0
- data/data/en/words/words.adv.3 +157 -0
- data/data/en/words/words.adv.4 +80 -0
- data/data/en/words/words.n.1 +11464 -0
- data/data/en/words/words.n.1.wiki +264 -0
- data/data/en/words/words.n.2.s +2017 -0
- data/data/en/words/words.n.2.s.biolg +1 -0
- data/data/en/words/words.n.2.s.wiki +298 -0
- data/data/en/words/words.n.2.x +65 -0
- data/data/en/words/words.n.2.x.wiki +10 -0
- data/data/en/words/words.n.3 +5717 -0
- data/data/en/words/words.n.t +23 -0
- data/data/en/words/words.v.1.1 +1038 -0
- data/data/en/words/words.v.1.2 +1043 -0
- data/data/en/words/words.v.1.3 +1052 -0
- data/data/en/words/words.v.1.4 +1023 -0
- data/data/en/words/words.v.1.p +17 -0
- data/data/en/words/words.v.10.1 +14 -0
- data/data/en/words/words.v.10.2 +15 -0
- data/data/en/words/words.v.10.3 +88 -0
- data/data/en/words/words.v.10.4 +17 -0
- data/data/en/words/words.v.2.1 +1253 -0
- data/data/en/words/words.v.2.2 +1304 -0
- data/data/en/words/words.v.2.3 +1280 -0
- data/data/en/words/words.v.2.4 +1285 -0
- data/data/en/words/words.v.2.5 +1287 -0
- data/data/en/words/words.v.4.1 +2472 -0
- data/data/en/words/words.v.4.2 +2487 -0
- data/data/en/words/words.v.4.3 +2441 -0
- data/data/en/words/words.v.4.4 +2478 -0
- data/data/en/words/words.v.4.5 +2483 -0
- data/data/en/words/words.v.5.1 +98 -0
- data/data/en/words/words.v.5.2 +98 -0
- data/data/en/words/words.v.5.3 +103 -0
- data/data/en/words/words.v.5.4 +102 -0
- data/data/en/words/words.v.6.1 +388 -0
- data/data/en/words/words.v.6.2 +401 -0
- data/data/en/words/words.v.6.3 +397 -0
- data/data/en/words/words.v.6.4 +405 -0
- data/data/en/words/words.v.6.5 +401 -0
- data/data/en/words/words.v.8.1 +117 -0
- data/data/en/words/words.v.8.2 +118 -0
- data/data/en/words/words.v.8.3 +118 -0
- data/data/en/words/words.v.8.4 +119 -0
- data/data/en/words/words.v.8.5 +119 -0
- data/data/en/words/words.y +104 -0
- data/data/lt/.DS_Store +0 -0
- data/data/lt/4.0.affix +6 -0
- data/data/lt/4.0.constituent-knowledge +24 -0
- data/data/lt/4.0.dict +135 -0
- data/data/lt/4.0.knowledge +38 -0
- data/data/lt/Makefile +389 -0
- data/data/lt/Makefile.am +11 -0
- data/data/lt/Makefile.in +389 -0
- data/ext/.DS_Store +0 -0
- data/ext/link_grammar/.DS_Store +0 -0
- data/ext/link_grammar/extconf.rb +2 -0
- data/ext/link_grammar/link-grammar/.DS_Store +0 -0
- data/ext/link_grammar/link-grammar/.deps/analyze-linkage.Plo +198 -0
- data/ext/link_grammar/link-grammar/.deps/and.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/api.Plo +244 -0
- data/ext/link_grammar/link-grammar/.deps/build-disjuncts.Plo +212 -0
- data/ext/link_grammar/link-grammar/.deps/command-line.Plo +201 -0
- data/ext/link_grammar/link-grammar/.deps/constituents.Plo +201 -0
- data/ext/link_grammar/link-grammar/.deps/count.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/disjunct-utils.Plo +126 -0
- data/ext/link_grammar/link-grammar/.deps/disjuncts.Plo +123 -0
- data/ext/link_grammar/link-grammar/.deps/error.Plo +121 -0
- data/ext/link_grammar/link-grammar/.deps/expand.Plo +133 -0
- data/ext/link_grammar/link-grammar/.deps/extract-links.Plo +198 -0
- data/ext/link_grammar/link-grammar/.deps/fast-match.Plo +200 -0
- data/ext/link_grammar/link-grammar/.deps/idiom.Plo +200 -0
- data/ext/link_grammar/link-grammar/.deps/jni-client.Plo +217 -0
- data/ext/link_grammar/link-grammar/.deps/link-parser.Po +1 -0
- data/ext/link_grammar/link-grammar/.deps/massage.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/post-process.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/pp_knowledge.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/pp_lexer.Plo +201 -0
- data/ext/link_grammar/link-grammar/.deps/pp_linkset.Plo +200 -0
- data/ext/link_grammar/link-grammar/.deps/prefix.Plo +102 -0
- data/ext/link_grammar/link-grammar/.deps/preparation.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/print-util.Plo +200 -0
- data/ext/link_grammar/link-grammar/.deps/print.Plo +201 -0
- data/ext/link_grammar/link-grammar/.deps/prune.Plo +202 -0
- data/ext/link_grammar/link-grammar/.deps/read-dict.Plo +223 -0
- data/ext/link_grammar/link-grammar/.deps/read-regex.Plo +123 -0
- data/ext/link_grammar/link-grammar/.deps/regex-morph.Plo +131 -0
- data/ext/link_grammar/link-grammar/.deps/resources.Plo +203 -0
- data/ext/link_grammar/link-grammar/.deps/spellcheck-aspell.Plo +1 -0
- data/ext/link_grammar/link-grammar/.deps/spellcheck-hun.Plo +115 -0
- data/ext/link_grammar/link-grammar/.deps/string-set.Plo +198 -0
- data/ext/link_grammar/link-grammar/.deps/tokenize.Plo +160 -0
- data/ext/link_grammar/link-grammar/.deps/utilities.Plo +222 -0
- data/ext/link_grammar/link-grammar/.deps/word-file.Plo +201 -0
- data/ext/link_grammar/link-grammar/.deps/word-utils.Plo +212 -0
- data/ext/link_grammar/link-grammar/.libs/analyze-linkage.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/and.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/api.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/build-disjuncts.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/command-line.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/constituents.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/count.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/disjunct-utils.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/disjuncts.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/error.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/expand.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/extract-links.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/fast-match.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/idiom.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/jni-client.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java-symbols.expsym +31 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib.dSYM/Contents/Info.plist +20 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib.dSYM/Contents/Resources/DWARF/liblink-grammar-java.4.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.a +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar-symbols.expsym +194 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib.dSYM/Contents/Info.plist +20 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib.dSYM/Contents/Resources/DWARF/liblink-grammar.4.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.a +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.dylib +0 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.la +41 -0
- data/ext/link_grammar/link-grammar/.libs/liblink-grammar.lai +41 -0
- data/ext/link_grammar/link-grammar/.libs/massage.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/post-process.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/pp_knowledge.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/pp_lexer.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/pp_linkset.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/prefix.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/preparation.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/print-util.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/print.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/prune.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/read-dict.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/read-regex.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/regex-morph.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/resources.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/spellcheck-aspell.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/spellcheck-hun.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/string-set.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/tokenize.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/utilities.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/word-file.o +0 -0
- data/ext/link_grammar/link-grammar/.libs/word-utils.o +0 -0
- data/ext/link_grammar/link-grammar/Makefile +900 -0
- data/ext/link_grammar/link-grammar/Makefile.am +202 -0
- data/ext/link_grammar/link-grammar/Makefile.in +900 -0
- data/ext/link_grammar/link-grammar/analyze-linkage.c +1317 -0
- data/ext/link_grammar/link-grammar/analyze-linkage.h +24 -0
- data/ext/link_grammar/link-grammar/and.c +1603 -0
- data/ext/link_grammar/link-grammar/and.h +27 -0
- data/ext/link_grammar/link-grammar/api-structures.h +362 -0
- data/ext/link_grammar/link-grammar/api-types.h +72 -0
- data/ext/link_grammar/link-grammar/api.c +1887 -0
- data/ext/link_grammar/link-grammar/api.h +96 -0
- data/ext/link_grammar/link-grammar/autoit/.DS_Store +0 -0
- data/ext/link_grammar/link-grammar/autoit/README +10 -0
- data/ext/link_grammar/link-grammar/autoit/_LGTest.au3 +22 -0
- data/ext/link_grammar/link-grammar/autoit/_LinkGrammar.au3 +545 -0
- data/ext/link_grammar/link-grammar/build-disjuncts.c +487 -0
- data/ext/link_grammar/link-grammar/build-disjuncts.h +21 -0
- data/ext/link_grammar/link-grammar/command-line.c +458 -0
- data/ext/link_grammar/link-grammar/command-line.h +15 -0
- data/ext/link_grammar/link-grammar/constituents.c +1836 -0
- data/ext/link_grammar/link-grammar/constituents.h +26 -0
- data/ext/link_grammar/link-grammar/corpus/.DS_Store +0 -0
- data/ext/link_grammar/link-grammar/corpus/.deps/cluster.Plo +1 -0
- data/ext/link_grammar/link-grammar/corpus/.deps/corpus.Plo +1 -0
- data/ext/link_grammar/link-grammar/corpus/Makefile +527 -0
- data/ext/link_grammar/link-grammar/corpus/Makefile.am +46 -0
- data/ext/link_grammar/link-grammar/corpus/Makefile.in +527 -0
- data/ext/link_grammar/link-grammar/corpus/README +17 -0
- data/ext/link_grammar/link-grammar/corpus/cluster.c +286 -0
- data/ext/link_grammar/link-grammar/corpus/cluster.h +32 -0
- data/ext/link_grammar/link-grammar/corpus/corpus.c +483 -0
- data/ext/link_grammar/link-grammar/corpus/corpus.h +46 -0
- data/ext/link_grammar/link-grammar/count.c +828 -0
- data/ext/link_grammar/link-grammar/count.h +25 -0
- data/ext/link_grammar/link-grammar/disjunct-utils.c +261 -0
- data/ext/link_grammar/link-grammar/disjunct-utils.h +27 -0
- data/ext/link_grammar/link-grammar/disjuncts.c +138 -0
- data/ext/link_grammar/link-grammar/disjuncts.h +13 -0
- data/ext/link_grammar/link-grammar/error.c +92 -0
- data/ext/link_grammar/link-grammar/error.h +35 -0
- data/ext/link_grammar/link-grammar/expand.c +67 -0
- data/ext/link_grammar/link-grammar/expand.h +13 -0
- data/ext/link_grammar/link-grammar/externs.h +22 -0
- data/ext/link_grammar/link-grammar/extract-links.c +625 -0
- data/ext/link_grammar/link-grammar/extract-links.h +16 -0
- data/ext/link_grammar/link-grammar/fast-match.c +309 -0
- data/ext/link_grammar/link-grammar/fast-match.h +17 -0
- data/ext/link_grammar/link-grammar/idiom.c +373 -0
- data/ext/link_grammar/link-grammar/idiom.h +15 -0
- data/ext/link_grammar/link-grammar/jni-client.c +779 -0
- data/ext/link_grammar/link-grammar/jni-client.h +236 -0
- data/ext/link_grammar/link-grammar/liblink-grammar-java.la +42 -0
- data/ext/link_grammar/link-grammar/liblink-grammar.la +41 -0
- data/ext/link_grammar/link-grammar/link-features.h +37 -0
- data/ext/link_grammar/link-grammar/link-features.h.in +37 -0
- data/ext/link_grammar/link-grammar/link-grammar-java.def +31 -0
- data/ext/link_grammar/link-grammar/link-grammar.def +194 -0
- data/ext/link_grammar/link-grammar/link-includes.h +465 -0
- data/ext/link_grammar/link-grammar/link-parser.c +849 -0
- data/ext/link_grammar/link-grammar/massage.c +329 -0
- data/ext/link_grammar/link-grammar/massage.h +13 -0
- data/ext/link_grammar/link-grammar/post-process.c +1113 -0
- data/ext/link_grammar/link-grammar/post-process.h +45 -0
- data/ext/link_grammar/link-grammar/pp_knowledge.c +376 -0
- data/ext/link_grammar/link-grammar/pp_knowledge.h +14 -0
- data/ext/link_grammar/link-grammar/pp_lexer.c +1920 -0
- data/ext/link_grammar/link-grammar/pp_lexer.h +19 -0
- data/ext/link_grammar/link-grammar/pp_linkset.c +158 -0
- data/ext/link_grammar/link-grammar/pp_linkset.h +20 -0
- data/ext/link_grammar/link-grammar/prefix.c +482 -0
- data/ext/link_grammar/link-grammar/prefix.h +139 -0
- data/ext/link_grammar/link-grammar/preparation.c +412 -0
- data/ext/link_grammar/link-grammar/preparation.h +20 -0
- data/ext/link_grammar/link-grammar/print-util.c +87 -0
- data/ext/link_grammar/link-grammar/print-util.h +32 -0
- data/ext/link_grammar/link-grammar/print.c +1085 -0
- data/ext/link_grammar/link-grammar/print.h +16 -0
- data/ext/link_grammar/link-grammar/prune.c +1864 -0
- data/ext/link_grammar/link-grammar/prune.h +17 -0
- data/ext/link_grammar/link-grammar/read-dict.c +1785 -0
- data/ext/link_grammar/link-grammar/read-dict.h +29 -0
- data/ext/link_grammar/link-grammar/read-regex.c +161 -0
- data/ext/link_grammar/link-grammar/read-regex.h +12 -0
- data/ext/link_grammar/link-grammar/regex-morph.c +126 -0
- data/ext/link_grammar/link-grammar/regex-morph.h +17 -0
- data/ext/link_grammar/link-grammar/resources.c +180 -0
- data/ext/link_grammar/link-grammar/resources.h +23 -0
- data/ext/link_grammar/link-grammar/sat-solver/.DS_Store +0 -0
- data/ext/link_grammar/link-grammar/sat-solver/.deps/fast-sprintf.Plo +1 -0
- data/ext/link_grammar/link-grammar/sat-solver/.deps/sat-encoder.Plo +1 -0
- data/ext/link_grammar/link-grammar/sat-solver/.deps/util.Plo +1 -0
- data/ext/link_grammar/link-grammar/sat-solver/.deps/variables.Plo +1 -0
- data/ext/link_grammar/link-grammar/sat-solver/.deps/word-tag.Plo +1 -0
- data/ext/link_grammar/link-grammar/sat-solver/Makefile +527 -0
- data/ext/link_grammar/link-grammar/sat-solver/Makefile.am +29 -0
- data/ext/link_grammar/link-grammar/sat-solver/Makefile.in +527 -0
- data/ext/link_grammar/link-grammar/sat-solver/clock.hpp +33 -0
- data/ext/link_grammar/link-grammar/sat-solver/fast-sprintf.cpp +26 -0
- data/ext/link_grammar/link-grammar/sat-solver/fast-sprintf.hpp +7 -0
- data/ext/link_grammar/link-grammar/sat-solver/guiding.hpp +244 -0
- data/ext/link_grammar/link-grammar/sat-solver/matrix-ut.hpp +79 -0
- data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.cpp +2811 -0
- data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.h +11 -0
- data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.hpp +381 -0
- data/ext/link_grammar/link-grammar/sat-solver/trie.hpp +118 -0
- data/ext/link_grammar/link-grammar/sat-solver/util.cpp +23 -0
- data/ext/link_grammar/link-grammar/sat-solver/util.hpp +14 -0
- data/ext/link_grammar/link-grammar/sat-solver/variables.cpp +5 -0
- data/ext/link_grammar/link-grammar/sat-solver/variables.hpp +829 -0
- data/ext/link_grammar/link-grammar/sat-solver/word-tag.cpp +159 -0
- data/ext/link_grammar/link-grammar/sat-solver/word-tag.hpp +162 -0
- data/ext/link_grammar/link-grammar/spellcheck-aspell.c +148 -0
- data/ext/link_grammar/link-grammar/spellcheck-hun.c +136 -0
- data/ext/link_grammar/link-grammar/spellcheck.h +34 -0
- data/ext/link_grammar/link-grammar/string-set.c +169 -0
- data/ext/link_grammar/link-grammar/string-set.h +16 -0
- data/ext/link_grammar/link-grammar/structures.h +498 -0
- data/ext/link_grammar/link-grammar/tokenize.c +1049 -0
- data/ext/link_grammar/link-grammar/tokenize.h +15 -0
- data/ext/link_grammar/link-grammar/utilities.c +847 -0
- data/ext/link_grammar/link-grammar/utilities.h +281 -0
- data/ext/link_grammar/link-grammar/word-file.c +124 -0
- data/ext/link_grammar/link-grammar/word-file.h +15 -0
- data/ext/link_grammar/link-grammar/word-utils.c +526 -0
- data/ext/link_grammar/link-grammar/word-utils.h +152 -0
- data/ext/link_grammar/link_grammar.c +202 -0
- data/ext/link_grammar/link_grammar.h +99 -0
- data/grammar_cop.gemspec +24 -0
- data/lib/.DS_Store +0 -0
- data/lib/grammar_cop.rb +9 -0
- data/lib/grammar_cop/.DS_Store +0 -0
- data/lib/grammar_cop/dictionary.rb +19 -0
- data/lib/grammar_cop/linkage.rb +30 -0
- data/lib/grammar_cop/parse_options.rb +32 -0
- data/lib/grammar_cop/sentence.rb +36 -0
- data/lib/grammar_cop/version.rb +3 -0
- data/test/.DS_Store +0 -0
- data/test/grammar_cop_test.rb +27 -0
- metadata +407 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
#include "util.hpp"
|
2
|
+
|
3
|
+
bool isEndingInterpunction(const char* str) {
|
4
|
+
return strcmp(str, ".") == 0 ||
|
5
|
+
strcmp(str, "?") == 0 ||
|
6
|
+
strcmp(str, "!") == 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
bool isConnective(Sentence sent, int w) {
|
10
|
+
return sent->is_conjunction[w];
|
11
|
+
}
|
12
|
+
|
13
|
+
bool isComma(Sentence sent, int w) {
|
14
|
+
return strcmp(word(sent, w), ",") == 0;
|
15
|
+
}
|
16
|
+
|
17
|
+
bool isConnectiveOrComma(Sentence sent, int w) {
|
18
|
+
return isConnective(sent, w) || isComma(sent, w);
|
19
|
+
}
|
20
|
+
|
21
|
+
const char* word(Sentence sent, int w) {
|
22
|
+
return sent->word[w].string;
|
23
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
#ifndef __UTIL_HPP__
|
2
|
+
#define __UTIL_HPP__
|
3
|
+
|
4
|
+
extern "C" {
|
5
|
+
#include <link-grammar/api.h>
|
6
|
+
}
|
7
|
+
|
8
|
+
bool isEndingInterpunction(const char* str);
|
9
|
+
bool isConnective(Sentence sent, int w);
|
10
|
+
bool isComma(Sentence sent, int w);
|
11
|
+
bool isConnectiveOrComma(Sentence sent, int w);
|
12
|
+
const char* word(Sentence sent, int w);
|
13
|
+
|
14
|
+
#endif
|
@@ -0,0 +1,829 @@
|
|
1
|
+
#ifndef __VARIABLES_HPP__
|
2
|
+
#define __VARIABLES_HPP__
|
3
|
+
|
4
|
+
#include <vector>
|
5
|
+
#include <map>
|
6
|
+
|
7
|
+
extern "C" {
|
8
|
+
#include <link-grammar/api.h>
|
9
|
+
}
|
10
|
+
|
11
|
+
#include "guiding.hpp"
|
12
|
+
#include "Solver.h"
|
13
|
+
#include "trie.hpp"
|
14
|
+
#include "matrix-ut.hpp"
|
15
|
+
#include "fast-sprintf.hpp"
|
16
|
+
|
17
|
+
|
18
|
+
#define MAX_VARIABLE_NAME 256
|
19
|
+
|
20
|
+
|
21
|
+
// #define _DEBUG
|
22
|
+
// #define _VARS
|
23
|
+
|
24
|
+
#ifdef _DEBUG
|
25
|
+
#define _VARS
|
26
|
+
#endif
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
#ifdef _VARS
|
31
|
+
extern ostream& var_defs_stream;
|
32
|
+
#endif
|
33
|
+
|
34
|
+
static char* construct_link_label(const char* connector1, const char* connector2) {
|
35
|
+
char* result = (char*)xalloc((std::max(strlen(connector1), strlen(connector2)) + 1)*
|
36
|
+
sizeof(char));
|
37
|
+
char* presult = result;
|
38
|
+
while (*connector1 != '\0' && *connector2 != '\0') {
|
39
|
+
if (*connector1 == '*')
|
40
|
+
*presult++ = *connector2;
|
41
|
+
else if (*connector2 == '*')
|
42
|
+
*presult++ = *connector1;
|
43
|
+
else
|
44
|
+
*presult++ = std::max(*connector1, *connector2);
|
45
|
+
|
46
|
+
connector1++;
|
47
|
+
connector2++;
|
48
|
+
}
|
49
|
+
while(*connector1 != '\0')
|
50
|
+
*presult++ = *connector1++;
|
51
|
+
while(*connector2 != '\0')
|
52
|
+
*presult++ = *connector2++;
|
53
|
+
*presult = '\0';
|
54
|
+
return result;
|
55
|
+
}
|
56
|
+
|
57
|
+
static bool labels_match(const char* label1, const char* label2) {
|
58
|
+
// printf("Compare: %s %s\n", label1, label2);
|
59
|
+
|
60
|
+
if ((label1[0] == 'S' && label2[0] == 'S') &&
|
61
|
+
(label1[1] == 's' || label1[1] == 'p') &&
|
62
|
+
(label2[1] == 's' || label2[1] == 'p')) {
|
63
|
+
label1 += 2;
|
64
|
+
label2 += 2;
|
65
|
+
}
|
66
|
+
|
67
|
+
while(*label1 != '\0' && *label2 != '\0') {
|
68
|
+
if (*label1 != '*' && *label2 != '*' &&
|
69
|
+
*label1 != *label2)
|
70
|
+
return false;
|
71
|
+
|
72
|
+
label1++; label2++;
|
73
|
+
}
|
74
|
+
return true;
|
75
|
+
}
|
76
|
+
|
77
|
+
////////////////////////////////////////////////////////////////////////////
|
78
|
+
class Variables {
|
79
|
+
public:
|
80
|
+
Variables(Sentence sent)
|
81
|
+
:_var(0)
|
82
|
+
,_sent(sent)
|
83
|
+
,_linked_variable_map(sent->length, -1)
|
84
|
+
,_linked_min_variable_map(sent->length, -1)
|
85
|
+
,_linked_max_variable_map(sent->length, -1)
|
86
|
+
,_link_variable_map(sent->length)
|
87
|
+
,_fat_link_variable_map(sent->length, -1)
|
88
|
+
,_link_top_cw_variable_map(sent->length)
|
89
|
+
, _link_cw_variable_map(sent->length)
|
90
|
+
,_link_top_ww_variable_map(sent->length, -1)
|
91
|
+
,_thin_link_variable_map(sent->length, -1)
|
92
|
+
,_guiding(new CostDistanceGuiding(sent))
|
93
|
+
{
|
94
|
+
}
|
95
|
+
|
96
|
+
~Variables() {
|
97
|
+
std::vector<LinkVar*>::iterator i;
|
98
|
+
for (i = _link_variables.begin(); i != _link_variables.end(); i++) {
|
99
|
+
if ((*i) != 0) {
|
100
|
+
xfree((*i)->label, strlen((*i)->label));
|
101
|
+
delete *i;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
delete _guiding;
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
/*
|
109
|
+
* General purpose variables specified by their names
|
110
|
+
*/
|
111
|
+
|
112
|
+
// If guiding params are unknown, they are set do default
|
113
|
+
int string(const char* name) {
|
114
|
+
int var;
|
115
|
+
if (!get_var_from_trie(name, var)) {
|
116
|
+
#ifdef _VARS
|
117
|
+
var_defs_stream << name << "\t" << var << endl;
|
118
|
+
#endif
|
119
|
+
_guiding->setStringParameters(var, name);
|
120
|
+
}
|
121
|
+
assert(var != -1, "Var == -1");
|
122
|
+
return var;
|
123
|
+
}
|
124
|
+
|
125
|
+
// If the cost is explicitely given, guiding params are calculated
|
126
|
+
// using the cost. Any params set earlier are overridden.
|
127
|
+
int string_cost(const char* name, int cost) {
|
128
|
+
int var;
|
129
|
+
var = string(name);
|
130
|
+
_guiding->setStringParameters(var, name, cost);
|
131
|
+
assert(var != -1, "Var == -1");
|
132
|
+
return var;
|
133
|
+
}
|
134
|
+
|
135
|
+
/*
|
136
|
+
* Variables that specify that a part of word tag is satisfied
|
137
|
+
* without making any connections of the given direction.
|
138
|
+
*/
|
139
|
+
|
140
|
+
// If guiding params are unknown, they are set do default
|
141
|
+
int epsilon(char* v, char dir) {
|
142
|
+
char name[MAX_VARIABLE_NAME];
|
143
|
+
dir = (dir == '+') ? 'r' : 'l';
|
144
|
+
char* s = name;
|
145
|
+
*s++ = dir;
|
146
|
+
*s++ = 'e';
|
147
|
+
s = fast_sprintf(s, v);
|
148
|
+
int var;
|
149
|
+
if (!get_var_from_trie(name, var)) {
|
150
|
+
#ifdef _VARS
|
151
|
+
var_defs_stream << name << "\t" << var << endl;
|
152
|
+
#endif
|
153
|
+
_guiding->setEpsilonParameters(var);
|
154
|
+
}
|
155
|
+
assert(var != -1, "Var == -1");
|
156
|
+
return var;
|
157
|
+
}
|
158
|
+
|
159
|
+
/*
|
160
|
+
* linked(wi, wj)
|
161
|
+
* Variables that specify that two words are linked
|
162
|
+
*/
|
163
|
+
|
164
|
+
// If guiding params are unknown, they are set do default
|
165
|
+
int linked(int wi, int wj) {
|
166
|
+
assert(wi < wj, "Variables: linked should be ordered");
|
167
|
+
int var;
|
168
|
+
if (!get_linked_variable(wi, wj, var)) {
|
169
|
+
#ifdef _VARS
|
170
|
+
var_defs_stream << "linked_" << wi << "_" << wj << "\t" << var << endl;
|
171
|
+
#endif
|
172
|
+
add_linked_variable(wi, wj, var);
|
173
|
+
_guiding->setLinkedParameters(var, wi, wj);
|
174
|
+
}
|
175
|
+
assert(var != -1, "Var == -1");
|
176
|
+
return var;
|
177
|
+
}
|
178
|
+
|
179
|
+
// If guiding params are unknown, they are set do default
|
180
|
+
int linked_max(int wi, int wj) {
|
181
|
+
int var;
|
182
|
+
if (!get_linked_max_variable(wi, wj, var)) {
|
183
|
+
#ifdef _VARS
|
184
|
+
var_defs_stream << "linked_max_" << wi << "_" << wj << "\t" << var << endl;
|
185
|
+
#endif
|
186
|
+
_guiding->setLinkedMinMaxParameters(var, wi, wj);
|
187
|
+
}
|
188
|
+
assert(var != -1, "Var == -1");
|
189
|
+
return var;
|
190
|
+
}
|
191
|
+
|
192
|
+
// If guiding params are unknown, they are set do default
|
193
|
+
int linked_min(int wi, int wj) {
|
194
|
+
int var;
|
195
|
+
if (!get_linked_min_variable(wi, wj, var)) {
|
196
|
+
#ifdef _VARS
|
197
|
+
var_defs_stream << "linked_min_" << wi << "_" << wj << "\t" << var << endl;
|
198
|
+
#endif
|
199
|
+
_guiding->setLinkedMinMaxParameters(var, wi, wj);
|
200
|
+
}
|
201
|
+
assert(var != -1, "Var == -1");
|
202
|
+
return var;
|
203
|
+
}
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
/*
|
208
|
+
* link(wi, pi, wj, pj)
|
209
|
+
* Variables that specify that a direct link has been established
|
210
|
+
* between the connectors ci of the word_i at position i and
|
211
|
+
* cj of the word_j at position j
|
212
|
+
*/
|
213
|
+
|
214
|
+
// If guiding params are unknown, they are set do default
|
215
|
+
int link(int wi, int pi, const char* ci, int wj, int pj, const char* cj) {
|
216
|
+
assert(wi < wj, "Variables: link should be ordered");
|
217
|
+
int var;
|
218
|
+
if (!get_link_variable(wi, pi, wj, pj, var)) {
|
219
|
+
#ifdef _VARS
|
220
|
+
var_defs_stream << "link_" << wi << "_" << pi << "_" << ci << "_"
|
221
|
+
<< wj << "_" << pj << "_" << cj << "\t" << var << endl;
|
222
|
+
#endif
|
223
|
+
add_link_variable(wi, pi, ci, wj, pj, cj, var);
|
224
|
+
_guiding->setLinkParameters(var, wi, ci, wj, cj, _link_variables[var]->label);
|
225
|
+
}
|
226
|
+
assert(var != -1, "Var == -1");
|
227
|
+
return var;
|
228
|
+
}
|
229
|
+
|
230
|
+
// If the cost is specified, guiding params are calculated
|
231
|
+
// using the cost. Any guiding params that are set earlier are overridden
|
232
|
+
int link_cost(int wi, int pi, const char* ci, int wj, int pj, const char* cj,
|
233
|
+
int cost) {
|
234
|
+
assert(wi < wj, "Variables: link should be ordered");
|
235
|
+
int var = link(wi, pi, ci, wj, pj, cj);
|
236
|
+
_guiding->setLinkParameters(var, wi, ci, wj, cj, link_variable(var)->label, cost);
|
237
|
+
assert(var != -1, "Var == -1");
|
238
|
+
return var;
|
239
|
+
}
|
240
|
+
|
241
|
+
/*
|
242
|
+
* The following types of variables are used for conjunction handling
|
243
|
+
*/
|
244
|
+
|
245
|
+
|
246
|
+
/*
|
247
|
+
* fat_link(wi, wj)
|
248
|
+
* Variables that specify that there is a fat link from the word i
|
249
|
+
* up to the word j
|
250
|
+
*/
|
251
|
+
|
252
|
+
// If guiding params for this variable are not set earlier, they are
|
253
|
+
// now set to default
|
254
|
+
int fat_link(int wi, int wj) {
|
255
|
+
assert(_sent->is_conjunction[wj] || strcmp(_sent->word[wj].string, ",") == 0,
|
256
|
+
"Fat link can up only to a connective word");
|
257
|
+
int var;
|
258
|
+
if (!get_fat_link_variable(wi, wj, var)) {
|
259
|
+
#ifdef _VARS
|
260
|
+
var_defs_stream << "fatlink_" << wi << "_" << wj << "\t" << var << endl;
|
261
|
+
#endif
|
262
|
+
add_fatlink_variable(wi, wj, var);
|
263
|
+
_guiding->setFatLinkParameters(var, wi, wj);
|
264
|
+
}
|
265
|
+
assert(var != -1, "Var == -1");
|
266
|
+
return var;
|
267
|
+
}
|
268
|
+
|
269
|
+
/*
|
270
|
+
* fat_link_neighbor(w)
|
271
|
+
* It seems that connective words usually have fat links to at least one
|
272
|
+
* neighboring word. This is a definitional variable for that notion and
|
273
|
+
* it can positively affect the search guiding.
|
274
|
+
*/
|
275
|
+
int neighbor_fat_link(int w) {
|
276
|
+
assert(_sent->is_conjunction[w] || strcmp(_sent->word[w].string, ",") == 0,
|
277
|
+
"Only connective words can have fat links down");
|
278
|
+
int var;
|
279
|
+
char name[MAX_VARIABLE_NAME];
|
280
|
+
sprintf(name, "nfl_%d", w);
|
281
|
+
if (!get_var_from_trie(name, var)) {
|
282
|
+
#ifdef _VARS
|
283
|
+
var_defs_stream << name << "\t" << var << endl;
|
284
|
+
#endif
|
285
|
+
_guiding->setNeighborFatLinkParameters(var, w);
|
286
|
+
}
|
287
|
+
assert(var != -1, "Var == -1");
|
288
|
+
return var;
|
289
|
+
}
|
290
|
+
|
291
|
+
/*
|
292
|
+
* thin_link(wi, wj)
|
293
|
+
* Variables that specify that two words are linked by a thin link
|
294
|
+
*/
|
295
|
+
|
296
|
+
// If guiding params are unknown, they are set do default
|
297
|
+
int thin_link(int wi, int wj) {
|
298
|
+
assert(wi < wj, "Variables: thin link should be ordered");
|
299
|
+
int var;
|
300
|
+
if (!get_thin_link_variable(wi, wj, var)) {
|
301
|
+
#ifdef _VARS
|
302
|
+
var_defs_stream << "thin_link_" << wi << "_" << wj << "\t" << var << endl;
|
303
|
+
#endif
|
304
|
+
_guiding->setThinLinkParameters(var, wi, wj);
|
305
|
+
}
|
306
|
+
assert(var != -1, "Var == -1");
|
307
|
+
return var;
|
308
|
+
}
|
309
|
+
|
310
|
+
/*
|
311
|
+
* link_cw(wi, wj, pj)
|
312
|
+
* Variables that specify that an indirect link has been established
|
313
|
+
* between the word i and connector cj of the word_j at position
|
314
|
+
* j.
|
315
|
+
*/
|
316
|
+
|
317
|
+
// If guiding params for this variable are not set earlier, they are
|
318
|
+
// now set to default
|
319
|
+
int link_cw(int wi, int wj, int pj, const char* cj) {
|
320
|
+
int var;
|
321
|
+
if (!get_link_cw_variable(wi, wj, pj, var)) {
|
322
|
+
#ifdef _VARS
|
323
|
+
var_defs_stream << "link_cw_"
|
324
|
+
<< "(" << wj << "_" << pj << "_" << cj << ")_"
|
325
|
+
<< wi
|
326
|
+
<< "\t" << var << endl;
|
327
|
+
#endif
|
328
|
+
_guiding->setLinkCWParameters(var, wi, wj, cj);
|
329
|
+
}
|
330
|
+
assert(var != -1, "Var == -1");
|
331
|
+
return var;
|
332
|
+
}
|
333
|
+
|
334
|
+
|
335
|
+
/*
|
336
|
+
* link_top_cw(wi, wj, pj)
|
337
|
+
* Variables that specify that a connective word has been directly
|
338
|
+
* linked to a connector
|
339
|
+
*/
|
340
|
+
|
341
|
+
// If guiding params for this variable are not set earlier, they are
|
342
|
+
// now set to default
|
343
|
+
int link_top_cw(int wi, int wj, int pj, const char* cj) {
|
344
|
+
int var;
|
345
|
+
if (!get_link_top_cw_variable(wi, wj, pj, var)) {
|
346
|
+
add_link_top_cw_variable(wi, wj, pj, cj, var);
|
347
|
+
_guiding->setLinkTopCWParameters(var, wi, wj, cj);
|
348
|
+
#ifdef _VARS
|
349
|
+
var_defs_stream << "link_top_cw_"
|
350
|
+
<< "(" << wj << "_" << pj << "_" << cj << ")_"
|
351
|
+
<< wi
|
352
|
+
<< "\t" << var << endl;
|
353
|
+
#endif
|
354
|
+
}
|
355
|
+
assert(var != -1, "Var == -1");
|
356
|
+
return var;
|
357
|
+
}
|
358
|
+
|
359
|
+
/*
|
360
|
+
* link_top_ww(wi, wj)
|
361
|
+
* Variables that specify that word wi is linked to the word wj, and
|
362
|
+
* wj is a top of the fat-link tree.
|
363
|
+
*/
|
364
|
+
|
365
|
+
// If guiding params are unknown, they are set do default
|
366
|
+
int link_top_ww(int wi, int wj) {
|
367
|
+
int var;
|
368
|
+
if (!get_link_top_ww_variable(wi, wj, var)) {
|
369
|
+
#ifdef _VARS
|
370
|
+
var_defs_stream << "link_top_ww_" << wi << "_" << wj << "\t" << var << endl;
|
371
|
+
#endif
|
372
|
+
_guiding->setLinkTopWWParameters(var, wi, wj);
|
373
|
+
}
|
374
|
+
assert(var != -1, "Var == -1");
|
375
|
+
return var;
|
376
|
+
}
|
377
|
+
|
378
|
+
|
379
|
+
|
380
|
+
#ifdef _CONNECTIVITY_
|
381
|
+
/* The following variables are deprecated */
|
382
|
+
|
383
|
+
// Variables that specify that words i and j are connected
|
384
|
+
int con(int i, int j) {
|
385
|
+
char name[MAX_VARIABLE_NAME];
|
386
|
+
char* s = name;
|
387
|
+
*s++ = 'c';
|
388
|
+
s = fast_sprintf(s, i);
|
389
|
+
*s++ = '_';
|
390
|
+
s = fast_sprintf(s, j);
|
391
|
+
int var;
|
392
|
+
if (!get_var_from_trie(name, var))
|
393
|
+
set_variable_sat_params(var, false);
|
394
|
+
return var;
|
395
|
+
}
|
396
|
+
|
397
|
+
// Auxilary variables used for connectivity encoding
|
398
|
+
int l_con(int i, int j, int k) {
|
399
|
+
int var;
|
400
|
+
if (!get_lcon_variable(i, j, k, var))
|
401
|
+
set_variable_sat_params(var, false);
|
402
|
+
return var;
|
403
|
+
}
|
404
|
+
#endif
|
405
|
+
|
406
|
+
/*
|
407
|
+
* link(wi, pi, wj, pj)
|
408
|
+
*/
|
409
|
+
// Returns the indices of all link variables
|
410
|
+
const std::vector<int>& link_variables() {
|
411
|
+
return _link_variables_indices;
|
412
|
+
}
|
413
|
+
|
414
|
+
// Returns the indices of all link_x_x_wj_pj variables
|
415
|
+
const std::vector<int>& link_variables(int wj, int pj) {
|
416
|
+
std::pair<int, int> p(wj, pj);
|
417
|
+
return _link_variable_wp_map[p];
|
418
|
+
}
|
419
|
+
|
420
|
+
// Additional info about the link(wi, pi, wj, pj) variable
|
421
|
+
struct LinkVar {
|
422
|
+
LinkVar(const std::string& _name, char* _label,
|
423
|
+
int _lw, int _lp, int _rw, int _rp, const char* _lc, const char* _rc)
|
424
|
+
: name(_name), label(_label),
|
425
|
+
left_word(_lw), right_word(_rw), left_position(_lp), right_position(_rp),
|
426
|
+
left_connector(_lc), right_connector(_rc) {
|
427
|
+
}
|
428
|
+
|
429
|
+
std::string name;
|
430
|
+
char* label;
|
431
|
+
const char* left_connector;
|
432
|
+
const char* right_connector;
|
433
|
+
int left_word;
|
434
|
+
int left_position;
|
435
|
+
int right_word;
|
436
|
+
int right_position;
|
437
|
+
};
|
438
|
+
|
439
|
+
// Returns additional info about the given link variable
|
440
|
+
const LinkVar* link_variable(int var) {
|
441
|
+
return _link_variables[var];
|
442
|
+
}
|
443
|
+
|
444
|
+
/*
|
445
|
+
* linked(wi, wj)
|
446
|
+
*/
|
447
|
+
// Returns the indices of all linked variables
|
448
|
+
const std::vector<int>& linked_variables() {
|
449
|
+
return _linked_variables_indices;
|
450
|
+
}
|
451
|
+
|
452
|
+
// Additional info about the linked(i, j) variable
|
453
|
+
struct LinkedVar {
|
454
|
+
LinkedVar(int lw, int rw)
|
455
|
+
: left_word(lw), right_word(rw) {
|
456
|
+
}
|
457
|
+
|
458
|
+
int left_word;
|
459
|
+
int right_word;
|
460
|
+
};
|
461
|
+
|
462
|
+
// Returns additional info about the given linked variable
|
463
|
+
const LinkedVar* linked_variable(int var) {
|
464
|
+
return _linked_variables[var];
|
465
|
+
}
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
/*
|
470
|
+
* link_top_cw((wi, pi), wj)
|
471
|
+
*/
|
472
|
+
|
473
|
+
// Returns indices of all link_top_cw variables
|
474
|
+
const std::vector<int>& link_top_cw_variables() {
|
475
|
+
return _link_top_cw_variables_indices;
|
476
|
+
}
|
477
|
+
|
478
|
+
// Additional info about the link_top_cw(wi, wj, pj) variable
|
479
|
+
struct LinkTopCWVar {
|
480
|
+
LinkTopCWVar(const std::string& _name, int _tw, int _cw, const char* _c)
|
481
|
+
: name(_name), connector_word(_cw), top_word(_tw), connector(_c) {
|
482
|
+
}
|
483
|
+
|
484
|
+
std::string name;
|
485
|
+
char* label;
|
486
|
+
const char* connector;
|
487
|
+
int connector_word;
|
488
|
+
int top_word;
|
489
|
+
};
|
490
|
+
|
491
|
+
// Returns additional info about the given link_top_cw variable
|
492
|
+
const LinkTopCWVar* link_top_cw_variable(int var) {
|
493
|
+
return _link_top_cw_variables[var];
|
494
|
+
}
|
495
|
+
|
496
|
+
/*
|
497
|
+
* fat_link(wi, wj)
|
498
|
+
*/
|
499
|
+
// Returns indices of all fat-link variables
|
500
|
+
const std::vector<int>& fat_link_variables() {
|
501
|
+
return _fat_link_variables_indices;
|
502
|
+
}
|
503
|
+
|
504
|
+
// Additional info about the fatlink(wi, wj) variable
|
505
|
+
struct FatLinkVar {
|
506
|
+
FatLinkVar(int down, int up)
|
507
|
+
: down_word(down), up_word(up) {
|
508
|
+
}
|
509
|
+
|
510
|
+
int down_word;
|
511
|
+
int up_word;
|
512
|
+
};
|
513
|
+
|
514
|
+
// Return additional info about the given fat-link variable
|
515
|
+
const FatLinkVar* fat_link_variable(int var) {
|
516
|
+
return _fat_link_variables[var];
|
517
|
+
}
|
518
|
+
|
519
|
+
/* Pass SAT search parameters to the MiniSAT solver */
|
520
|
+
void setVariableParameters(Solver* solver) {
|
521
|
+
_guiding->passParametersToSolver(solver);
|
522
|
+
}
|
523
|
+
|
524
|
+
private:
|
525
|
+
/* Sentence that is being parsed */
|
526
|
+
Sentence _sent;
|
527
|
+
|
528
|
+
/*
|
529
|
+
* Information about string variables
|
530
|
+
*/
|
531
|
+
|
532
|
+
// What is the number of the variable with the given name?
|
533
|
+
Trie<int> _variable_trie;
|
534
|
+
|
535
|
+
/*
|
536
|
+
* Information about link(wi, pi, wj, pj) variables
|
537
|
+
*/
|
538
|
+
|
539
|
+
// What is the number of the link(wi, pi, wj, pj) variable?
|
540
|
+
MatrixUpperTriangle< std::map<std::pair<int, int>, int> > _link_variable_map;
|
541
|
+
|
542
|
+
|
543
|
+
// What are the numbers of all link(wi, pi, wj, pj) variables?
|
544
|
+
std::vector<int> _link_variables_indices;
|
545
|
+
|
546
|
+
// What are the numbers of all link(x, x, wj, pj) variables?
|
547
|
+
std::map< std::pair<int, int>, std::vector<int> > _link_variable_wp_map;
|
548
|
+
|
549
|
+
|
550
|
+
// Additional info about the link(wi, pi, wj, pj) variable with the given number
|
551
|
+
std::vector<LinkVar*> _link_variables;
|
552
|
+
|
553
|
+
// Set this additional info
|
554
|
+
void add_link_variable(int i, int pi, const char* ci, int j, int pj, const char* cj, int var) {
|
555
|
+
char name[MAX_VARIABLE_NAME];
|
556
|
+
char* s = name;
|
557
|
+
*s++ = 'l'; *s++ = 'i'; *s++ = 'n'; *s++ = 'k';
|
558
|
+
*s++ = '_';
|
559
|
+
s = fast_sprintf(s, i);
|
560
|
+
*s++ = '_';
|
561
|
+
s = fast_sprintf(s, pi);
|
562
|
+
*s++ = '_';
|
563
|
+
s = fast_sprintf(s, ci);
|
564
|
+
*s++ = '_';
|
565
|
+
s = fast_sprintf(s, j);
|
566
|
+
*s++ = '_';
|
567
|
+
s = fast_sprintf(s, pj);
|
568
|
+
*s++ = '_';
|
569
|
+
s = fast_sprintf(s, cj);
|
570
|
+
char* label = construct_link_label(ci, cj);
|
571
|
+
|
572
|
+
if (var >= _link_variables.size()) {
|
573
|
+
_link_variables.resize(var + 1, 0);
|
574
|
+
}
|
575
|
+
_link_variables[var] = new LinkVar(name, label, i, pi, j, pj, ci, cj);
|
576
|
+
_link_variables_indices.push_back(var);
|
577
|
+
}
|
578
|
+
|
579
|
+
|
580
|
+
/*
|
581
|
+
* Information about linked(i, j) variables
|
582
|
+
*/
|
583
|
+
|
584
|
+
|
585
|
+
// What is the number of the linked(i, j) variable?
|
586
|
+
MatrixUpperTriangle<int> _linked_variable_map;
|
587
|
+
|
588
|
+
// What are the numbers of all linked(i, j) variables?
|
589
|
+
std::vector<int> _linked_variables_indices;
|
590
|
+
|
591
|
+
// Additional info about the linked(i, j) variable
|
592
|
+
std::vector<LinkedVar*> _linked_variables;
|
593
|
+
|
594
|
+
// Set the additional info
|
595
|
+
void add_linked_variable(int i, int j, int var) {
|
596
|
+
if (var >= _linked_variables.size()) {
|
597
|
+
_linked_variables.resize(var + 1, 0);
|
598
|
+
}
|
599
|
+
_linked_variables[var] = new LinkedVar(i, j);
|
600
|
+
_linked_variables_indices.push_back(var);
|
601
|
+
}
|
602
|
+
|
603
|
+
// What is the number of the linked_min(i, j) variable?
|
604
|
+
Matrix<int> _linked_min_variable_map;
|
605
|
+
|
606
|
+
// What is the number of the linked_max(i, j) variable?
|
607
|
+
Matrix<int> _linked_max_variable_map;
|
608
|
+
|
609
|
+
/*
|
610
|
+
* Information about the fat_link(i, j) variables
|
611
|
+
*/
|
612
|
+
|
613
|
+
// What is the number of the fatlink(wi, wj) variable?
|
614
|
+
Matrix<int> _fat_link_variable_map;
|
615
|
+
|
616
|
+
// What are the numbers of all fatlink(wi wj) variables?
|
617
|
+
std::vector<int> _fat_link_variables_indices;
|
618
|
+
|
619
|
+
// Additional info about the fatlink(wi, wj) variable with the given number
|
620
|
+
std::vector<FatLinkVar*> _fat_link_variables;
|
621
|
+
|
622
|
+
// Set the additional info
|
623
|
+
void add_fatlink_variable(int i, int j, int var) {
|
624
|
+
if (var >= _fat_link_variables.size()) {
|
625
|
+
_fat_link_variables.resize(var + 1, 0);
|
626
|
+
}
|
627
|
+
_fat_link_variables[var] = new FatLinkVar(i, j);
|
628
|
+
_fat_link_variables_indices.push_back(var);
|
629
|
+
}
|
630
|
+
|
631
|
+
/*
|
632
|
+
* Information about the thin_link(i, j) variables
|
633
|
+
*/
|
634
|
+
// What is the number of the thin_link(i, j) variable?
|
635
|
+
MatrixUpperTriangle<int> _thin_link_variable_map;
|
636
|
+
|
637
|
+
/*
|
638
|
+
* Information about the link_top_cw(w, wj, pj) variables
|
639
|
+
*/
|
640
|
+
|
641
|
+
// What is the number of the link_top_cw(wi, wj, pj) variable?
|
642
|
+
Matrix< std::map<int, int> > _link_top_cw_variable_map;
|
643
|
+
|
644
|
+
// What are the numbers of all link_top_cw(wi, wj, pj) variables?
|
645
|
+
std::vector<int> _link_top_cw_variables_indices;
|
646
|
+
|
647
|
+
// Additional info about the link_top_cw(wi, wj, pj) variable with the given number
|
648
|
+
std::vector<LinkTopCWVar*> _link_top_cw_variables;
|
649
|
+
|
650
|
+
// Set this additional info
|
651
|
+
void add_link_top_cw_variable(int i, int j, int pj, const char* cj, int var) {
|
652
|
+
char name[MAX_VARIABLE_NAME];
|
653
|
+
char* s = name;
|
654
|
+
*s++ = 'l'; *s++ = 'i'; *s++ = 'n'; *s++ = 'k'; *s++ = '_'; *s++ = 't'; *s++ = 'o'; *s++ = 'p';
|
655
|
+
*s++ = '_';
|
656
|
+
s = fast_sprintf(s, i);
|
657
|
+
*s++ = '_'; *s++ = '(';
|
658
|
+
s = fast_sprintf(s, j);
|
659
|
+
*s++ = '_';
|
660
|
+
s = fast_sprintf(s, pj);
|
661
|
+
*s++ = '_';
|
662
|
+
s = fast_sprintf(s, cj);
|
663
|
+
*s++ = ')';
|
664
|
+
*s = '\0';
|
665
|
+
|
666
|
+
if (var >= _link_top_cw_variables.size()) {
|
667
|
+
_link_top_cw_variables.resize(var + 1, 0);
|
668
|
+
}
|
669
|
+
_link_top_cw_variables[var] = new LinkTopCWVar(name, i, j, cj);
|
670
|
+
_link_top_cw_variables_indices.push_back(var);
|
671
|
+
}
|
672
|
+
|
673
|
+
/*
|
674
|
+
* Information about the link_cw(w, wj, pj) variables
|
675
|
+
*/
|
676
|
+
// What is the number of the link_cw(wi, wj, pj) variable?
|
677
|
+
Matrix< std::map<int, int> > _link_cw_variable_map;
|
678
|
+
|
679
|
+
/*
|
680
|
+
* Information about the link_top_ww(i, j) variables
|
681
|
+
*/
|
682
|
+
|
683
|
+
// What is the number of the link_top_ww(i, j) variable?
|
684
|
+
Matrix<int> _link_top_ww_variable_map;
|
685
|
+
|
686
|
+
|
687
|
+
#ifdef _CONNECTIVITY_
|
688
|
+
std::map<std::pair<std::pair<int, int>,int>, int> _lcon_variables;
|
689
|
+
#endif
|
690
|
+
|
691
|
+
/* SAT search parameters */
|
692
|
+
Guiding* _guiding;
|
693
|
+
|
694
|
+
/* Current free variable number */
|
695
|
+
int _var;
|
696
|
+
|
697
|
+
/* Get a variable number that has not been used before */
|
698
|
+
int get_fresh_var(void) {
|
699
|
+
return _var++;
|
700
|
+
}
|
701
|
+
|
702
|
+
/* Helper functions that retrieve variable numbers from appropriate
|
703
|
+
data structures. If the variable is not present, it is assigned a
|
704
|
+
fresh variable number, and false is returned. Otherwise, the number
|
705
|
+
is retrieved and true is returned. */
|
706
|
+
|
707
|
+
bool get_var_from_trie(const char* name, int& var) {
|
708
|
+
try {
|
709
|
+
int num = _variable_trie.lookup(name);
|
710
|
+
if (num != Trie<int>::NOT_FOUND) {
|
711
|
+
var = num;
|
712
|
+
return true;
|
713
|
+
}
|
714
|
+
else {
|
715
|
+
var = get_fresh_var();
|
716
|
+
_variable_trie.insert(name, var);
|
717
|
+
return false;
|
718
|
+
}
|
719
|
+
} catch (const std::string& s) {
|
720
|
+
cout << s << endl;
|
721
|
+
exit(EXIT_FAILURE);
|
722
|
+
}
|
723
|
+
}
|
724
|
+
|
725
|
+
|
726
|
+
bool get_2int_variable(int i, int j, int& var,
|
727
|
+
Matrix<int>& mp) {
|
728
|
+
var = mp(i, j);
|
729
|
+
if (var == -1) {
|
730
|
+
var = get_fresh_var();
|
731
|
+
mp.set(i, j, var);
|
732
|
+
return false;
|
733
|
+
}
|
734
|
+
return true;
|
735
|
+
}
|
736
|
+
|
737
|
+
bool get_3int_variable(int i, int j, int pj, int& var,
|
738
|
+
Matrix< std::map<int, int> >& mp) {
|
739
|
+
std::map<int, int>& m = mp(i, j);
|
740
|
+
std::map<int, int>::iterator it = m.find(pj);
|
741
|
+
if (it == m.end()) {
|
742
|
+
var = get_fresh_var();
|
743
|
+
m[pj] = var;
|
744
|
+
return false;
|
745
|
+
} else {
|
746
|
+
var = it->second;
|
747
|
+
return true;
|
748
|
+
}
|
749
|
+
}
|
750
|
+
|
751
|
+
bool get_4int_variable(int i, int pi, int j, int pj, int& var,
|
752
|
+
Matrix< std::map<std::pair<int, int>, int> >& mp) {
|
753
|
+
std::map< std::pair<int, int>, int >& m = mp(i, j);
|
754
|
+
std::pair<int, int> p(pi, pj);
|
755
|
+
std::map< std::pair<int, int>, int >::iterator it = m.find(p);
|
756
|
+
if (it == m.end()) {
|
757
|
+
var = get_fresh_var();
|
758
|
+
m[p] = var;
|
759
|
+
return false;
|
760
|
+
} else {
|
761
|
+
var = it->second;
|
762
|
+
return true;
|
763
|
+
}
|
764
|
+
}
|
765
|
+
|
766
|
+
bool get_link_variable(int i, int pi, int j, int pj, int& var) {
|
767
|
+
bool ret = get_4int_variable(i, pi, j, pj, var, _link_variable_map);
|
768
|
+
if (!ret) {
|
769
|
+
std::pair<int, int> p(j, pj);
|
770
|
+
_link_variable_wp_map[p].push_back(var);
|
771
|
+
}
|
772
|
+
return ret;
|
773
|
+
}
|
774
|
+
|
775
|
+
|
776
|
+
bool get_linked_variable(int i, int j, int& var) {
|
777
|
+
return get_2int_variable(i, j, var, _linked_variable_map);
|
778
|
+
}
|
779
|
+
|
780
|
+
bool get_linked_min_variable(int i, int j, int& var) {
|
781
|
+
return get_2int_variable(i, j, var, _linked_min_variable_map);
|
782
|
+
}
|
783
|
+
|
784
|
+
bool get_linked_max_variable(int i, int j, int& var) {
|
785
|
+
return get_2int_variable(i, j, var, _linked_max_variable_map);
|
786
|
+
}
|
787
|
+
|
788
|
+
bool get_fat_link_variable(int i, int j, int& var) {
|
789
|
+
return get_2int_variable(i, j, var, _fat_link_variable_map);
|
790
|
+
}
|
791
|
+
|
792
|
+
bool get_thin_link_variable(int i, int j, int& var) {
|
793
|
+
return get_2int_variable(i, j, var, _thin_link_variable_map);
|
794
|
+
}
|
795
|
+
|
796
|
+
bool get_link_cw_variable(int i, int j, int pj, int& var) {
|
797
|
+
return get_3int_variable(i, j, pj, var, _link_cw_variable_map);
|
798
|
+
}
|
799
|
+
|
800
|
+
bool get_link_top_cw_variable(int i, int j, int pj, int& var) {
|
801
|
+
return get_3int_variable(i, j, pj, var, _link_top_cw_variable_map);
|
802
|
+
}
|
803
|
+
|
804
|
+
bool get_link_top_ww_variable(int i, int j, int& var) {
|
805
|
+
return get_2int_variable(i, j, var, _link_top_ww_variable_map);
|
806
|
+
}
|
807
|
+
|
808
|
+
|
809
|
+
#ifdef _CONNECTIVITY_
|
810
|
+
bool get_lcon_variable(int i, int j, int k, int& var) {
|
811
|
+
std::pair<std::pair<int, int>, int> p(std::pair<int, int>(i, j), k);
|
812
|
+
std::map<std::pair<std::pair<int, int>, int>, int>::iterator it = _lcon_variables.find(p);
|
813
|
+
if (it != _lcon_variables.end()) {
|
814
|
+
var = it->second;
|
815
|
+
return true;
|
816
|
+
} else {
|
817
|
+
var = get_fresh_var();
|
818
|
+
#ifdef _VARS
|
819
|
+
var_defs_stream << "lcon_" << i << "_" << j << "_" << k << "\t" << var << endl;
|
820
|
+
#endif
|
821
|
+
_lcon_variables[p] = var;
|
822
|
+
return false;
|
823
|
+
}
|
824
|
+
}
|
825
|
+
#endif
|
826
|
+
|
827
|
+
};
|
828
|
+
|
829
|
+
#endif
|