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,15 @@
|
|
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
|
+
void insert_idiom(Dictionary dict, Dict_node *);
|
14
|
+
int contains_underbar(const char *);
|
15
|
+
int is_idiom_word(const char *);
|
@@ -0,0 +1,779 @@
|
|
1
|
+
/*
|
2
|
+
* Java JNI interfaces.
|
3
|
+
*
|
4
|
+
* This implements a very simple, low-brow, non-OOP interface.
|
5
|
+
* It could be improved.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <jni.h>
|
9
|
+
#include <locale.h>
|
10
|
+
#include <string.h>
|
11
|
+
#include <stdio.h>
|
12
|
+
|
13
|
+
#ifdef USE_PTHREADS
|
14
|
+
#include <pthread.h>
|
15
|
+
#endif
|
16
|
+
|
17
|
+
#include "api.h"
|
18
|
+
#include "corpus/corpus.h"
|
19
|
+
#include "error.h"
|
20
|
+
#include "jni-client.h"
|
21
|
+
#include "utilities.h"
|
22
|
+
|
23
|
+
typedef struct
|
24
|
+
{
|
25
|
+
Dictionary dict;
|
26
|
+
Parse_Options opts, panic_parse_opts;
|
27
|
+
Sentence sent;
|
28
|
+
Linkage linkage;
|
29
|
+
int num_linkages, cur_linkage;
|
30
|
+
#if DO_PHRASE_TREE
|
31
|
+
CNode* tree;
|
32
|
+
#endif
|
33
|
+
} per_thread_data;
|
34
|
+
|
35
|
+
/* XXX FIXME
|
36
|
+
* The per_thread_data struct should ideally be somehow
|
37
|
+
* fetched from JNIEnv, or as an opaque pointer in the class.
|
38
|
+
* Not clear how to do this .. perhaps use NewDirectByteBuffer()
|
39
|
+
* and the java.nio.ByteBuffer class ?
|
40
|
+
*/
|
41
|
+
#ifdef USE_PTHREADS
|
42
|
+
static pthread_key_t java_key;
|
43
|
+
static pthread_once_t java_key_once = PTHREAD_ONCE_INIT;
|
44
|
+
|
45
|
+
static void java_key_alloc(void)
|
46
|
+
{
|
47
|
+
pthread_key_create(&java_key, free);
|
48
|
+
}
|
49
|
+
#else
|
50
|
+
static per_thread_data * global_ptd = NULL;
|
51
|
+
#endif
|
52
|
+
|
53
|
+
static per_thread_data * get_ptd(JNIEnv *env, jclass cls)
|
54
|
+
{
|
55
|
+
#ifdef USE_PTHREADS
|
56
|
+
per_thread_data *ptd = pthread_getspecific(java_key);
|
57
|
+
#else
|
58
|
+
per_thread_data *ptd = global_ptd;
|
59
|
+
#endif
|
60
|
+
if (!ptd) Java_org_linkgrammar_LinkGrammar_init(env, cls);
|
61
|
+
#ifdef USE_PTHREADS
|
62
|
+
ptd = pthread_getspecific(java_key);
|
63
|
+
#else
|
64
|
+
ptd = global_ptd;
|
65
|
+
#endif
|
66
|
+
return ptd;
|
67
|
+
}
|
68
|
+
|
69
|
+
static void setup_panic_parse_options(Parse_Options opts)
|
70
|
+
{
|
71
|
+
parse_options_set_disjunct_costf(opts, 3.0f);
|
72
|
+
parse_options_set_min_null_count(opts, 1);
|
73
|
+
parse_options_set_max_null_count(opts, MAX_SENTENCE);
|
74
|
+
parse_options_set_max_parse_time(opts, 60);
|
75
|
+
parse_options_set_use_fat_links(opts, FALSE);
|
76
|
+
parse_options_set_islands_ok(opts, TRUE);
|
77
|
+
parse_options_set_short_length(opts, 6);
|
78
|
+
parse_options_set_all_short_connectors(opts, TRUE);
|
79
|
+
parse_options_set_linkage_limit(opts, 100);
|
80
|
+
parse_options_set_verbosity(opts, 0);
|
81
|
+
parse_options_set_spell_guess(opts, FALSE);
|
82
|
+
}
|
83
|
+
|
84
|
+
static inline void test(void)
|
85
|
+
{
|
86
|
+
#ifdef DEBUG
|
87
|
+
printf("%d\n",word_contains("said",PAST_TENSE_FORM_MARKER,dict));
|
88
|
+
printf("%d\n",word_contains("gave.v",PAST_TENSE_FORM_MARKER,dict));
|
89
|
+
printf("%d\n",word_contains("have",PAST_TENSE_FORM_MARKER,dict));
|
90
|
+
printf("%d\n",word_contains("had",PAST_TENSE_FORM_MARKER,dict));
|
91
|
+
#endif
|
92
|
+
}
|
93
|
+
|
94
|
+
/* message: The string is encoded in modified UTF-8, per JNI 1.5 spec. */
|
95
|
+
static void throwException(JNIEnv *env, const char* message)
|
96
|
+
{
|
97
|
+
char *msg;
|
98
|
+
jclass exceptionClazz;
|
99
|
+
if ((*env)->ExceptionOccurred(env) != NULL) return;
|
100
|
+
|
101
|
+
msg = (char *) malloc(50+strlen(message));
|
102
|
+
strcpy(msg, "link-grammar JNI:\n");
|
103
|
+
strcat(msg, message);
|
104
|
+
exceptionClazz = (*env)->FindClass(env, "java/lang/RuntimeException");
|
105
|
+
if ((*env)->ThrowNew(env, exceptionClazz, msg) != 0)
|
106
|
+
(*env)->FatalError(env, "Fatal: link-grammar JNI: Cannot throw");
|
107
|
+
}
|
108
|
+
|
109
|
+
static per_thread_data * init(JNIEnv *env, jclass cls)
|
110
|
+
{
|
111
|
+
const char *codeset, *dict_version;
|
112
|
+
per_thread_data *ptd;
|
113
|
+
|
114
|
+
/* Get the locale from the environment...
|
115
|
+
* perhaps we should someday get it from the dictionary ??
|
116
|
+
*/
|
117
|
+
setlocale(LC_ALL, "");
|
118
|
+
|
119
|
+
/* Everything breaks if the locale is not UTF-8; check for this,
|
120
|
+
* and force the issue !
|
121
|
+
*/
|
122
|
+
codeset = nl_langinfo(CODESET);
|
123
|
+
if (!strstr(codeset, "UTF") && !strstr(codeset, "utf"))
|
124
|
+
{
|
125
|
+
prt_error("Warning: JNI: locale %s was not UTF-8; force-setting to en_US.UTF-8\n",
|
126
|
+
codeset);
|
127
|
+
setlocale(LC_CTYPE, "en_US.UTF-8");
|
128
|
+
}
|
129
|
+
|
130
|
+
ptd = (per_thread_data *) malloc(sizeof(per_thread_data));
|
131
|
+
memset(ptd, 0, sizeof(per_thread_data));
|
132
|
+
|
133
|
+
ptd->panic_parse_opts = parse_options_create();
|
134
|
+
setup_panic_parse_options(ptd->panic_parse_opts);
|
135
|
+
|
136
|
+
ptd->opts = parse_options_create();
|
137
|
+
parse_options_set_disjunct_costf(ptd->opts, 3.0f);
|
138
|
+
parse_options_set_max_sentence_length(ptd->opts, 170);
|
139
|
+
parse_options_set_max_parse_time(ptd->opts, 30);
|
140
|
+
parse_options_set_linkage_limit(ptd->opts, 1000);
|
141
|
+
parse_options_set_short_length(ptd->opts, 10);
|
142
|
+
parse_options_set_verbosity(ptd->opts,0);
|
143
|
+
parse_options_set_spell_guess(ptd->opts, FALSE);
|
144
|
+
|
145
|
+
/* Default to the english language; will need to fix
|
146
|
+
* this if/when more languages are supported.
|
147
|
+
*/
|
148
|
+
ptd->dict = dictionary_create_lang("en");
|
149
|
+
if (!ptd->dict) throwException(env, "Error: unable to open dictionary");
|
150
|
+
else test();
|
151
|
+
|
152
|
+
dict_version = linkgrammar_get_dict_version(ptd->dict);
|
153
|
+
prt_error("Info: JNI: dictionary version %s\n", dict_version);
|
154
|
+
|
155
|
+
return ptd;
|
156
|
+
}
|
157
|
+
|
158
|
+
static void finish(per_thread_data *ptd)
|
159
|
+
{
|
160
|
+
if (ptd->sent)
|
161
|
+
sentence_delete(ptd->sent);
|
162
|
+
ptd->sent = NULL;
|
163
|
+
|
164
|
+
#if DO_PHRASE_TREE
|
165
|
+
if (tree)
|
166
|
+
linkage_free_constituent_tree(tree);
|
167
|
+
tree = NULL;
|
168
|
+
#endif
|
169
|
+
|
170
|
+
if (ptd->linkage)
|
171
|
+
linkage_delete(ptd->linkage);
|
172
|
+
ptd->linkage = NULL;
|
173
|
+
|
174
|
+
dictionary_delete(ptd->dict);
|
175
|
+
ptd->dict = NULL;
|
176
|
+
|
177
|
+
parse_options_delete(ptd->opts);
|
178
|
+
ptd->opts = NULL;
|
179
|
+
|
180
|
+
parse_options_delete(ptd->panic_parse_opts);
|
181
|
+
ptd->panic_parse_opts = NULL;
|
182
|
+
|
183
|
+
#ifdef USE_PTHREADS
|
184
|
+
pthread_setspecific(java_key, NULL);
|
185
|
+
#else
|
186
|
+
global_ptd = NULL;
|
187
|
+
#endif
|
188
|
+
free(ptd);
|
189
|
+
}
|
190
|
+
|
191
|
+
/* ================================================================= */
|
192
|
+
/* Misc utilities */
|
193
|
+
|
194
|
+
#ifdef DEBUG_DO_PHRASE_TREE
|
195
|
+
static void r_printTree(CNode* cn, int level)
|
196
|
+
{
|
197
|
+
int i;
|
198
|
+
CNode* c;
|
199
|
+
|
200
|
+
if (cn == NULL) return;
|
201
|
+
|
202
|
+
/* print label */
|
203
|
+
if (cn->label != NULL) {
|
204
|
+
printf("(%s ", cn->label);
|
205
|
+
} else {
|
206
|
+
printf("NULL\n");
|
207
|
+
}
|
208
|
+
|
209
|
+
/* Recurse on children. */
|
210
|
+
for (c = cn->child; c!=NULL; c=c->next) {
|
211
|
+
if (c->child)
|
212
|
+
r_printTree(c, level+1);
|
213
|
+
else
|
214
|
+
printf("%s ", c->label);
|
215
|
+
}
|
216
|
+
printf(")\n");
|
217
|
+
for (i=0; i<=level; i++)
|
218
|
+
printf (" ");
|
219
|
+
}
|
220
|
+
|
221
|
+
static void printTree(CNode* cn)
|
222
|
+
{
|
223
|
+
r_printTree(cn,0);
|
224
|
+
printf("\n");
|
225
|
+
}
|
226
|
+
#endif /* DEBUG */
|
227
|
+
|
228
|
+
static void jParse(JNIEnv *env, per_thread_data *ptd, char* inputString)
|
229
|
+
{
|
230
|
+
int maxlen;
|
231
|
+
Parse_Options opts = ptd->opts;
|
232
|
+
int jverbosity = parse_options_get_verbosity(opts);
|
233
|
+
|
234
|
+
if (ptd->sent)
|
235
|
+
sentence_delete(ptd->sent);
|
236
|
+
|
237
|
+
if (ptd->dict == NULL) throwException(env, "jParse: dictionary not open\n");
|
238
|
+
if (inputString == NULL) throwException(env, "jParse: no input sentence!\n");
|
239
|
+
ptd->sent = sentence_create(inputString, ptd->dict);
|
240
|
+
ptd->num_linkages = 0;
|
241
|
+
|
242
|
+
if (ptd->sent == NULL)
|
243
|
+
return;
|
244
|
+
|
245
|
+
maxlen = parse_options_get_max_sentence_length(ptd->opts);
|
246
|
+
if (maxlen < sentence_length(ptd->sent))
|
247
|
+
{
|
248
|
+
if (jverbosity > 0) {
|
249
|
+
prt_error("Error: JNI: Sentence length (%d words) exceeds maximum allowable (%d words)\n",
|
250
|
+
sentence_length(ptd->sent), maxlen);
|
251
|
+
}
|
252
|
+
sentence_delete(ptd->sent);
|
253
|
+
ptd->sent = NULL;
|
254
|
+
return;
|
255
|
+
}
|
256
|
+
|
257
|
+
/* First parse with cost 0 or 1 and no null links or fat links */
|
258
|
+
parse_options_set_disjunct_costf(opts, 2.0f);
|
259
|
+
parse_options_set_min_null_count(opts, 0);
|
260
|
+
parse_options_set_max_null_count(opts, 0);
|
261
|
+
parse_options_set_use_fat_links(opts, FALSE);
|
262
|
+
parse_options_reset_resources(opts);
|
263
|
+
|
264
|
+
ptd->num_linkages = sentence_parse(ptd->sent, ptd->opts);
|
265
|
+
|
266
|
+
/* If failed, try with fat links ... */
|
267
|
+
if ((0 == ptd->num_linkages) && sentence_contains_conjunction(ptd->sent))
|
268
|
+
{
|
269
|
+
parse_options_set_use_fat_links(opts, TRUE);
|
270
|
+
ptd->num_linkages = sentence_parse(ptd->sent, ptd->opts);
|
271
|
+
}
|
272
|
+
|
273
|
+
/* If still failed, try again with null links */
|
274
|
+
if (0 == ptd->num_linkages)
|
275
|
+
{
|
276
|
+
if (jverbosity > 0) prt_error("Warning: JNI: No complete linkages found.\n");
|
277
|
+
if (parse_options_get_allow_null(opts))
|
278
|
+
{
|
279
|
+
parse_options_set_min_null_count(opts, 1);
|
280
|
+
parse_options_set_max_null_count(opts, sentence_length(ptd->sent));
|
281
|
+
ptd->num_linkages = sentence_parse(ptd->sent, opts);
|
282
|
+
}
|
283
|
+
}
|
284
|
+
|
285
|
+
if (parse_options_timer_expired(opts))
|
286
|
+
{
|
287
|
+
if (jverbosity > 0) prt_error("Warning: JNI: Timer is expired!\n");
|
288
|
+
}
|
289
|
+
if (parse_options_memory_exhausted(opts))
|
290
|
+
{
|
291
|
+
if (jverbosity > 0) prt_error("Warning: JNI: Memory is exhausted!\n");
|
292
|
+
}
|
293
|
+
|
294
|
+
if ((ptd->num_linkages == 0) &&
|
295
|
+
parse_options_resources_exhausted(opts))
|
296
|
+
{
|
297
|
+
parse_options_print_total_time(opts);
|
298
|
+
if (jverbosity > 0) prt_error("Warning: JNI: Entering \"panic\" mode...\n");
|
299
|
+
parse_options_reset_resources(ptd->panic_parse_opts);
|
300
|
+
parse_options_set_verbosity(ptd->panic_parse_opts, jverbosity);
|
301
|
+
ptd->num_linkages = sentence_parse(ptd->sent, ptd->panic_parse_opts);
|
302
|
+
if (parse_options_timer_expired(ptd->panic_parse_opts)) {
|
303
|
+
if (jverbosity > 0) prt_error("Error: JNI: Timer is expired!\n");
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
static void makeLinkage(per_thread_data *ptd)
|
309
|
+
{
|
310
|
+
if (ptd->cur_linkage < ptd->num_linkages)
|
311
|
+
{
|
312
|
+
if (ptd->linkage)
|
313
|
+
linkage_delete(ptd->linkage);
|
314
|
+
|
315
|
+
ptd->linkage = linkage_create(ptd->cur_linkage,ptd->sent,ptd->opts);
|
316
|
+
linkage_compute_union(ptd->linkage);
|
317
|
+
linkage_set_current_sublinkage(ptd->linkage,
|
318
|
+
linkage_get_num_sublinkages(ptd->linkage)-1);
|
319
|
+
|
320
|
+
#if DO_PHRASE_TREE
|
321
|
+
if (tree)
|
322
|
+
linkage_free_constituent_tree(tree);
|
323
|
+
tree = linkage_constituent_tree(linkage);
|
324
|
+
printTree(tree);
|
325
|
+
#endif
|
326
|
+
}
|
327
|
+
}
|
328
|
+
|
329
|
+
/* ================================================================ */
|
330
|
+
/* Java JNI wrappers */
|
331
|
+
|
332
|
+
/*
|
333
|
+
* Class: LinkGrammar
|
334
|
+
* Method: getVersion
|
335
|
+
* Signature: (I)Ljava/lang/String;
|
336
|
+
*/
|
337
|
+
JNIEXPORT jstring JNICALL
|
338
|
+
Java_org_linkgrammar_LinkGrammar_getVersion(JNIEnv *env, jclass cls)
|
339
|
+
{
|
340
|
+
const char *s = linkgrammar_get_version();
|
341
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
342
|
+
return j;
|
343
|
+
}
|
344
|
+
|
345
|
+
JNIEXPORT jstring JNICALL
|
346
|
+
Java_org_linkgrammar_LinkGrammar_getDictVersion(JNIEnv *env, jclass cls)
|
347
|
+
{
|
348
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
349
|
+
const char *s = linkgrammar_get_dict_version(ptd->dict);
|
350
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
351
|
+
return j;
|
352
|
+
}
|
353
|
+
|
354
|
+
JNIEXPORT void JNICALL
|
355
|
+
Java_org_linkgrammar_LinkGrammar_setMaxParseSeconds(JNIEnv *env, jclass cls, jint maxParseSeconds)
|
356
|
+
{
|
357
|
+
per_thread_data *ptd = get_ptd(env, cls);;
|
358
|
+
parse_options_set_max_parse_time(ptd->opts, maxParseSeconds);
|
359
|
+
}
|
360
|
+
|
361
|
+
JNIEXPORT void JNICALL
|
362
|
+
Java_org_linkgrammar_LinkGrammar_setMaxCost(JNIEnv *env, jclass cls, jint maxCost)
|
363
|
+
{
|
364
|
+
per_thread_data *ptd = get_ptd(env, cls);;
|
365
|
+
parse_options_set_disjunct_cost(ptd->opts, maxCost);
|
366
|
+
}
|
367
|
+
|
368
|
+
JNIEXPORT void JNICALL
|
369
|
+
Java_org_linkgrammar_LinkGrammar_setDictionariesPath(JNIEnv *env,
|
370
|
+
jclass cls, jstring path)
|
371
|
+
{
|
372
|
+
const char *nativePath = (*env)->GetStringUTFChars(env,path, 0);
|
373
|
+
|
374
|
+
// Java passes null pointers as the string "null"
|
375
|
+
if (nativePath && strcmp(nativePath, "null"))
|
376
|
+
{
|
377
|
+
dictionary_set_data_dir(nativePath);
|
378
|
+
}
|
379
|
+
(*env)->ReleaseStringUTFChars(env,path, nativePath);
|
380
|
+
}
|
381
|
+
|
382
|
+
/*
|
383
|
+
* Class: LinkGrammar
|
384
|
+
* Method: init
|
385
|
+
* Signature: ()V
|
386
|
+
*/
|
387
|
+
JNIEXPORT void JNICALL
|
388
|
+
Java_org_linkgrammar_LinkGrammar_init(JNIEnv *env, jclass cls)
|
389
|
+
{
|
390
|
+
#ifdef USE_PTHREADS
|
391
|
+
per_thread_data *ptd;
|
392
|
+
pthread_once(&java_key_once, java_key_alloc);
|
393
|
+
ptd = pthread_getspecific(java_key);
|
394
|
+
if (ptd) return;
|
395
|
+
ptd = init(env, cls);
|
396
|
+
pthread_setspecific(java_key, ptd);
|
397
|
+
#else
|
398
|
+
if (global_ptd) return;
|
399
|
+
global_ptd = init(env, cls);
|
400
|
+
#endif
|
401
|
+
}
|
402
|
+
|
403
|
+
/*
|
404
|
+
* Class: LinkGrammar
|
405
|
+
* Method: parse
|
406
|
+
* Signature: (Ljava/lang/String;)V
|
407
|
+
*/
|
408
|
+
JNIEXPORT void JNICALL
|
409
|
+
Java_org_linkgrammar_LinkGrammar_parse(JNIEnv *env, jclass cls, jstring str)
|
410
|
+
{
|
411
|
+
const char *cStr;
|
412
|
+
char * tmp;
|
413
|
+
per_thread_data *ptd = get_ptd(env, cls);;
|
414
|
+
cStr = (*env)->GetStringUTFChars(env,str,0);
|
415
|
+
tmp = strdup(cStr);
|
416
|
+
jParse(env, ptd, tmp);
|
417
|
+
free(tmp);
|
418
|
+
(*env)->ReleaseStringUTFChars(env,str,cStr);
|
419
|
+
}
|
420
|
+
|
421
|
+
/*
|
422
|
+
* Class: LinkGrammar
|
423
|
+
* Method: close
|
424
|
+
* Signature: ()V
|
425
|
+
*/
|
426
|
+
JNIEXPORT void JNICALL
|
427
|
+
Java_org_linkgrammar_LinkGrammar_close(JNIEnv *env, jclass cls)
|
428
|
+
{
|
429
|
+
per_thread_data *ptd = get_ptd(env, cls);;
|
430
|
+
finish(ptd);
|
431
|
+
}
|
432
|
+
|
433
|
+
/*
|
434
|
+
* Class: LinkGrammar
|
435
|
+
* Method: numWords
|
436
|
+
* Signature: ()I
|
437
|
+
*/
|
438
|
+
JNIEXPORT jint JNICALL
|
439
|
+
Java_org_linkgrammar_LinkGrammar_getNumWords(JNIEnv *env, jclass cls)
|
440
|
+
{
|
441
|
+
per_thread_data *ptd = get_ptd(env, cls);;
|
442
|
+
return linkage_get_num_words(ptd->linkage);
|
443
|
+
}
|
444
|
+
|
445
|
+
/*
|
446
|
+
* Class: LinkGrammar
|
447
|
+
* Method: getWord
|
448
|
+
* Signature: (I)Ljava/lang/String;
|
449
|
+
*/
|
450
|
+
JNIEXPORT jstring JNICALL
|
451
|
+
Java_org_linkgrammar_LinkGrammar_getWord(JNIEnv *env, jclass cls, jint i)
|
452
|
+
{
|
453
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
454
|
+
|
455
|
+
/* Does not need to be freed, points into sentence */
|
456
|
+
const char * w = sentence_get_word(ptd->sent, i);
|
457
|
+
|
458
|
+
/* FWIW, j will be null if w is utf8-encoded Japanese or Chinese.
|
459
|
+
* I guess my JVM is not capable of handling Chinese/Japanese ??
|
460
|
+
* Maybe some special java thing needs to be installed?
|
461
|
+
*/
|
462
|
+
jstring j = (*env)->NewStringUTF(env, w);
|
463
|
+
return j;
|
464
|
+
}
|
465
|
+
|
466
|
+
JNIEXPORT jstring JNICALL
|
467
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageWord(JNIEnv *env, jclass cls, jint i)
|
468
|
+
{
|
469
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
470
|
+
|
471
|
+
/* Does not need to be freed, points into data structures */
|
472
|
+
/* Returns the inflected word. */
|
473
|
+
const char * w = linkage_get_word(ptd->linkage, i);
|
474
|
+
jstring j = (*env)->NewStringUTF(env, w);
|
475
|
+
return j;
|
476
|
+
}
|
477
|
+
|
478
|
+
JNIEXPORT jstring JNICALL
|
479
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageDisjunct(JNIEnv *env, jclass cls, jint i)
|
480
|
+
{
|
481
|
+
jstring j;
|
482
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
483
|
+
|
484
|
+
/* does not need to be freed, points into data structures */
|
485
|
+
/* returns the inflected word. */
|
486
|
+
const char * w = linkage_get_disjunct_str(ptd->linkage, i);
|
487
|
+
if (NULL == w) j = NULL;
|
488
|
+
else j = (*env)->NewStringUTF(env, w);
|
489
|
+
return j;
|
490
|
+
}
|
491
|
+
|
492
|
+
JNIEXPORT jstring JNICALL
|
493
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageSense(JNIEnv *env,
|
494
|
+
jclass cls, jint i, jint j)
|
495
|
+
{
|
496
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
497
|
+
Linkage lkg = ptd->linkage;
|
498
|
+
Linkage_info *lifo = lkg->info;
|
499
|
+
Sense *sns;
|
500
|
+
const char * w = NULL;
|
501
|
+
jstring js;
|
502
|
+
|
503
|
+
lg_corpus_linkage_senses(lkg);
|
504
|
+
sns = lg_get_word_sense(lifo, i);
|
505
|
+
while ((0 < j) && sns)
|
506
|
+
{
|
507
|
+
sns = lg_sense_next(sns);
|
508
|
+
j--;
|
509
|
+
}
|
510
|
+
|
511
|
+
/* does not need to be freed, points into data structures */
|
512
|
+
if (sns) w = lg_sense_get_sense(sns);
|
513
|
+
|
514
|
+
if (w) js = (*env)->NewStringUTF(env, w);
|
515
|
+
else js = NULL;
|
516
|
+
return js;
|
517
|
+
}
|
518
|
+
|
519
|
+
JNIEXPORT jdouble JNICALL
|
520
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageSenseScore(JNIEnv *env,
|
521
|
+
jclass cls, jint i, jint j)
|
522
|
+
{
|
523
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
524
|
+
Linkage lkg = ptd->linkage;
|
525
|
+
Linkage_info *lifo = lkg->info;
|
526
|
+
Sense *sns;
|
527
|
+
double score = 0.0;
|
528
|
+
|
529
|
+
sns = lg_get_word_sense(lifo, i);
|
530
|
+
while ((0 < j) && sns)
|
531
|
+
{
|
532
|
+
sns = lg_sense_next(sns);
|
533
|
+
j--;
|
534
|
+
}
|
535
|
+
|
536
|
+
if (sns) score = lg_sense_get_score(sns);
|
537
|
+
|
538
|
+
return score;
|
539
|
+
}
|
540
|
+
|
541
|
+
/*
|
542
|
+
* Class: LinkGrammar
|
543
|
+
* Method: numSkippedWords
|
544
|
+
* Signature: ()I
|
545
|
+
*/
|
546
|
+
JNIEXPORT jint JNICALL
|
547
|
+
Java_org_linkgrammar_LinkGrammar_getNumSkippedWords(JNIEnv *env, jclass cls)
|
548
|
+
{
|
549
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
550
|
+
return sentence_null_count(ptd->sent);
|
551
|
+
}
|
552
|
+
|
553
|
+
/*
|
554
|
+
* Class: LinkGrammar
|
555
|
+
* Method: numLinkages
|
556
|
+
* Signature: ()I
|
557
|
+
*/
|
558
|
+
JNIEXPORT jint JNICALL
|
559
|
+
Java_org_linkgrammar_LinkGrammar_getNumLinkages(JNIEnv *env, jclass cls)
|
560
|
+
{
|
561
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
562
|
+
return sentence_num_valid_linkages(ptd->sent);
|
563
|
+
}
|
564
|
+
|
565
|
+
/*
|
566
|
+
* Class: LinkGrammar
|
567
|
+
* Method: makeLinkage
|
568
|
+
* Signature: (I)I
|
569
|
+
*/
|
570
|
+
JNIEXPORT void JNICALL
|
571
|
+
Java_org_linkgrammar_LinkGrammar_makeLinkage(JNIEnv *env, jclass cls, jint i)
|
572
|
+
{
|
573
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
574
|
+
ptd->cur_linkage = i;
|
575
|
+
makeLinkage(ptd);
|
576
|
+
}
|
577
|
+
|
578
|
+
/*
|
579
|
+
* Class: LinkGrammar
|
580
|
+
* Method: linkageNumViolations
|
581
|
+
* Signature: ()I
|
582
|
+
*/
|
583
|
+
JNIEXPORT jint JNICALL
|
584
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageNumViolations(JNIEnv *env, jclass cls)
|
585
|
+
{
|
586
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
587
|
+
return sentence_num_violations(ptd->sent, ptd->cur_linkage);
|
588
|
+
}
|
589
|
+
|
590
|
+
/*
|
591
|
+
* Class: LinkGrammar
|
592
|
+
* Method: linkageAndCost
|
593
|
+
* Signature: ()I
|
594
|
+
*/
|
595
|
+
JNIEXPORT jint JNICALL
|
596
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageAndCost(JNIEnv *env, jclass cls)
|
597
|
+
{
|
598
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
599
|
+
return sentence_and_cost(ptd->sent, ptd->cur_linkage);
|
600
|
+
}
|
601
|
+
|
602
|
+
/*
|
603
|
+
* Class: LinkGrammar
|
604
|
+
* Method: linkageDisjunctCost
|
605
|
+
* Signature: ()I
|
606
|
+
*/
|
607
|
+
JNIEXPORT jint JNICALL
|
608
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageDisjunctCost(JNIEnv *env, jclass cls)
|
609
|
+
{
|
610
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
611
|
+
return sentence_disjunct_cost(ptd->sent, ptd->cur_linkage);
|
612
|
+
}
|
613
|
+
|
614
|
+
/*
|
615
|
+
* Class: LinkGrammar
|
616
|
+
* Method: linkageLinkCost
|
617
|
+
* Signature: ()I
|
618
|
+
*/
|
619
|
+
JNIEXPORT jint JNICALL
|
620
|
+
Java_org_linkgrammar_LinkGrammar_getLinkageLinkCost(JNIEnv *env, jclass cls)
|
621
|
+
{
|
622
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
623
|
+
return sentence_link_cost(ptd->sent, ptd->cur_linkage);
|
624
|
+
}
|
625
|
+
|
626
|
+
/*
|
627
|
+
* Class: LinkGrammar
|
628
|
+
* Method: getNumLinks
|
629
|
+
* Signature: ()I
|
630
|
+
*/
|
631
|
+
JNIEXPORT jint JNICALL
|
632
|
+
Java_org_linkgrammar_LinkGrammar_getNumLinks(JNIEnv *env, jclass cls)
|
633
|
+
{
|
634
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
635
|
+
return linkage_get_num_links(ptd->linkage);
|
636
|
+
}
|
637
|
+
|
638
|
+
/*
|
639
|
+
* Class: LinkGrammar
|
640
|
+
* Method: getLinkLWord
|
641
|
+
* Signature: (I)I
|
642
|
+
*/
|
643
|
+
JNIEXPORT jint JNICALL
|
644
|
+
Java_org_linkgrammar_LinkGrammar_getLinkLWord(JNIEnv *env, jclass cls, jint i)
|
645
|
+
{
|
646
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
647
|
+
return linkage_get_link_lword(ptd->linkage, i);
|
648
|
+
}
|
649
|
+
|
650
|
+
/*
|
651
|
+
* Class: LinkGrammar
|
652
|
+
* Method: getLinkRWord
|
653
|
+
* Signature: (I)I
|
654
|
+
*/
|
655
|
+
JNIEXPORT jint JNICALL
|
656
|
+
Java_org_linkgrammar_LinkGrammar_getLinkRWord(JNIEnv *env, jclass cls, jint i)
|
657
|
+
{
|
658
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
659
|
+
return linkage_get_link_rword(ptd->linkage, i);
|
660
|
+
}
|
661
|
+
|
662
|
+
/*
|
663
|
+
* Class: LinkGrammar
|
664
|
+
* Method: getLinkLLabel
|
665
|
+
* Signature: (I)Ljava/lang/String;
|
666
|
+
*/
|
667
|
+
JNIEXPORT jstring JNICALL
|
668
|
+
Java_org_linkgrammar_LinkGrammar_getLinkLLabel(JNIEnv *env, jclass cls, jint i)
|
669
|
+
{
|
670
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
671
|
+
/* Does not need to be freed, points into linkage */
|
672
|
+
const char *s = linkage_get_link_llabel(ptd->linkage, i);
|
673
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
674
|
+
return j;
|
675
|
+
}
|
676
|
+
|
677
|
+
/*
|
678
|
+
* Class: LinkGrammar
|
679
|
+
* Method: getLinkRLabel
|
680
|
+
* Signature: (I)Ljava/lang/String;
|
681
|
+
*/
|
682
|
+
JNIEXPORT jstring JNICALL
|
683
|
+
Java_org_linkgrammar_LinkGrammar_getLinkRLabel(JNIEnv *env, jclass cls, jint i)
|
684
|
+
{
|
685
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
686
|
+
/* Does not need to be freed, points into linkage */
|
687
|
+
const char *s = linkage_get_link_rlabel(ptd->linkage, i);
|
688
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
689
|
+
return j;
|
690
|
+
}
|
691
|
+
|
692
|
+
/*
|
693
|
+
* Class: LinkGrammar
|
694
|
+
* Method: getLinkLabel
|
695
|
+
* Signature: (I)Ljava/lang/String;
|
696
|
+
*/
|
697
|
+
JNIEXPORT jstring JNICALL
|
698
|
+
Java_org_linkgrammar_LinkGrammar_getLinkLabel(JNIEnv *env, jclass cls, jint i)
|
699
|
+
{
|
700
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
701
|
+
/* Does not need to be freed, points into linkage */
|
702
|
+
const char *s = linkage_get_link_label(ptd->linkage, i);
|
703
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
704
|
+
return j;
|
705
|
+
}
|
706
|
+
|
707
|
+
/*
|
708
|
+
* Class: LinkGrammar
|
709
|
+
* Method: constituentString
|
710
|
+
* Signature: ()Ljava/lang/String;
|
711
|
+
*/
|
712
|
+
JNIEXPORT jstring JNICALL
|
713
|
+
Java_org_linkgrammar_LinkGrammar_getConstituentString(JNIEnv *env, jclass cls)
|
714
|
+
{
|
715
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
716
|
+
/* mode 1 prints a lisp-style string, nicely indented.
|
717
|
+
* mode 2 prints a lisp-style string, but with square brackets.
|
718
|
+
* mode 3 prints a lisp-style string, one one single line.
|
719
|
+
*/
|
720
|
+
/* char *s = linkage_print_constituent_tree(linkage, 1); */
|
721
|
+
char *s = linkage_print_constituent_tree(ptd->linkage, 3);
|
722
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
723
|
+
linkage_free_constituent_tree_str(s);
|
724
|
+
return j;
|
725
|
+
}
|
726
|
+
|
727
|
+
/*
|
728
|
+
* Class: LinkGrammar
|
729
|
+
* Method: linkString
|
730
|
+
* Signature: ()Ljava/lang/String;
|
731
|
+
*/
|
732
|
+
JNIEXPORT jstring JNICALL
|
733
|
+
Java_org_linkgrammar_LinkGrammar_getLinkString(JNIEnv *env, jclass cls)
|
734
|
+
{
|
735
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
736
|
+
char *s = linkage_print_diagram(ptd->linkage);
|
737
|
+
jstring j = (*env)->NewStringUTF(env, s);
|
738
|
+
linkage_free_diagram(s);
|
739
|
+
return j;
|
740
|
+
}
|
741
|
+
|
742
|
+
/*
|
743
|
+
* Class: LinkParser
|
744
|
+
* Method: isPastTenseForm
|
745
|
+
* Signature: (Ljava/lang/String;)Z
|
746
|
+
*
|
747
|
+
* @deprecated -- past-tense verbs are tagged with .v-d or .w-d or .q-d
|
748
|
+
* subscripts. use those instead to figure out if a verb is past tense.
|
749
|
+
*/
|
750
|
+
JNIEXPORT jboolean JNICALL
|
751
|
+
Java_org_linkgrammar_LinkGrammar_isPastTenseForm(JNIEnv *env, jclass cls, jstring str)
|
752
|
+
{
|
753
|
+
jboolean rv = FALSE;
|
754
|
+
|
755
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
756
|
+
const char *cStr = (*env)->GetStringUTFChars(env,str,0);
|
757
|
+
if (dictionary_is_past_tense_form(ptd->dict, cStr) == 1)
|
758
|
+
rv = TRUE;
|
759
|
+
(*env)->ReleaseStringUTFChars(env,str,cStr);
|
760
|
+
return rv;
|
761
|
+
}
|
762
|
+
|
763
|
+
/*
|
764
|
+
* Class: LinkParser
|
765
|
+
* Method: isEntity
|
766
|
+
* Signature: (Ljava/lang/String;)Z
|
767
|
+
*/
|
768
|
+
JNIEXPORT jboolean JNICALL
|
769
|
+
Java_org_linkgrammar_LinkGrammar_isEntity(JNIEnv *env, jclass cls, jstring str)
|
770
|
+
{
|
771
|
+
jboolean rv = FALSE;
|
772
|
+
|
773
|
+
per_thread_data *ptd = get_ptd(env, cls);
|
774
|
+
const char *cStr = (*env)->GetStringUTFChars(env,str,0);
|
775
|
+
if (dictionary_is_entity(ptd->dict, cStr) == 1)
|
776
|
+
rv = TRUE;
|
777
|
+
(*env)->ReleaseStringUTFChars(env,str,cStr);
|
778
|
+
return rv;
|
779
|
+
}
|