grammar_cop 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (344) hide show
  1. data/.DS_Store +0 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +8 -0
  5. data/data/.DS_Store +0 -0
  6. data/data/Makefile +511 -0
  7. data/data/Makefile.am +4 -0
  8. data/data/Makefile.in +511 -0
  9. data/data/de/.DS_Store +0 -0
  10. data/data/de/4.0.affix +7 -0
  11. data/data/de/4.0.dict +474 -0
  12. data/data/de/Makefile +387 -0
  13. data/data/de/Makefile.am +9 -0
  14. data/data/de/Makefile.in +387 -0
  15. data/data/en/.DS_Store +0 -0
  16. data/data/en/4.0.affix +26 -0
  17. data/data/en/4.0.batch +1002 -0
  18. data/data/en/4.0.biolg.batch +411 -0
  19. data/data/en/4.0.constituent-knowledge +127 -0
  20. data/data/en/4.0.dict +8759 -0
  21. data/data/en/4.0.dict.m4 +6928 -0
  22. data/data/en/4.0.enwiki.batch +14 -0
  23. data/data/en/4.0.fixes.batch +2776 -0
  24. data/data/en/4.0.knowledge +306 -0
  25. data/data/en/4.0.regex +225 -0
  26. data/data/en/4.0.voa.batch +114 -0
  27. data/data/en/Makefile +554 -0
  28. data/data/en/Makefile.am +19 -0
  29. data/data/en/Makefile.in +554 -0
  30. data/data/en/README +173 -0
  31. data/data/en/tiny.dict +157 -0
  32. data/data/en/words/.DS_Store +0 -0
  33. data/data/en/words/Makefile +456 -0
  34. data/data/en/words/Makefile.am +78 -0
  35. data/data/en/words/Makefile.in +456 -0
  36. data/data/en/words/currency +205 -0
  37. data/data/en/words/currency.p +28 -0
  38. data/data/en/words/entities.given-bisex.sing +39 -0
  39. data/data/en/words/entities.given-female.sing +4141 -0
  40. data/data/en/words/entities.given-male.sing +1633 -0
  41. data/data/en/words/entities.locations.sing +68 -0
  42. data/data/en/words/entities.national.sing +253 -0
  43. data/data/en/words/entities.organizations.sing +7 -0
  44. data/data/en/words/entities.us-states.sing +11 -0
  45. data/data/en/words/units.1 +45 -0
  46. data/data/en/words/units.1.dot +4 -0
  47. data/data/en/words/units.3 +2 -0
  48. data/data/en/words/units.4 +5 -0
  49. data/data/en/words/units.4.dot +1 -0
  50. data/data/en/words/words-medical.adv.1 +1191 -0
  51. data/data/en/words/words-medical.prep.1 +67 -0
  52. data/data/en/words/words-medical.v.4.1 +2835 -0
  53. data/data/en/words/words-medical.v.4.2 +2848 -0
  54. data/data/en/words/words-medical.v.4.3 +3011 -0
  55. data/data/en/words/words-medical.v.4.4 +3036 -0
  56. data/data/en/words/words-medical.v.4.5 +3050 -0
  57. data/data/en/words/words.adj.1 +6794 -0
  58. data/data/en/words/words.adj.2 +638 -0
  59. data/data/en/words/words.adj.3 +667 -0
  60. data/data/en/words/words.adv.1 +1573 -0
  61. data/data/en/words/words.adv.2 +67 -0
  62. data/data/en/words/words.adv.3 +157 -0
  63. data/data/en/words/words.adv.4 +80 -0
  64. data/data/en/words/words.n.1 +11464 -0
  65. data/data/en/words/words.n.1.wiki +264 -0
  66. data/data/en/words/words.n.2.s +2017 -0
  67. data/data/en/words/words.n.2.s.biolg +1 -0
  68. data/data/en/words/words.n.2.s.wiki +298 -0
  69. data/data/en/words/words.n.2.x +65 -0
  70. data/data/en/words/words.n.2.x.wiki +10 -0
  71. data/data/en/words/words.n.3 +5717 -0
  72. data/data/en/words/words.n.t +23 -0
  73. data/data/en/words/words.v.1.1 +1038 -0
  74. data/data/en/words/words.v.1.2 +1043 -0
  75. data/data/en/words/words.v.1.3 +1052 -0
  76. data/data/en/words/words.v.1.4 +1023 -0
  77. data/data/en/words/words.v.1.p +17 -0
  78. data/data/en/words/words.v.10.1 +14 -0
  79. data/data/en/words/words.v.10.2 +15 -0
  80. data/data/en/words/words.v.10.3 +88 -0
  81. data/data/en/words/words.v.10.4 +17 -0
  82. data/data/en/words/words.v.2.1 +1253 -0
  83. data/data/en/words/words.v.2.2 +1304 -0
  84. data/data/en/words/words.v.2.3 +1280 -0
  85. data/data/en/words/words.v.2.4 +1285 -0
  86. data/data/en/words/words.v.2.5 +1287 -0
  87. data/data/en/words/words.v.4.1 +2472 -0
  88. data/data/en/words/words.v.4.2 +2487 -0
  89. data/data/en/words/words.v.4.3 +2441 -0
  90. data/data/en/words/words.v.4.4 +2478 -0
  91. data/data/en/words/words.v.4.5 +2483 -0
  92. data/data/en/words/words.v.5.1 +98 -0
  93. data/data/en/words/words.v.5.2 +98 -0
  94. data/data/en/words/words.v.5.3 +103 -0
  95. data/data/en/words/words.v.5.4 +102 -0
  96. data/data/en/words/words.v.6.1 +388 -0
  97. data/data/en/words/words.v.6.2 +401 -0
  98. data/data/en/words/words.v.6.3 +397 -0
  99. data/data/en/words/words.v.6.4 +405 -0
  100. data/data/en/words/words.v.6.5 +401 -0
  101. data/data/en/words/words.v.8.1 +117 -0
  102. data/data/en/words/words.v.8.2 +118 -0
  103. data/data/en/words/words.v.8.3 +118 -0
  104. data/data/en/words/words.v.8.4 +119 -0
  105. data/data/en/words/words.v.8.5 +119 -0
  106. data/data/en/words/words.y +104 -0
  107. data/data/lt/.DS_Store +0 -0
  108. data/data/lt/4.0.affix +6 -0
  109. data/data/lt/4.0.constituent-knowledge +24 -0
  110. data/data/lt/4.0.dict +135 -0
  111. data/data/lt/4.0.knowledge +38 -0
  112. data/data/lt/Makefile +389 -0
  113. data/data/lt/Makefile.am +11 -0
  114. data/data/lt/Makefile.in +389 -0
  115. data/ext/.DS_Store +0 -0
  116. data/ext/link_grammar/.DS_Store +0 -0
  117. data/ext/link_grammar/extconf.rb +2 -0
  118. data/ext/link_grammar/link-grammar/.DS_Store +0 -0
  119. data/ext/link_grammar/link-grammar/.deps/analyze-linkage.Plo +198 -0
  120. data/ext/link_grammar/link-grammar/.deps/and.Plo +202 -0
  121. data/ext/link_grammar/link-grammar/.deps/api.Plo +244 -0
  122. data/ext/link_grammar/link-grammar/.deps/build-disjuncts.Plo +212 -0
  123. data/ext/link_grammar/link-grammar/.deps/command-line.Plo +201 -0
  124. data/ext/link_grammar/link-grammar/.deps/constituents.Plo +201 -0
  125. data/ext/link_grammar/link-grammar/.deps/count.Plo +202 -0
  126. data/ext/link_grammar/link-grammar/.deps/disjunct-utils.Plo +126 -0
  127. data/ext/link_grammar/link-grammar/.deps/disjuncts.Plo +123 -0
  128. data/ext/link_grammar/link-grammar/.deps/error.Plo +121 -0
  129. data/ext/link_grammar/link-grammar/.deps/expand.Plo +133 -0
  130. data/ext/link_grammar/link-grammar/.deps/extract-links.Plo +198 -0
  131. data/ext/link_grammar/link-grammar/.deps/fast-match.Plo +200 -0
  132. data/ext/link_grammar/link-grammar/.deps/idiom.Plo +200 -0
  133. data/ext/link_grammar/link-grammar/.deps/jni-client.Plo +217 -0
  134. data/ext/link_grammar/link-grammar/.deps/link-parser.Po +1 -0
  135. data/ext/link_grammar/link-grammar/.deps/massage.Plo +202 -0
  136. data/ext/link_grammar/link-grammar/.deps/post-process.Plo +202 -0
  137. data/ext/link_grammar/link-grammar/.deps/pp_knowledge.Plo +202 -0
  138. data/ext/link_grammar/link-grammar/.deps/pp_lexer.Plo +201 -0
  139. data/ext/link_grammar/link-grammar/.deps/pp_linkset.Plo +200 -0
  140. data/ext/link_grammar/link-grammar/.deps/prefix.Plo +102 -0
  141. data/ext/link_grammar/link-grammar/.deps/preparation.Plo +202 -0
  142. data/ext/link_grammar/link-grammar/.deps/print-util.Plo +200 -0
  143. data/ext/link_grammar/link-grammar/.deps/print.Plo +201 -0
  144. data/ext/link_grammar/link-grammar/.deps/prune.Plo +202 -0
  145. data/ext/link_grammar/link-grammar/.deps/read-dict.Plo +223 -0
  146. data/ext/link_grammar/link-grammar/.deps/read-regex.Plo +123 -0
  147. data/ext/link_grammar/link-grammar/.deps/regex-morph.Plo +131 -0
  148. data/ext/link_grammar/link-grammar/.deps/resources.Plo +203 -0
  149. data/ext/link_grammar/link-grammar/.deps/spellcheck-aspell.Plo +1 -0
  150. data/ext/link_grammar/link-grammar/.deps/spellcheck-hun.Plo +115 -0
  151. data/ext/link_grammar/link-grammar/.deps/string-set.Plo +198 -0
  152. data/ext/link_grammar/link-grammar/.deps/tokenize.Plo +160 -0
  153. data/ext/link_grammar/link-grammar/.deps/utilities.Plo +222 -0
  154. data/ext/link_grammar/link-grammar/.deps/word-file.Plo +201 -0
  155. data/ext/link_grammar/link-grammar/.deps/word-utils.Plo +212 -0
  156. data/ext/link_grammar/link-grammar/.libs/analyze-linkage.o +0 -0
  157. data/ext/link_grammar/link-grammar/.libs/and.o +0 -0
  158. data/ext/link_grammar/link-grammar/.libs/api.o +0 -0
  159. data/ext/link_grammar/link-grammar/.libs/build-disjuncts.o +0 -0
  160. data/ext/link_grammar/link-grammar/.libs/command-line.o +0 -0
  161. data/ext/link_grammar/link-grammar/.libs/constituents.o +0 -0
  162. data/ext/link_grammar/link-grammar/.libs/count.o +0 -0
  163. data/ext/link_grammar/link-grammar/.libs/disjunct-utils.o +0 -0
  164. data/ext/link_grammar/link-grammar/.libs/disjuncts.o +0 -0
  165. data/ext/link_grammar/link-grammar/.libs/error.o +0 -0
  166. data/ext/link_grammar/link-grammar/.libs/expand.o +0 -0
  167. data/ext/link_grammar/link-grammar/.libs/extract-links.o +0 -0
  168. data/ext/link_grammar/link-grammar/.libs/fast-match.o +0 -0
  169. data/ext/link_grammar/link-grammar/.libs/idiom.o +0 -0
  170. data/ext/link_grammar/link-grammar/.libs/jni-client.o +0 -0
  171. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java-symbols.expsym +31 -0
  172. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib +0 -0
  173. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib.dSYM/Contents/Info.plist +20 -0
  174. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.4.dylib.dSYM/Contents/Resources/DWARF/liblink-grammar-java.4.dylib +0 -0
  175. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.a +0 -0
  176. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-java.dylib +0 -0
  177. data/ext/link_grammar/link-grammar/.libs/liblink-grammar-symbols.expsym +194 -0
  178. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib +0 -0
  179. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib.dSYM/Contents/Info.plist +20 -0
  180. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.4.dylib.dSYM/Contents/Resources/DWARF/liblink-grammar.4.dylib +0 -0
  181. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.a +0 -0
  182. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.dylib +0 -0
  183. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.la +41 -0
  184. data/ext/link_grammar/link-grammar/.libs/liblink-grammar.lai +41 -0
  185. data/ext/link_grammar/link-grammar/.libs/massage.o +0 -0
  186. data/ext/link_grammar/link-grammar/.libs/post-process.o +0 -0
  187. data/ext/link_grammar/link-grammar/.libs/pp_knowledge.o +0 -0
  188. data/ext/link_grammar/link-grammar/.libs/pp_lexer.o +0 -0
  189. data/ext/link_grammar/link-grammar/.libs/pp_linkset.o +0 -0
  190. data/ext/link_grammar/link-grammar/.libs/prefix.o +0 -0
  191. data/ext/link_grammar/link-grammar/.libs/preparation.o +0 -0
  192. data/ext/link_grammar/link-grammar/.libs/print-util.o +0 -0
  193. data/ext/link_grammar/link-grammar/.libs/print.o +0 -0
  194. data/ext/link_grammar/link-grammar/.libs/prune.o +0 -0
  195. data/ext/link_grammar/link-grammar/.libs/read-dict.o +0 -0
  196. data/ext/link_grammar/link-grammar/.libs/read-regex.o +0 -0
  197. data/ext/link_grammar/link-grammar/.libs/regex-morph.o +0 -0
  198. data/ext/link_grammar/link-grammar/.libs/resources.o +0 -0
  199. data/ext/link_grammar/link-grammar/.libs/spellcheck-aspell.o +0 -0
  200. data/ext/link_grammar/link-grammar/.libs/spellcheck-hun.o +0 -0
  201. data/ext/link_grammar/link-grammar/.libs/string-set.o +0 -0
  202. data/ext/link_grammar/link-grammar/.libs/tokenize.o +0 -0
  203. data/ext/link_grammar/link-grammar/.libs/utilities.o +0 -0
  204. data/ext/link_grammar/link-grammar/.libs/word-file.o +0 -0
  205. data/ext/link_grammar/link-grammar/.libs/word-utils.o +0 -0
  206. data/ext/link_grammar/link-grammar/Makefile +900 -0
  207. data/ext/link_grammar/link-grammar/Makefile.am +202 -0
  208. data/ext/link_grammar/link-grammar/Makefile.in +900 -0
  209. data/ext/link_grammar/link-grammar/analyze-linkage.c +1317 -0
  210. data/ext/link_grammar/link-grammar/analyze-linkage.h +24 -0
  211. data/ext/link_grammar/link-grammar/and.c +1603 -0
  212. data/ext/link_grammar/link-grammar/and.h +27 -0
  213. data/ext/link_grammar/link-grammar/api-structures.h +362 -0
  214. data/ext/link_grammar/link-grammar/api-types.h +72 -0
  215. data/ext/link_grammar/link-grammar/api.c +1887 -0
  216. data/ext/link_grammar/link-grammar/api.h +96 -0
  217. data/ext/link_grammar/link-grammar/autoit/.DS_Store +0 -0
  218. data/ext/link_grammar/link-grammar/autoit/README +10 -0
  219. data/ext/link_grammar/link-grammar/autoit/_LGTest.au3 +22 -0
  220. data/ext/link_grammar/link-grammar/autoit/_LinkGrammar.au3 +545 -0
  221. data/ext/link_grammar/link-grammar/build-disjuncts.c +487 -0
  222. data/ext/link_grammar/link-grammar/build-disjuncts.h +21 -0
  223. data/ext/link_grammar/link-grammar/command-line.c +458 -0
  224. data/ext/link_grammar/link-grammar/command-line.h +15 -0
  225. data/ext/link_grammar/link-grammar/constituents.c +1836 -0
  226. data/ext/link_grammar/link-grammar/constituents.h +26 -0
  227. data/ext/link_grammar/link-grammar/corpus/.DS_Store +0 -0
  228. data/ext/link_grammar/link-grammar/corpus/.deps/cluster.Plo +1 -0
  229. data/ext/link_grammar/link-grammar/corpus/.deps/corpus.Plo +1 -0
  230. data/ext/link_grammar/link-grammar/corpus/Makefile +527 -0
  231. data/ext/link_grammar/link-grammar/corpus/Makefile.am +46 -0
  232. data/ext/link_grammar/link-grammar/corpus/Makefile.in +527 -0
  233. data/ext/link_grammar/link-grammar/corpus/README +17 -0
  234. data/ext/link_grammar/link-grammar/corpus/cluster.c +286 -0
  235. data/ext/link_grammar/link-grammar/corpus/cluster.h +32 -0
  236. data/ext/link_grammar/link-grammar/corpus/corpus.c +483 -0
  237. data/ext/link_grammar/link-grammar/corpus/corpus.h +46 -0
  238. data/ext/link_grammar/link-grammar/count.c +828 -0
  239. data/ext/link_grammar/link-grammar/count.h +25 -0
  240. data/ext/link_grammar/link-grammar/disjunct-utils.c +261 -0
  241. data/ext/link_grammar/link-grammar/disjunct-utils.h +27 -0
  242. data/ext/link_grammar/link-grammar/disjuncts.c +138 -0
  243. data/ext/link_grammar/link-grammar/disjuncts.h +13 -0
  244. data/ext/link_grammar/link-grammar/error.c +92 -0
  245. data/ext/link_grammar/link-grammar/error.h +35 -0
  246. data/ext/link_grammar/link-grammar/expand.c +67 -0
  247. data/ext/link_grammar/link-grammar/expand.h +13 -0
  248. data/ext/link_grammar/link-grammar/externs.h +22 -0
  249. data/ext/link_grammar/link-grammar/extract-links.c +625 -0
  250. data/ext/link_grammar/link-grammar/extract-links.h +16 -0
  251. data/ext/link_grammar/link-grammar/fast-match.c +309 -0
  252. data/ext/link_grammar/link-grammar/fast-match.h +17 -0
  253. data/ext/link_grammar/link-grammar/idiom.c +373 -0
  254. data/ext/link_grammar/link-grammar/idiom.h +15 -0
  255. data/ext/link_grammar/link-grammar/jni-client.c +779 -0
  256. data/ext/link_grammar/link-grammar/jni-client.h +236 -0
  257. data/ext/link_grammar/link-grammar/liblink-grammar-java.la +42 -0
  258. data/ext/link_grammar/link-grammar/liblink-grammar.la +41 -0
  259. data/ext/link_grammar/link-grammar/link-features.h +37 -0
  260. data/ext/link_grammar/link-grammar/link-features.h.in +37 -0
  261. data/ext/link_grammar/link-grammar/link-grammar-java.def +31 -0
  262. data/ext/link_grammar/link-grammar/link-grammar.def +194 -0
  263. data/ext/link_grammar/link-grammar/link-includes.h +465 -0
  264. data/ext/link_grammar/link-grammar/link-parser.c +849 -0
  265. data/ext/link_grammar/link-grammar/massage.c +329 -0
  266. data/ext/link_grammar/link-grammar/massage.h +13 -0
  267. data/ext/link_grammar/link-grammar/post-process.c +1113 -0
  268. data/ext/link_grammar/link-grammar/post-process.h +45 -0
  269. data/ext/link_grammar/link-grammar/pp_knowledge.c +376 -0
  270. data/ext/link_grammar/link-grammar/pp_knowledge.h +14 -0
  271. data/ext/link_grammar/link-grammar/pp_lexer.c +1920 -0
  272. data/ext/link_grammar/link-grammar/pp_lexer.h +19 -0
  273. data/ext/link_grammar/link-grammar/pp_linkset.c +158 -0
  274. data/ext/link_grammar/link-grammar/pp_linkset.h +20 -0
  275. data/ext/link_grammar/link-grammar/prefix.c +482 -0
  276. data/ext/link_grammar/link-grammar/prefix.h +139 -0
  277. data/ext/link_grammar/link-grammar/preparation.c +412 -0
  278. data/ext/link_grammar/link-grammar/preparation.h +20 -0
  279. data/ext/link_grammar/link-grammar/print-util.c +87 -0
  280. data/ext/link_grammar/link-grammar/print-util.h +32 -0
  281. data/ext/link_grammar/link-grammar/print.c +1085 -0
  282. data/ext/link_grammar/link-grammar/print.h +16 -0
  283. data/ext/link_grammar/link-grammar/prune.c +1864 -0
  284. data/ext/link_grammar/link-grammar/prune.h +17 -0
  285. data/ext/link_grammar/link-grammar/read-dict.c +1785 -0
  286. data/ext/link_grammar/link-grammar/read-dict.h +29 -0
  287. data/ext/link_grammar/link-grammar/read-regex.c +161 -0
  288. data/ext/link_grammar/link-grammar/read-regex.h +12 -0
  289. data/ext/link_grammar/link-grammar/regex-morph.c +126 -0
  290. data/ext/link_grammar/link-grammar/regex-morph.h +17 -0
  291. data/ext/link_grammar/link-grammar/resources.c +180 -0
  292. data/ext/link_grammar/link-grammar/resources.h +23 -0
  293. data/ext/link_grammar/link-grammar/sat-solver/.DS_Store +0 -0
  294. data/ext/link_grammar/link-grammar/sat-solver/.deps/fast-sprintf.Plo +1 -0
  295. data/ext/link_grammar/link-grammar/sat-solver/.deps/sat-encoder.Plo +1 -0
  296. data/ext/link_grammar/link-grammar/sat-solver/.deps/util.Plo +1 -0
  297. data/ext/link_grammar/link-grammar/sat-solver/.deps/variables.Plo +1 -0
  298. data/ext/link_grammar/link-grammar/sat-solver/.deps/word-tag.Plo +1 -0
  299. data/ext/link_grammar/link-grammar/sat-solver/Makefile +527 -0
  300. data/ext/link_grammar/link-grammar/sat-solver/Makefile.am +29 -0
  301. data/ext/link_grammar/link-grammar/sat-solver/Makefile.in +527 -0
  302. data/ext/link_grammar/link-grammar/sat-solver/clock.hpp +33 -0
  303. data/ext/link_grammar/link-grammar/sat-solver/fast-sprintf.cpp +26 -0
  304. data/ext/link_grammar/link-grammar/sat-solver/fast-sprintf.hpp +7 -0
  305. data/ext/link_grammar/link-grammar/sat-solver/guiding.hpp +244 -0
  306. data/ext/link_grammar/link-grammar/sat-solver/matrix-ut.hpp +79 -0
  307. data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.cpp +2811 -0
  308. data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.h +11 -0
  309. data/ext/link_grammar/link-grammar/sat-solver/sat-encoder.hpp +381 -0
  310. data/ext/link_grammar/link-grammar/sat-solver/trie.hpp +118 -0
  311. data/ext/link_grammar/link-grammar/sat-solver/util.cpp +23 -0
  312. data/ext/link_grammar/link-grammar/sat-solver/util.hpp +14 -0
  313. data/ext/link_grammar/link-grammar/sat-solver/variables.cpp +5 -0
  314. data/ext/link_grammar/link-grammar/sat-solver/variables.hpp +829 -0
  315. data/ext/link_grammar/link-grammar/sat-solver/word-tag.cpp +159 -0
  316. data/ext/link_grammar/link-grammar/sat-solver/word-tag.hpp +162 -0
  317. data/ext/link_grammar/link-grammar/spellcheck-aspell.c +148 -0
  318. data/ext/link_grammar/link-grammar/spellcheck-hun.c +136 -0
  319. data/ext/link_grammar/link-grammar/spellcheck.h +34 -0
  320. data/ext/link_grammar/link-grammar/string-set.c +169 -0
  321. data/ext/link_grammar/link-grammar/string-set.h +16 -0
  322. data/ext/link_grammar/link-grammar/structures.h +498 -0
  323. data/ext/link_grammar/link-grammar/tokenize.c +1049 -0
  324. data/ext/link_grammar/link-grammar/tokenize.h +15 -0
  325. data/ext/link_grammar/link-grammar/utilities.c +847 -0
  326. data/ext/link_grammar/link-grammar/utilities.h +281 -0
  327. data/ext/link_grammar/link-grammar/word-file.c +124 -0
  328. data/ext/link_grammar/link-grammar/word-file.h +15 -0
  329. data/ext/link_grammar/link-grammar/word-utils.c +526 -0
  330. data/ext/link_grammar/link-grammar/word-utils.h +152 -0
  331. data/ext/link_grammar/link_grammar.c +202 -0
  332. data/ext/link_grammar/link_grammar.h +99 -0
  333. data/grammar_cop.gemspec +24 -0
  334. data/lib/.DS_Store +0 -0
  335. data/lib/grammar_cop.rb +9 -0
  336. data/lib/grammar_cop/.DS_Store +0 -0
  337. data/lib/grammar_cop/dictionary.rb +19 -0
  338. data/lib/grammar_cop/linkage.rb +30 -0
  339. data/lib/grammar_cop/parse_options.rb +32 -0
  340. data/lib/grammar_cop/sentence.rb +36 -0
  341. data/lib/grammar_cop/version.rb +3 -0
  342. data/test/.DS_Store +0 -0
  343. data/test/grammar_cop_test.rb +27 -0
  344. 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
+ }