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