grammar_cop 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,25 @@
|
|
1
|
+
/*************************************************************************/
|
2
|
+
/* Copyright (c) 2004 */
|
3
|
+
/* Daniel Sleator, David Temperley, and John Lafferty */
|
4
|
+
/* All rights reserved */
|
5
|
+
/* */
|
6
|
+
/* Use of the link grammar parsing system is subject to the terms of the */
|
7
|
+
/* license set forth in the LICENSE file included with this software, */
|
8
|
+
/* and also available at http://www.link.cs.cmu.edu/link/license.html */
|
9
|
+
/* This license allows free redistribution and use in source and binary */
|
10
|
+
/* forms, with or without modification, subject to certain conditions. */
|
11
|
+
/* */
|
12
|
+
/*************************************************************************/
|
13
|
+
|
14
|
+
s64 table_lookup(Sentence, int, int, Connector *, Connector *, int);
|
15
|
+
int do_match(Sentence, Connector *a, Connector *b, int wa, int wb);
|
16
|
+
int x_match(Sentence, Connector *a, Connector *b);
|
17
|
+
s64 do_parse(Sentence sent, int mincost, Parse_Options opts);
|
18
|
+
void conjunction_prune(Sentence sent, Parse_Options opts);
|
19
|
+
void count_set_effective_distance(Sentence sent);
|
20
|
+
void count_unset_effective_distance(Sentence sent);
|
21
|
+
void delete_unmarked_disjuncts(Sentence sent);
|
22
|
+
|
23
|
+
void init_count(Sentence sent);
|
24
|
+
void free_count(Sentence sent);
|
25
|
+
|
@@ -0,0 +1,261 @@
|
|
1
|
+
/*************************************************************************/
|
2
|
+
/* Copyright (c) 2004 */
|
3
|
+
/* Daniel Sleator, David Temperley, and John Lafferty */
|
4
|
+
/* All rights reserved */
|
5
|
+
/* */
|
6
|
+
/* Use of the link grammar parsing system is subject to the terms of the */
|
7
|
+
/* license set forth in the LICENSE file included with this software, */
|
8
|
+
/* and also available at http://www.link.cs.cmu.edu/link/license.html */
|
9
|
+
/* This license allows free redistribution and use in source and binary */
|
10
|
+
/* forms, with or without modification, subject to certain conditions. */
|
11
|
+
/* */
|
12
|
+
/*************************************************************************/
|
13
|
+
|
14
|
+
#include <stdio.h>
|
15
|
+
#include <string.h>
|
16
|
+
#include "disjunct-utils.h"
|
17
|
+
#include "externs.h"
|
18
|
+
#include "structures.h"
|
19
|
+
#include "utilities.h"
|
20
|
+
#include "word-utils.h"
|
21
|
+
|
22
|
+
#ifndef DISJUNCT_UTILS_CC
|
23
|
+
#define DISJUNCT_UTILS_CC
|
24
|
+
/* Disjunct utilities ... */
|
25
|
+
|
26
|
+
/**
|
27
|
+
* free_disjuncts() -- free the list of disjuncts pointed to by c
|
28
|
+
* (does not free any strings)
|
29
|
+
*/
|
30
|
+
void free_disjuncts(Disjunct *c)
|
31
|
+
{
|
32
|
+
Disjunct *c1;
|
33
|
+
for (;c != NULL; c = c1) {
|
34
|
+
c1 = c->next;
|
35
|
+
free_connectors(c->left);
|
36
|
+
free_connectors(c->right);
|
37
|
+
xfree((char *)c, sizeof(Disjunct));
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
/**
|
42
|
+
* This builds a new copy of the disjunct pointed to by d (except for the
|
43
|
+
* next field which is set to NULL). Strings, as usual,
|
44
|
+
* are not copied.
|
45
|
+
*/
|
46
|
+
Disjunct * copy_disjunct(Disjunct * d)
|
47
|
+
{
|
48
|
+
Disjunct * d1;
|
49
|
+
if (d == NULL) return NULL;
|
50
|
+
d1 = (Disjunct *) xalloc(sizeof(Disjunct));
|
51
|
+
*d1 = *d;
|
52
|
+
d1->next = NULL;
|
53
|
+
d1->left = copy_connectors(d->left);
|
54
|
+
d1->right = copy_connectors(d->right);
|
55
|
+
return d1;
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Destructively catenates the two disjunct lists d1 followed by d2.
|
60
|
+
* Doesn't change the contents of the disjuncts.
|
61
|
+
* Traverses the first list, but not the second.
|
62
|
+
*/
|
63
|
+
Disjunct * catenate_disjuncts(Disjunct *d1, Disjunct *d2)
|
64
|
+
{
|
65
|
+
Disjunct * dis = d1;
|
66
|
+
|
67
|
+
if (d1 == NULL) return d2;
|
68
|
+
if (d2 == NULL) return d1;
|
69
|
+
while (dis->next != NULL) dis = dis->next;
|
70
|
+
dis->next = d2;
|
71
|
+
return d1;
|
72
|
+
}
|
73
|
+
|
74
|
+
/** Returns the number of disjuncts in the list pointed to by d */
|
75
|
+
int count_disjuncts(Disjunct * d)
|
76
|
+
{
|
77
|
+
int count = 0;
|
78
|
+
for (; d != NULL; d = d->next)
|
79
|
+
{
|
80
|
+
count++;
|
81
|
+
}
|
82
|
+
return count;
|
83
|
+
}
|
84
|
+
|
85
|
+
/* ============================================================= */
|
86
|
+
typedef struct disjunct_dup_table_s disjunct_dup_table;
|
87
|
+
struct disjunct_dup_table_s
|
88
|
+
{
|
89
|
+
int dup_table_size;
|
90
|
+
Disjunct ** dup_table;
|
91
|
+
};
|
92
|
+
|
93
|
+
/**
|
94
|
+
* This is a hash function for disjuncts
|
95
|
+
*
|
96
|
+
* This is the old version that doesn't check for domination, just
|
97
|
+
* equality.
|
98
|
+
*/
|
99
|
+
static inline int old_hash_disjunct(disjunct_dup_table *dt, Disjunct * d)
|
100
|
+
{
|
101
|
+
int i;
|
102
|
+
Connector *e;
|
103
|
+
i = 0;
|
104
|
+
for (e = d->left ; e != NULL; e = e->next) {
|
105
|
+
i += string_hash(e->string);
|
106
|
+
}
|
107
|
+
for (e = d->right ; e != NULL; e = e->next) {
|
108
|
+
i += string_hash(e->string);
|
109
|
+
}
|
110
|
+
i += string_hash(d->string);
|
111
|
+
i += (i>>10);
|
112
|
+
return (i & (dt->dup_table_size-1));
|
113
|
+
}
|
114
|
+
|
115
|
+
/**
|
116
|
+
* The connectors must be exactly equal. A similar function
|
117
|
+
* is connectors_equal_AND(), but that ignores priorities,
|
118
|
+
* this does not.
|
119
|
+
*/
|
120
|
+
static int connectors_equal_prune(Connector *c1, Connector *c2)
|
121
|
+
{
|
122
|
+
return (c1->label == c2->label) &&
|
123
|
+
(c1->multi == c2->multi) &&
|
124
|
+
(c1->priority == c2->priority) &&
|
125
|
+
(strcmp(c1->string, c2->string) == 0);
|
126
|
+
}
|
127
|
+
|
128
|
+
/** returns TRUE if the disjuncts are exactly the same */
|
129
|
+
static int disjuncts_equal(Disjunct * d1, Disjunct * d2)
|
130
|
+
{
|
131
|
+
Connector *e1, *e2;
|
132
|
+
e1 = d1->left;
|
133
|
+
e2 = d2->left;
|
134
|
+
while((e1!=NULL) && (e2!=NULL)) {
|
135
|
+
if (!connectors_equal_prune(e1,e2)) break;
|
136
|
+
e1 = e1->next;
|
137
|
+
e2 = e2->next;
|
138
|
+
}
|
139
|
+
if ((e1!=NULL) || (e2!=NULL)) return FALSE;
|
140
|
+
e1 = d1->right;
|
141
|
+
e2 = d2->right;
|
142
|
+
while((e1!=NULL) && (e2!=NULL)) {
|
143
|
+
if (!connectors_equal_prune(e1,e2)) break;
|
144
|
+
e1 = e1->next;
|
145
|
+
e2 = e2->next;
|
146
|
+
}
|
147
|
+
if ((e1!=NULL) || (e2!=NULL)) return FALSE;
|
148
|
+
return (strcmp(d1->string, d2->string) == 0);
|
149
|
+
}
|
150
|
+
|
151
|
+
static disjunct_dup_table * disjunct_dup_table_new(size_t sz)
|
152
|
+
{
|
153
|
+
size_t i;
|
154
|
+
disjunct_dup_table *dt;
|
155
|
+
dt = (disjunct_dup_table *) malloc(sizeof(disjunct_dup_table));
|
156
|
+
|
157
|
+
dt->dup_table_size = sz;
|
158
|
+
dt->dup_table = (Disjunct **) xalloc(sz * sizeof(Disjunct *));
|
159
|
+
|
160
|
+
for (i=0; i<sz; i++) dt->dup_table[i] = NULL;
|
161
|
+
|
162
|
+
return dt;
|
163
|
+
}
|
164
|
+
|
165
|
+
static void disjunct_dup_table_delete(disjunct_dup_table *dt)
|
166
|
+
{
|
167
|
+
xfree((char *) dt->dup_table, dt->dup_table_size * sizeof(Disjunct *));
|
168
|
+
free(dt);
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Takes the list of disjuncts pointed to by d, eliminates all
|
173
|
+
* duplicates, and returns a pointer to a new list.
|
174
|
+
* It frees the disjuncts that are eliminated.
|
175
|
+
*/
|
176
|
+
Disjunct * eliminate_duplicate_disjuncts(Disjunct * d)
|
177
|
+
{
|
178
|
+
int i, h, count;
|
179
|
+
Disjunct *dn, *dx;
|
180
|
+
disjunct_dup_table *dt;
|
181
|
+
|
182
|
+
count = 0;
|
183
|
+
dt = disjunct_dup_table_new(next_power_of_two_up(2 * count_disjuncts(d)));
|
184
|
+
|
185
|
+
while (d != NULL)
|
186
|
+
{
|
187
|
+
dn = d->next;
|
188
|
+
h = old_hash_disjunct(dt, d);
|
189
|
+
|
190
|
+
for (dx = dt->dup_table[h]; dx!=NULL; dx=dx->next)
|
191
|
+
{
|
192
|
+
if (disjuncts_equal(dx, d)) break;
|
193
|
+
}
|
194
|
+
if (dx == NULL)
|
195
|
+
{
|
196
|
+
d->next = dt->dup_table[h];
|
197
|
+
dt->dup_table[h] = d;
|
198
|
+
}
|
199
|
+
else
|
200
|
+
{
|
201
|
+
d->next = NULL; /* to prevent it from freeing the whole list */
|
202
|
+
if (d->cost < dx->cost) dx->cost = d->cost;
|
203
|
+
free_disjuncts(d);
|
204
|
+
count++;
|
205
|
+
}
|
206
|
+
d = dn;
|
207
|
+
}
|
208
|
+
|
209
|
+
/* d is already null */
|
210
|
+
for (i=0; i<dt->dup_table_size; i++)
|
211
|
+
{
|
212
|
+
for (dn = dt->dup_table[i]; dn != NULL; dn = dx) {
|
213
|
+
dx = dn->next;
|
214
|
+
dn->next = d;
|
215
|
+
d = dn;
|
216
|
+
}
|
217
|
+
}
|
218
|
+
|
219
|
+
if ((verbosity > 2) && (count != 0)) printf("killed %d duplicates\n", count);
|
220
|
+
|
221
|
+
disjunct_dup_table_delete(dt);
|
222
|
+
return d;
|
223
|
+
}
|
224
|
+
|
225
|
+
/* ============================================================= */
|
226
|
+
|
227
|
+
/* Return the stringified disjunct.
|
228
|
+
* Be sure to free the string upon return.
|
229
|
+
*/
|
230
|
+
|
231
|
+
static char * prt_con(Connector *c, char * p, char dir)
|
232
|
+
{
|
233
|
+
size_t n;
|
234
|
+
|
235
|
+
if (NULL == c) return p;
|
236
|
+
p = prt_con (c->next, p, dir);
|
237
|
+
|
238
|
+
if (c->multi)
|
239
|
+
{
|
240
|
+
n = sprintf(p, "@%s%c ", c->string, dir);
|
241
|
+
}
|
242
|
+
else
|
243
|
+
{
|
244
|
+
n = sprintf(p, "%s%c ", c->string, dir);
|
245
|
+
}
|
246
|
+
return p+n;
|
247
|
+
}
|
248
|
+
|
249
|
+
char * print_one_disjunct(Disjunct *dj)
|
250
|
+
{
|
251
|
+
char buff[MAX_LINE];
|
252
|
+
char * p = buff;
|
253
|
+
|
254
|
+
p = prt_con(dj->left, p, '-');
|
255
|
+
p = prt_con(dj->right, p, '+');
|
256
|
+
|
257
|
+
return strdup(buff);
|
258
|
+
}
|
259
|
+
|
260
|
+
#endif
|
261
|
+
/* ========================= END OF FILE ============================== */
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/*************************************************************************/
|
2
|
+
/* Copyright (c) 2004 */
|
3
|
+
/* Daniel Sleator, David Temperley, and John Lafferty */
|
4
|
+
/* All rights reserved */
|
5
|
+
/* */
|
6
|
+
/* Use of the link grammar parsing system is subject to the terms of the */
|
7
|
+
/* license set forth in the LICENSE file included with this software, */
|
8
|
+
/* and also available at http://www.link.cs.cmu.edu/link/license.html */
|
9
|
+
/* This license allows free redistribution and use in source and binary */
|
10
|
+
/* forms, with or without modification, subject to certain conditions. */
|
11
|
+
/* */
|
12
|
+
/*************************************************************************/
|
13
|
+
|
14
|
+
#ifndef _LINK_GRAMMAR_DISJUNCT_UTILS_H_
|
15
|
+
#define _LINK_GRAMMAR_DISJUNCT_UTILS_H_
|
16
|
+
|
17
|
+
#include "api-types.h"
|
18
|
+
|
19
|
+
/* Disjunct utilities ... */
|
20
|
+
void free_disjuncts(Disjunct *);
|
21
|
+
int count_disjuncts(Disjunct *);
|
22
|
+
Disjunct * copy_disjunct(Disjunct * );
|
23
|
+
Disjunct * catenate_disjuncts(Disjunct *, Disjunct *);
|
24
|
+
Disjunct * eliminate_duplicate_disjuncts(Disjunct * );
|
25
|
+
char * print_one_disjunct(Disjunct *);
|
26
|
+
|
27
|
+
#endif /* _LINK_GRAMMAR_DISJUNCT_UTILS_H_ */
|
@@ -0,0 +1,138 @@
|
|
1
|
+
/*************************************************************************/
|
2
|
+
/* Copyright (c) 2008, 2009 Linas Vepstas */
|
3
|
+
/* All rights reserved */
|
4
|
+
/* */
|
5
|
+
/* Use of the link grammar parsing system is subject to the terms of the */
|
6
|
+
/* license set forth in the LICENSE file included with this software, */
|
7
|
+
/* and also available at http://www.link.cs.cmu.edu/link/license.html */
|
8
|
+
/* This license allows free redistribution and use in source and binary */
|
9
|
+
/* forms, with or without modification, subject to certain conditions. */
|
10
|
+
/* */
|
11
|
+
/*************************************************************************/
|
12
|
+
/*
|
13
|
+
* disjuncts.c
|
14
|
+
*
|
15
|
+
* Miscellaneous utilities for returning the list of disjuncts that
|
16
|
+
* were acutally used in a given parse of a sentence.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <stdlib.h>
|
20
|
+
#include <string.h>
|
21
|
+
#include "api-structures.h"
|
22
|
+
#include "disjuncts.h"
|
23
|
+
#include "utilities.h"
|
24
|
+
|
25
|
+
/* ========================================================= */
|
26
|
+
|
27
|
+
/**
|
28
|
+
* lg_compute_disjunct_strings -- Given sentence, compute disjuncts.
|
29
|
+
*
|
30
|
+
* This routine will compute the string representation of the disjunct
|
31
|
+
* used for each word in parsing the given sentence. A string
|
32
|
+
* representation of the disjunct is needed for most of the corpus
|
33
|
+
* statistics functions: this string, together with the "inflected"
|
34
|
+
* word, is used as a key to index the statistics information in the
|
35
|
+
* database.
|
36
|
+
*
|
37
|
+
* XXX This implementation works, but I don't think its the simplest
|
38
|
+
* one. I think that a better implementation would have used
|
39
|
+
* sent->parse_info->chosen_disjuncts[w] to get the one that was used,
|
40
|
+
* and then print_disjuncts() to print it.
|
41
|
+
*/
|
42
|
+
void lg_compute_disjunct_strings(Sentence sent, Linkage_info *lifo)
|
43
|
+
{
|
44
|
+
char djstr[MAX_TOKEN_LENGTH*20]; /* no word will have more than 20 links */
|
45
|
+
size_t copied, left;
|
46
|
+
int i, w;
|
47
|
+
int nwords = sent->length;
|
48
|
+
Parse_info pi = sent->parse_info;
|
49
|
+
int nlinks = pi->N_links;
|
50
|
+
int *djlist, *djloco, *djcount;
|
51
|
+
|
52
|
+
if (lifo->disjunct_list_str) return;
|
53
|
+
lifo->nwords = nwords;
|
54
|
+
lifo->disjunct_list_str = (char **) malloc(nwords * sizeof(char *));
|
55
|
+
memset(lifo->disjunct_list_str, 0, nwords * sizeof(char *));
|
56
|
+
|
57
|
+
djcount = (int *) malloc (sizeof(int) * (nwords + 2*nwords*nlinks));
|
58
|
+
djlist = djcount + nwords;
|
59
|
+
djloco = djlist + nwords*nlinks;
|
60
|
+
|
61
|
+
/* Decrement nwords, so as to ignore the RIGHT-WALL */
|
62
|
+
nwords --;
|
63
|
+
|
64
|
+
for (w=0; w<nwords; w++)
|
65
|
+
{
|
66
|
+
djcount[w] = 0;
|
67
|
+
}
|
68
|
+
|
69
|
+
/* Create a table of disjuncts for each word. */
|
70
|
+
for (i=0; i<nlinks; i++)
|
71
|
+
{
|
72
|
+
int lword = pi->link_array[i].l;
|
73
|
+
int rword = pi->link_array[i].r;
|
74
|
+
int slot = djcount[lword];
|
75
|
+
|
76
|
+
/* Skip over RW link to the right wall */
|
77
|
+
if (nwords <= rword) continue;
|
78
|
+
|
79
|
+
djlist[lword*nlinks + slot] = i;
|
80
|
+
djloco[lword*nlinks + slot] = rword;
|
81
|
+
djcount[lword] ++;
|
82
|
+
|
83
|
+
slot = djcount[rword];
|
84
|
+
djlist[rword*nlinks + slot] = i;
|
85
|
+
djloco[rword*nlinks + slot] = lword;
|
86
|
+
djcount[rword] ++;
|
87
|
+
|
88
|
+
#ifdef DEBUG
|
89
|
+
printf("Link: %d is %s--%s--%s\n", i,
|
90
|
+
sent->word[lword].string, pi->link_array[i].name,
|
91
|
+
sent->word[rword].string);
|
92
|
+
#endif
|
93
|
+
}
|
94
|
+
|
95
|
+
/* Process each word in the sentence (skipping LEFT-WALL, which is
|
96
|
+
* word 0. */
|
97
|
+
for (w=1; w<nwords; w++)
|
98
|
+
{
|
99
|
+
/* Sort the disjuncts for this word. -- bubble sort */
|
100
|
+
int slot = djcount[w];
|
101
|
+
for (i=0; i<slot; i++)
|
102
|
+
{
|
103
|
+
int j;
|
104
|
+
for (j=i+1; j<slot; j++)
|
105
|
+
{
|
106
|
+
if (djloco[w*nlinks + i] > djloco[w*nlinks + j])
|
107
|
+
{
|
108
|
+
int tmp = djloco[w*nlinks + i];
|
109
|
+
djloco[w*nlinks + i] = djloco[w*nlinks + j];
|
110
|
+
djloco[w*nlinks + j] = tmp;
|
111
|
+
tmp = djlist[w*nlinks + i];
|
112
|
+
djlist[w*nlinks + i] = djlist[w*nlinks + j];
|
113
|
+
djlist[w*nlinks + j] = tmp;
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
/* Create the disjunct string */
|
119
|
+
left = sizeof(djstr);
|
120
|
+
copied = 0;
|
121
|
+
for (i=0; i<slot; i++)
|
122
|
+
{
|
123
|
+
int dj = djlist[w*nlinks + i];
|
124
|
+
copied += lg_strlcpy(djstr+copied, pi->link_array[dj].name, left);
|
125
|
+
left = sizeof(djstr) - copied;
|
126
|
+
if (djloco[w*nlinks + i] < w)
|
127
|
+
copied += lg_strlcpy(djstr+copied, "-", left--);
|
128
|
+
else
|
129
|
+
copied += lg_strlcpy(djstr+copied, "+", left--);
|
130
|
+
copied += lg_strlcpy(djstr+copied, " ", left--);
|
131
|
+
}
|
132
|
+
|
133
|
+
lifo->disjunct_list_str[w] = strdup(djstr);
|
134
|
+
}
|
135
|
+
|
136
|
+
free (djcount);
|
137
|
+
}
|
138
|
+
|