nltk 3.2.1__zip → 3.3__zip

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 (404) hide show
  1. {nltk-3.2.1 → nltk-3.3}/LICENSE.txt +1 -1
  2. {nltk-3.2.1/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
  3. nltk-3.3/README.md +49 -0
  4. nltk-3.3/nltk/VERSION +1 -0
  5. {nltk-3.2.1 → nltk-3.3}/nltk/__init__.py +3 -3
  6. {nltk-3.2.1 → nltk-3.3}/nltk/app/__init__.py +2 -3
  7. {nltk-3.2.1 → nltk-3.3}/nltk/app/chartparser_app.py +92 -92
  8. {nltk-3.2.1 → nltk-3.3}/nltk/app/chunkparser_app.py +11 -13
  9. {nltk-3.2.1 → nltk-3.3}/nltk/app/collocations_app.py +8 -11
  10. {nltk-3.2.1 → nltk-3.3}/nltk/app/concordance_app.py +9 -11
  11. {nltk-3.2.1 → nltk-3.3}/nltk/app/nemo_app.py +18 -17
  12. {nltk-3.2.1 → nltk-3.3}/nltk/app/rdparser_app.py +10 -12
  13. {nltk-3.2.1 → nltk-3.3}/nltk/app/srparser_app.py +16 -16
  14. {nltk-3.2.1 → nltk-3.3}/nltk/app/wordfreq_app.py +1 -1
  15. {nltk-3.2.1 → nltk-3.3}/nltk/app/wordnet_app.py +11 -11
  16. {nltk-3.2.1 → nltk-3.3}/nltk/book.py +2 -1
  17. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/__init__.py +1 -1
  18. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/api.py +67 -47
  19. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/chart.py +7 -5
  20. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/combinator.py +42 -11
  21. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/lexicon.py +1 -1
  22. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/logic.py +1 -1
  23. {nltk-3.2.1 → nltk-3.3}/nltk/chat/__init__.py +1 -1
  24. {nltk-3.2.1 → nltk-3.3}/nltk/chat/eliza.py +1 -1
  25. {nltk-3.2.1 → nltk-3.3}/nltk/chat/iesha.py +1 -1
  26. {nltk-3.2.1 → nltk-3.3}/nltk/chat/rude.py +1 -1
  27. {nltk-3.2.1 → nltk-3.3}/nltk/chat/suntsu.py +1 -1
  28. {nltk-3.2.1 → nltk-3.3}/nltk/chat/util.py +12 -10
  29. {nltk-3.2.1 → nltk-3.3}/nltk/chat/zen.py +1 -1
  30. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/__init__.py +1 -1
  31. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/api.py +1 -1
  32. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/named_entity.py +13 -13
  33. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/regexp.py +9 -3
  34. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/util.py +12 -12
  35. {nltk-3.2.1 → nltk-3.3}/nltk/classify/__init__.py +1 -1
  36. {nltk-3.2.1 → nltk-3.3}/nltk/classify/api.py +1 -1
  37. {nltk-3.2.1 → nltk-3.3}/nltk/classify/decisiontree.py +18 -18
  38. {nltk-3.2.1 → nltk-3.3}/nltk/classify/maxent.py +26 -8
  39. {nltk-3.2.1 → nltk-3.3}/nltk/classify/megam.py +5 -4
  40. {nltk-3.2.1 → nltk-3.3}/nltk/classify/naivebayes.py +29 -26
  41. {nltk-3.2.1 → nltk-3.3}/nltk/classify/rte_classify.py +58 -89
  42. {nltk-3.2.1 → nltk-3.3}/nltk/classify/scikitlearn.py +4 -2
  43. {nltk-3.2.1 → nltk-3.3}/nltk/classify/senna.py +24 -22
  44. {nltk-3.2.1 → nltk-3.3}/nltk/classify/svm.py +1 -1
  45. {nltk-3.2.1 → nltk-3.3}/nltk/classify/tadm.py +4 -3
  46. {nltk-3.2.1 → nltk-3.3}/nltk/classify/textcat.py +1 -1
  47. {nltk-3.2.1 → nltk-3.3}/nltk/classify/util.py +13 -1
  48. {nltk-3.2.1 → nltk-3.3}/nltk/classify/weka.py +7 -6
  49. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/__init__.py +1 -1
  50. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/api.py +9 -5
  51. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/em.py +1 -1
  52. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/gaac.py +3 -3
  53. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/kmeans.py +1 -1
  54. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/util.py +35 -20
  55. nltk-3.3/nltk/collections.py +640 -0
  56. {nltk-3.2.1 → nltk-3.3}/nltk/collocations.py +2 -2
  57. nltk-3.3/nltk/compat.py +365 -0
  58. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/__init__.py +37 -16
  59. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/europarl_raw.py +1 -1
  60. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/__init__.py +4 -2
  61. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/aligned.py +4 -3
  62. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/api.py +12 -10
  63. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bnc.py +1 -1
  64. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +1 -1
  65. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +4 -3
  66. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chasen.py +5 -4
  67. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/childes.py +8 -9
  68. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chunked.py +4 -4
  69. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/cmudict.py +4 -2
  70. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +4 -2
  71. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/conll.py +19 -12
  72. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/crubadan.py +2 -2
  73. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/dependency.py +1 -1
  74. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/framenet.py +1085 -119
  75. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ieer.py +4 -3
  76. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/indian.py +4 -5
  77. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ipipan.py +6 -5
  78. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/knbc.py +2 -2
  79. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/lin.py +1 -1
  80. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/mte.py +5 -4
  81. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nkjp.py +4 -3
  82. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nombank.py +8 -8
  83. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +1 -1
  84. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +3 -3
  85. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +1 -1
  86. nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
  87. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/plaintext.py +3 -4
  88. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ppattach.py +4 -3
  89. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/propbank.py +8 -10
  90. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +5 -3
  91. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/reviews.py +3 -1
  92. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/rte.py +5 -7
  93. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/semcor.py +1 -1
  94. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/senseval.py +4 -2
  95. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +3 -3
  96. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +1 -1
  97. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/string_category.py +4 -3
  98. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/switchboard.py +1 -1
  99. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/tagged.py +4 -3
  100. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/timit.py +10 -8
  101. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/toolbox.py +4 -4
  102. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/twitter.py +4 -6
  103. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/util.py +7 -3
  104. nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
  105. nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
  106. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/wordnet.py +357 -285
  107. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +10 -5
  108. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ycoe.py +25 -24
  109. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/util.py +22 -5
  110. {nltk-3.2.1 → nltk-3.3}/nltk/data.py +65 -29
  111. {nltk-3.2.1 → nltk-3.3}/nltk/decorators.py +5 -1
  112. {nltk-3.2.1 → nltk-3.3}/nltk/downloader.py +59 -55
  113. {nltk-3.2.1 → nltk-3.3}/nltk/draw/__init__.py +4 -4
  114. {nltk-3.2.1 → nltk-3.3}/nltk/draw/cfg.py +5 -8
  115. {nltk-3.2.1 → nltk-3.3}/nltk/draw/dispersion.py +1 -1
  116. {nltk-3.2.1 → nltk-3.3}/nltk/draw/table.py +4 -4
  117. {nltk-3.2.1 → nltk-3.3}/nltk/draw/tree.py +2 -5
  118. {nltk-3.2.1 → nltk-3.3}/nltk/draw/util.py +17 -17
  119. {nltk-3.2.1 → nltk-3.3}/nltk/featstruct.py +290 -173
  120. {nltk-3.2.1 → nltk-3.3}/nltk/grammar.py +87 -44
  121. {nltk-3.2.1 → nltk-3.3}/nltk/help.py +1 -1
  122. {nltk-3.2.1 → nltk-3.3}/nltk/inference/__init__.py +1 -1
  123. {nltk-3.2.1 → nltk-3.3}/nltk/inference/api.py +27 -19
  124. {nltk-3.2.1 → nltk-3.3}/nltk/inference/discourse.py +20 -16
  125. {nltk-3.2.1 → nltk-3.3}/nltk/inference/nonmonotonic.py +1 -1
  126. {nltk-3.2.1 → nltk-3.3}/nltk/inference/prover9.py +1 -1
  127. {nltk-3.2.1 → nltk-3.3}/nltk/inference/resolution.py +1 -1
  128. {nltk-3.2.1 → nltk-3.3}/nltk/inference/tableau.py +1 -1
  129. {nltk-3.2.1 → nltk-3.3}/nltk/internals.py +44 -44
  130. {nltk-3.2.1 → nltk-3.3}/nltk/jsontags.py +1 -1
  131. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/__init__.py +2 -1
  132. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/agreement.py +29 -9
  133. nltk-3.3/nltk/metrics/aline.py +607 -0
  134. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/association.py +8 -4
  135. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/confusionmatrix.py +1 -1
  136. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/distance.py +12 -7
  137. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/paice.py +1 -1
  138. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/scores.py +7 -7
  139. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/segmentation.py +4 -5
  140. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/spearman.py +1 -1
  141. {nltk-3.2.1 → nltk-3.3}/nltk/misc/__init__.py +1 -1
  142. {nltk-3.2.1 → nltk-3.3}/nltk/misc/chomsky.py +4 -2
  143. {nltk-3.2.1 → nltk-3.3}/nltk/misc/minimalset.py +1 -1
  144. {nltk-3.2.1 → nltk-3.3}/nltk/misc/sort.py +1 -1
  145. {nltk-3.2.1 → nltk-3.3}/nltk/misc/wordfinder.py +1 -1
  146. {nltk-3.2.1 → nltk-3.3}/nltk/parse/__init__.py +2 -1
  147. {nltk-3.2.1 → nltk-3.3}/nltk/parse/api.py +1 -1
  148. {nltk-3.2.1 → nltk-3.3}/nltk/parse/bllip.py +1 -1
  149. {nltk-3.2.1 → nltk-3.3}/nltk/parse/chart.py +8 -7
  150. nltk-3.3/nltk/parse/corenlp.py +780 -0
  151. {nltk-3.2.1 → nltk-3.3}/nltk/parse/dependencygraph.py +4 -2
  152. {nltk-3.2.1 → nltk-3.3}/nltk/parse/earleychart.py +4 -3
  153. {nltk-3.2.1 → nltk-3.3}/nltk/parse/evaluate.py +1 -1
  154. {nltk-3.2.1 → nltk-3.3}/nltk/parse/featurechart.py +6 -4
  155. {nltk-3.2.1 → nltk-3.3}/nltk/parse/generate.py +15 -4
  156. {nltk-3.2.1 → nltk-3.3}/nltk/parse/malt.py +2 -2
  157. {nltk-3.2.1 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +3 -3
  158. {nltk-3.2.1 → nltk-3.3}/nltk/parse/pchart.py +1 -1
  159. {nltk-3.2.1 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +6 -5
  160. {nltk-3.2.1 → nltk-3.3}/nltk/parse/recursivedescent.py +2 -3
  161. {nltk-3.2.1 → nltk-3.3}/nltk/parse/shiftreduce.py +2 -3
  162. {nltk-3.2.1 → nltk-3.3}/nltk/parse/stanford.py +53 -28
  163. {nltk-3.2.1 → nltk-3.3}/nltk/parse/transitionparser.py +11 -9
  164. {nltk-3.2.1 → nltk-3.3}/nltk/parse/util.py +1 -1
  165. {nltk-3.2.1 → nltk-3.3}/nltk/parse/viterbi.py +1 -1
  166. {nltk-3.2.1 → nltk-3.3}/nltk/probability.py +75 -20
  167. {nltk-3.2.1 → nltk-3.3}/nltk/sem/__init__.py +1 -1
  168. {nltk-3.2.1 → nltk-3.3}/nltk/sem/boxer.py +15 -15
  169. {nltk-3.2.1 → nltk-3.3}/nltk/sem/chat80.py +6 -6
  170. {nltk-3.2.1 → nltk-3.3}/nltk/sem/cooper_storage.py +1 -1
  171. {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt.py +9 -8
  172. {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt_glue_demo.py +5 -9
  173. {nltk-3.2.1 → nltk-3.3}/nltk/sem/evaluate.py +9 -3
  174. {nltk-3.2.1 → nltk-3.3}/nltk/sem/glue.py +8 -6
  175. {nltk-3.2.1 → nltk-3.3}/nltk/sem/hole.py +4 -2
  176. {nltk-3.2.1 → nltk-3.3}/nltk/sem/lfg.py +4 -2
  177. {nltk-3.2.1 → nltk-3.3}/nltk/sem/linearlogic.py +4 -2
  178. {nltk-3.2.1 → nltk-3.3}/nltk/sem/logic.py +14 -14
  179. {nltk-3.2.1 → nltk-3.3}/nltk/sem/relextract.py +11 -18
  180. {nltk-3.2.1 → nltk-3.3}/nltk/sem/skolemize.py +1 -1
  181. {nltk-3.2.1 → nltk-3.3}/nltk/sem/util.py +1 -1
  182. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/__init__.py +1 -1
  183. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +1 -1
  184. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/util.py +14 -4
  185. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/vader.py +41 -42
  186. {nltk-3.2.1 → nltk-3.3}/nltk/stem/__init__.py +1 -3
  187. {nltk-3.2.1 → nltk-3.3}/nltk/stem/api.py +7 -4
  188. nltk-3.3/nltk/stem/arlstem.py +369 -0
  189. {nltk-3.2.1 → nltk-3.3}/nltk/stem/isri.py +1 -1
  190. {nltk-3.2.1 → nltk-3.3}/nltk/stem/lancaster.py +39 -12
  191. nltk-3.3/nltk/stem/porter.py +710 -0
  192. {nltk-3.2.1 → nltk-3.3}/nltk/stem/regexp.py +2 -2
  193. {nltk-3.2.1 → nltk-3.3}/nltk/stem/rslp.py +1 -1
  194. {nltk-3.2.1 → nltk-3.3}/nltk/stem/snowball.py +537 -13
  195. {nltk-3.2.1 → nltk-3.3}/nltk/stem/util.py +11 -1
  196. {nltk-3.2.1 → nltk-3.3}/nltk/stem/wordnet.py +1 -1
  197. {nltk-3.2.1 → nltk-3.3}/nltk/tag/__init__.py +32 -7
  198. {nltk-3.2.1 → nltk-3.3}/nltk/tag/api.py +13 -8
  199. {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill.py +4 -6
  200. {nltk-3.2.1 → nltk-3.3}/nltk/tag/crf.py +1 -1
  201. {nltk-3.2.1 → nltk-3.3}/nltk/tag/hmm.py +11 -11
  202. {nltk-3.2.1 → nltk-3.3}/nltk/tag/hunpos.py +4 -4
  203. {nltk-3.2.1 → nltk-3.3}/nltk/tag/mapping.py +1 -1
  204. {nltk-3.2.1 → nltk-3.3}/nltk/tag/perceptron.py +25 -10
  205. {nltk-3.2.1 → nltk-3.3}/nltk/tag/senna.py +25 -23
  206. {nltk-3.2.1 → nltk-3.3}/nltk/tag/sequential.py +19 -15
  207. {nltk-3.2.1 → nltk-3.3}/nltk/tag/stanford.py +59 -36
  208. {nltk-3.2.1 → nltk-3.3}/nltk/tag/tnt.py +11 -20
  209. {nltk-3.2.1 → nltk-3.3}/nltk/tag/util.py +1 -1
  210. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/__init__.py +1 -1
  211. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/demo.py +1 -1
  212. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/erroranalysis.py +1 -1
  213. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/feature.py +5 -7
  214. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/rule.py +6 -6
  215. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/template.py +18 -23
  216. {nltk-3.2.1 → nltk-3.3}/nltk/test/__init__.py +1 -1
  217. {nltk-3.2.1 → nltk-3.3}/nltk/test/all.py +7 -6
  218. {nltk-3.2.1 → nltk-3.3}/nltk/test/bnc.doctest +1 -1
  219. {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg.doctest +1 -1
  220. {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg_semantics.doctest +1 -1
  221. {nltk-3.2.1 → nltk-3.3}/nltk/test/chat80.doctest +1 -1
  222. {nltk-3.2.1 → nltk-3.3}/nltk/test/childes_fixt.py +1 -0
  223. {nltk-3.2.1 → nltk-3.3}/nltk/test/chunk.doctest +1 -1
  224. {nltk-3.2.1 → nltk-3.3}/nltk/test/classify.doctest +1 -1
  225. {nltk-3.2.1 → nltk-3.3}/nltk/test/classify_fixt.py +2 -1
  226. nltk-3.3/nltk/test/collections.doctest +20 -0
  227. {nltk-3.2.1 → nltk-3.3}/nltk/test/collocations.doctest +1 -1
  228. {nltk-3.2.1 → nltk-3.3}/nltk/test/compat.doctest +0 -4
  229. {nltk-3.2.1 → nltk-3.3}/nltk/test/compat_fixt.py +1 -0
  230. nltk-3.3/nltk/test/concordance.doctest +55 -0
  231. {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus.doctest +38 -49
  232. {nltk-3.2.1 → nltk-3.3}/nltk/test/crubadan.doctest +1 -1
  233. {nltk-3.2.1 → nltk-3.3}/nltk/test/data.doctest +1 -1
  234. {nltk-3.2.1 → nltk-3.3}/nltk/test/dependency.doctest +1 -1
  235. {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse.doctest +1 -1
  236. {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse_fixt.py +1 -0
  237. {nltk-3.2.1 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +8 -5
  238. {nltk-3.2.1 → nltk-3.3}/nltk/test/drt.doctest +1 -1
  239. {nltk-3.2.1 → nltk-3.3}/nltk/test/featgram.doctest +1 -1
  240. {nltk-3.2.1 → nltk-3.3}/nltk/test/featstruct.doctest +2 -3
  241. {nltk-3.2.1 → nltk-3.3}/nltk/test/framenet.doctest +82 -33
  242. {nltk-3.2.1 → nltk-3.3}/nltk/test/generate.doctest +1 -1
  243. {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim.doctest +6 -7
  244. {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim_fixt.py +1 -0
  245. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics.doctest +13 -15
  246. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +1 -1
  247. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +1 -0
  248. {nltk-3.2.1 → nltk-3.3}/nltk/test/grammar.doctest +1 -1
  249. {nltk-3.2.1 → nltk-3.3}/nltk/test/grammartestsuites.doctest +1 -1
  250. {nltk-3.2.1 → nltk-3.3}/nltk/test/index.doctest +1 -1
  251. {nltk-3.2.1 → nltk-3.3}/nltk/test/inference.doctest +1 -1
  252. {nltk-3.2.1 → nltk-3.3}/nltk/test/inference_fixt.py +1 -0
  253. {nltk-3.2.1 → nltk-3.3}/nltk/test/internals.doctest +1 -1
  254. {nltk-3.2.1 → nltk-3.3}/nltk/test/japanese.doctest +1 -1
  255. {nltk-3.2.1 → nltk-3.3}/nltk/test/logic.doctest +1 -1
  256. {nltk-3.2.1 → nltk-3.3}/nltk/test/metrics.doctest +3 -3
  257. {nltk-3.2.1 → nltk-3.3}/nltk/test/misc.doctest +1 -1
  258. {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic.doctest +1 -1
  259. {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +1 -0
  260. {nltk-3.2.1 → nltk-3.3}/nltk/test/parse.doctest +1 -1
  261. {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en.doctest +1 -1
  262. {nltk-3.2.1 → nltk-3.3}/nltk/test/probability.doctest +1 -1
  263. {nltk-3.2.1 → nltk-3.3}/nltk/test/probability_fixt.py +2 -1
  264. {nltk-3.2.1 → nltk-3.3}/nltk/test/propbank.doctest +1 -1
  265. {nltk-3.2.1 → nltk-3.3}/nltk/test/relextract.doctest +1 -1
  266. {nltk-3.2.1 → nltk-3.3}/nltk/test/resolution.doctest +1 -1
  267. {nltk-3.2.1 → nltk-3.3}/nltk/test/runtests.py +35 -13
  268. {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics.doctest +1 -1
  269. {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiment.doctest +3 -3
  270. {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiwordnet.doctest +1 -1
  271. {nltk-3.2.1 → nltk-3.3}/nltk/test/simple.doctest +1 -1
  272. {nltk-3.2.1 → nltk-3.3}/nltk/test/stem.doctest +2 -2
  273. {nltk-3.2.1 → nltk-3.3}/nltk/test/tag.doctest +1 -1
  274. {nltk-3.2.1 → nltk-3.3}/nltk/test/tokenize.doctest +109 -2
  275. {nltk-3.2.1 → nltk-3.3}/nltk/test/toolbox.doctest +1 -1
  276. {nltk-3.2.1 → nltk-3.3}/nltk/test/translate.doctest +1 -1
  277. {nltk-3.2.1 → nltk-3.3}/nltk/test/tree.doctest +1 -1
  278. {nltk-3.2.1 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +1 -1
  279. {nltk-3.2.1 → nltk-3.3}/nltk/test/treetransforms.doctest +1 -1
  280. nltk-3.3/nltk/test/unit/test_aline.py +52 -0
  281. nltk-3.3/nltk/test/unit/test_chunk.py +56 -0
  282. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_classify.py +20 -18
  283. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_collocations.py +16 -7
  284. nltk-3.3/nltk/test/unit/test_concordance.py +98 -0
  285. nltk-3.3/nltk/test/unit/test_corenlp.py +1000 -0
  286. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_corpora.py +18 -1
  287. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +4 -3
  288. nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
  289. nltk-3.3/nltk/test/unit/test_senna.py +74 -0
  290. nltk-3.3/nltk/test/unit/test_stem.py +121 -0
  291. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_tgrep.py +4 -2
  292. nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
  293. nltk-3.3/nltk/test/unit/test_wordnet.py +134 -0
  294. nltk-3.3/nltk/test/unit/translate/test_bleu.py +244 -0
  295. nltk-3.3/nltk/test/unit/translate/test_gdfa.py +57 -0
  296. nltk-3.3/nltk/test/unit/translate/test_nist.py +37 -0
  297. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +1 -1
  298. {nltk-3.2.1 → nltk-3.3}/nltk/test/util.doctest +1 -1
  299. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet.doctest +17 -3
  300. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_fixt.py +1 -0
  301. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_lch.doctest +1 -1
  302. {nltk-3.2.1 → nltk-3.3}/nltk/test/wsd.doctest +1 -1
  303. {nltk-3.2.1 → nltk-3.3}/nltk/text.py +92 -39
  304. {nltk-3.2.1 → nltk-3.3}/nltk/tgrep.py +8 -7
  305. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/__init__.py +37 -15
  306. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/api.py +3 -4
  307. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/casual.py +10 -9
  308. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/mwe.py +2 -2
  309. nltk-3.3/nltk/tokenize/nist.py +173 -0
  310. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/punkt.py +186 -167
  311. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/regexp.py +13 -7
  312. nltk-3.3/nltk/tokenize/repp.py +151 -0
  313. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/sexpr.py +4 -6
  314. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/simple.py +7 -5
  315. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/stanford.py +18 -14
  316. nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
  317. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/texttiling.py +43 -45
  318. nltk-3.3/nltk/tokenize/toktok.py +155 -0
  319. nltk-3.3/nltk/tokenize/treebank.py +363 -0
  320. nltk-3.3/nltk/tokenize/util.py +261 -0
  321. {nltk-3.2.1 → nltk-3.3}/nltk/toolbox.py +4 -2
  322. {nltk-3.2.1 → nltk-3.3}/nltk/translate/__init__.py +1 -1
  323. {nltk-3.2.1 → nltk-3.3}/nltk/translate/api.py +50 -40
  324. {nltk-3.2.1 → nltk-3.3}/nltk/translate/bleu_score.py +221 -156
  325. nltk-3.3/nltk/translate/chrf_score.py +137 -0
  326. {nltk-3.2.1 → nltk-3.3}/nltk/translate/gale_church.py +32 -19
  327. {nltk-3.2.1 → nltk-3.3}/nltk/translate/gdfa.py +14 -10
  328. nltk-3.3/nltk/translate/gleu_score.py +193 -0
  329. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm1.py +17 -8
  330. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm2.py +4 -4
  331. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm4.py +1 -1
  332. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm5.py +1 -1
  333. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm_model.py +4 -1
  334. {nltk-3.2.1 → nltk-3.3}/nltk/translate/metrics.py +1 -1
  335. nltk-3.3/nltk/translate/nist_score.py +178 -0
  336. {nltk-3.2.1 → nltk-3.3}/nltk/translate/phrase_based.py +1 -1
  337. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ribes_score.py +1 -1
  338. {nltk-3.2.1 → nltk-3.3}/nltk/translate/stack_decoder.py +5 -1
  339. {nltk-3.2.1 → nltk-3.3}/nltk/tree.py +10 -8
  340. {nltk-3.2.1 → nltk-3.3}/nltk/treeprettyprinter.py +6 -6
  341. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/__init__.py +1 -1
  342. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/api.py +8 -3
  343. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/common.py +9 -3
  344. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitter_demo.py +1 -1
  345. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitterclient.py +1 -1
  346. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/util.py +5 -4
  347. {nltk-3.2.1 → nltk-3.3}/nltk/util.py +41 -654
  348. {nltk-3.2.1 → nltk-3.3}/nltk/wsd.py +2 -2
  349. {nltk-3.2.1 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
  350. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/SOURCES.txt +23 -1
  351. nltk-3.3/nltk.egg-info/requires.txt +31 -0
  352. {nltk-3.2.1 → nltk-3.3}/setup.cfg +0 -1
  353. {nltk-3.2.1 → nltk-3.3}/setup.py +32 -5
  354. nltk-3.2.1/nltk/VERSION +0 -1
  355. nltk-3.2.1/nltk/compat.py +0 -706
  356. nltk-3.2.1/nltk/corpus/reader/pl196x.py +0 -278
  357. nltk-3.2.1/nltk/corpus/reader/verbnet.py +0 -408
  358. nltk-3.2.1/nltk/corpus/reader/wordlist.py +0 -37
  359. nltk-3.2.1/nltk/six.py +0 -868
  360. nltk-3.2.1/nltk/stem/porter.py +0 -692
  361. nltk-3.2.1/nltk/test/unit/test_stem.py +0 -36
  362. nltk-3.2.1/nltk/test/unit/test_tokenize.py +0 -23
  363. nltk-3.2.1/nltk/test/unit/translate/test_bleu.py +0 -138
  364. nltk-3.2.1/nltk/tokenize/stanford_segmenter.py +0 -157
  365. nltk-3.2.1/nltk/tokenize/treebank.py +0 -124
  366. nltk-3.2.1/nltk/tokenize/util.py +0 -90
  367. {nltk-3.2.1 → nltk-3.3}/INSTALL.txt +0 -0
  368. {nltk-3.2.1 → nltk-3.3}/MANIFEST.in +0 -0
  369. {nltk-3.2.1 → nltk-3.3}/nltk/classify/positivenaivebayes.py +0 -0
  370. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/udhr.py +0 -0
  371. {nltk-3.2.1 → nltk-3.3}/nltk/inference/mace.py +0 -0
  372. {nltk-3.2.1 → nltk-3.3}/nltk/lazyimport.py +0 -0
  373. {nltk-3.2.1 → nltk-3.3}/nltk/misc/babelfish.py +0 -0
  374. {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill_trainer.py +0 -0
  375. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/api.py +0 -0
  376. {nltk-3.2.1 → nltk-3.3}/nltk/test/bleu.doctest +0 -0
  377. {nltk-3.2.1 → nltk-3.3}/nltk/test/childes.doctest +0 -0
  378. {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus_fixt.py +0 -0
  379. {nltk-3.2.1 → nltk-3.3}/nltk/test/paice.doctest +0 -0
  380. {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +0 -0
  381. {nltk-3.2.1 → nltk-3.3}/nltk/test/segmentation_fixt.py +0 -0
  382. {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics_fixt.py +0 -0
  383. {nltk-3.2.1 → nltk-3.3}/nltk/test/translate_fixt.py +0 -0
  384. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
  385. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_2x_compat.py +0 -0
  386. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +0 -0
  387. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_hmm.py +0 -0
  388. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +0 -0
  389. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +0 -0
  390. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_tag.py +0 -0
  391. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +0 -0
  392. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
  393. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +0 -0
  394. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +0 -0
  395. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +0 -0
  396. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +0 -0
  397. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +0 -0
  398. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +0 -0
  399. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/utils.py +0 -0
  400. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm3.py +0 -0
  401. {nltk-3.2.1 → nltk-3.3}/nltk/treetransforms.py +0 -0
  402. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
  403. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
  404. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Context Free Grammars
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Steven Bird <stevenbird1@gmail.com>
6
6
  # Edward Loper <edloper@gmail.com>
7
7
  # Jason Narad <jason.narad@gmail.com>
@@ -68,18 +68,21 @@ The operation of replacing the left hand side (*lhs*) of a production
68
68
  with the right hand side (*rhs*) in a tree (*tree*) is known as
69
69
  "expanding" *lhs* to *rhs* in *tree*.
70
70
  """
71
- from __future__ import print_function, unicode_literals, division
71
+ from __future__ import print_function, unicode_literals, division
72
72
 
73
73
  import re
74
+ from functools import total_ordering
75
+
76
+ from six import string_types
74
77
 
75
78
  from nltk.util import transitive_closure, invert_graph
76
- from nltk.compat import (string_types, total_ordering, text_type,
77
- python_2_unicode_compatible, unicode_repr)
79
+ from nltk.compat import python_2_unicode_compatible, unicode_repr
78
80
  from nltk.internals import raise_unorderable_types
79
81
 
80
82
  from nltk.probability import ImmutableProbabilisticMixIn
81
83
  from nltk.featstruct import FeatStruct, FeatDict, FeatStructReader, SLASH, TYPE
82
84
 
85
+
83
86
  #################################################################
84
87
  # Nonterminal
85
88
  #################################################################
@@ -104,6 +107,7 @@ class Nonterminal(object):
104
107
  :ivar _symbol: The node value corresponding to this
105
108
  ``Nonterminal``. This value must be immutable and hashable.
106
109
  """
110
+
107
111
  def __init__(self, symbol):
108
112
  """
109
113
  Construct a new non-terminal from the given symbol.
@@ -179,6 +183,21 @@ class Nonterminal(object):
179
183
  """
180
184
  return Nonterminal('%s/%s' % (self._symbol, rhs._symbol))
181
185
 
186
+ def __truediv__(self, rhs):
187
+ """
188
+ Return a new nonterminal whose symbol is ``A/B``, where ``A`` is
189
+ the symbol for this nonterminal, and ``B`` is the symbol for rhs.
190
+ This function allows use of the slash ``/`` operator with
191
+ the future import of division.
192
+
193
+ :param rhs: The nonterminal used to form the right hand side
194
+ of the new nonterminal.
195
+ :type rhs: Nonterminal
196
+ :rtype: Nonterminal
197
+ """
198
+ return self.__div__(rhs)
199
+
200
+
182
201
  def nonterminals(symbols):
183
202
  """
184
203
  Given a string containing a list of symbol names, return a list of
@@ -192,19 +211,25 @@ def nonterminals(symbols):
192
211
  in the same order as the symbols names.
193
212
  :rtype: list(Nonterminal)
194
213
  """
195
- if ',' in symbols: symbol_list = symbols.split(',')
196
- else: symbol_list = symbols.split()
214
+ if ',' in symbols:
215
+ symbol_list = symbols.split(',')
216
+ else:
217
+ symbol_list = symbols.split()
197
218
  return [Nonterminal(s.strip()) for s in symbol_list]
198
219
 
220
+
199
221
  class FeatStructNonterminal(FeatDict, Nonterminal):
200
222
  """A feature structure that's also a nonterminal. It acts as its
201
223
  own symbol, and automatically freezes itself when hashed."""
224
+
202
225
  def __hash__(self):
203
226
  self.freeze()
204
227
  return FeatStruct.__hash__(self)
228
+
205
229
  def symbol(self):
206
230
  return self
207
231
 
232
+
208
233
  def is_nonterminal(item):
209
234
  """
210
235
  :return: True if the item is a ``Nonterminal``.
@@ -360,6 +385,7 @@ class DependencyProduction(Production):
360
385
  A dependency grammar production. Each production maps a single
361
386
  head word to an unordered list of one or more modifier words.
362
387
  """
388
+
363
389
  def __str__(self):
364
390
  """
365
391
  Return a verbose string representation of the ``DependencyProduction``.
@@ -384,6 +410,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
384
410
 
385
411
  :see: ``Production``
386
412
  """
413
+
387
414
  def __init__(self, lhs, rhs, **prob):
388
415
  """
389
416
  Construct a new ``ProbabilisticProduction``.
@@ -399,7 +426,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
399
426
 
400
427
  def __str__(self):
401
428
  return Production.__unicode__(self) + \
402
- (' [1.0]' if (self.prob() == 1.0) else ' [%g]' % self.prob())
429
+ (' [1.0]' if (self.prob() == 1.0) else ' [%g]' % self.prob())
403
430
 
404
431
  def __eq__(self, other):
405
432
  return (type(self) == type(other) and
@@ -413,6 +440,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
413
440
  def __hash__(self):
414
441
  return hash((self._lhs, self._rhs, self.prob()))
415
442
 
443
+
416
444
  #################################################################
417
445
  # Grammars
418
446
  #################################################################
@@ -427,6 +455,7 @@ class CFG(object):
427
455
  If you need efficient key-based access to productions, you
428
456
  can use a subclass to implement it.
429
457
  """
458
+
430
459
  def __init__(self, start, productions, calculate_leftcorners=True):
431
460
  """
432
461
  Create a new context-free grammar, from the given start state
@@ -511,13 +540,13 @@ class CFG(object):
511
540
  @classmethod
512
541
  def fromstring(cls, input, encoding=None):
513
542
  """
514
- Return the ``CFG`` corresponding to the input string(s).
543
+ Return the grammar instance corresponding to the input string(s).
515
544
 
516
545
  :param input: a grammar, either in the form of a string or as a list of strings.
517
546
  """
518
547
  start, productions = read_grammar(input, standard_nonterm_parser,
519
548
  encoding=encoding)
520
- return CFG(start, productions)
549
+ return cls(start, productions)
521
550
 
522
551
  def start(self):
523
552
  """
@@ -723,6 +752,7 @@ class FeatureGrammar(CFG):
723
752
  productions. The set of terminals and nonterminals
724
753
  is implicitly specified by the productions.
725
754
  """
755
+
726
756
  def __init__(self, start, productions):
727
757
  """
728
758
  Create a new feature-based grammar, from the given start
@@ -770,9 +800,9 @@ class FeatureGrammar(CFG):
770
800
 
771
801
  @classmethod
772
802
  def fromstring(cls, input, features=None, logic_parser=None, fstruct_reader=None,
773
- encoding=None):
803
+ encoding=None):
774
804
  """
775
- Return a feature structure based ``FeatureGrammar``.
805
+ Return a feature structure based grammar.
776
806
 
777
807
  :param input: a grammar, either in the form of a string or else
778
808
  as a list of strings.
@@ -794,8 +824,7 @@ class FeatureGrammar(CFG):
794
824
 
795
825
  start, productions = read_grammar(input, fstruct_reader.read_partial,
796
826
  encoding=encoding)
797
- return FeatureGrammar(start, productions)
798
-
827
+ return cls(start, productions)
799
828
 
800
829
  def productions(self, lhs=None, rhs=None, empty=False):
801
830
  """
@@ -859,6 +888,7 @@ class FeatureGrammar(CFG):
859
888
  else:
860
889
  return item
861
890
 
891
+
862
892
  @total_ordering
863
893
  @python_2_unicode_compatible
864
894
  class FeatureValueType(object):
@@ -867,6 +897,7 @@ class FeatureValueType(object):
867
897
  from ordinary strings. This is to stop the ``FeatStruct``
868
898
  ``FOO[]`` from being compare equal to the terminal "FOO".
869
899
  """
900
+
870
901
  def __init__(self, value):
871
902
  self._value = value
872
903
  self._hash = hash(value)
@@ -896,6 +927,7 @@ class DependencyGrammar(object):
896
927
  productions. Each production specifies a head/modifier relationship
897
928
  between a pair of words.
898
929
  """
930
+
899
931
  def __init__(self, productions):
900
932
  """
901
933
  Create a new dependency grammar, from the set of ``Productions``.
@@ -910,13 +942,14 @@ class DependencyGrammar(object):
910
942
  productions = []
911
943
  for linenum, line in enumerate(input.split('\n')):
912
944
  line = line.strip()
913
- if line.startswith('#') or line=='': continue
914
- try: productions += _read_dependency_production(line)
945
+ if line.startswith('#') or line == '': continue
946
+ try:
947
+ productions += _read_dependency_production(line)
915
948
  except ValueError:
916
949
  raise ValueError('Unable to parse line %s: %s' % (linenum, line))
917
950
  if len(productions) == 0:
918
951
  raise ValueError('No productions found!')
919
- return DependencyGrammar(productions)
952
+ return cls(productions)
920
953
 
921
954
  def contains(self, head, mod):
922
955
  """
@@ -931,7 +964,7 @@ class DependencyGrammar(object):
931
964
  """
932
965
  for production in self._productions:
933
966
  for possibleMod in production._rhs:
934
- if(production._lhs == head and possibleMod == mod):
967
+ if (production._lhs == head and possibleMod == mod):
935
968
  return True
936
969
  return False
937
970
 
@@ -948,7 +981,7 @@ class DependencyGrammar(object):
948
981
  """
949
982
  for production in self._productions:
950
983
  for possibleMod in production._rhs:
951
- if(production._lhs == head and possibleMod == mod):
984
+ if (production._lhs == head and possibleMod == mod):
952
985
  return True
953
986
  return False
954
987
 
@@ -963,7 +996,6 @@ class DependencyGrammar(object):
963
996
  # return True
964
997
  # return False
965
998
 
966
-
967
999
  def __str__(self):
968
1000
  """
969
1001
  Return a verbose string representation of the ``DependencyGrammar``
@@ -1006,7 +1038,7 @@ class ProbabilisticDependencyGrammar(object):
1006
1038
  """
1007
1039
  for production in self._productions:
1008
1040
  for possibleMod in production._rhs:
1009
- if(production._lhs == head and possibleMod == mod):
1041
+ if (production._lhs == head and possibleMod == mod):
1010
1042
  return True
1011
1043
  return False
1012
1044
 
@@ -1079,15 +1111,14 @@ class PCFG(CFG):
1079
1111
  probs[production.lhs()] = (probs.get(production.lhs(), 0) +
1080
1112
  production.prob())
1081
1113
  for (lhs, p) in probs.items():
1082
- if not ((1-PCFG.EPSILON) < p <
1083
- (1+PCFG.EPSILON)):
1114
+ if not ((1 - PCFG.EPSILON) < p <
1115
+ (1 + PCFG.EPSILON)):
1084
1116
  raise ValueError("Productions for %r do not sum to 1" % lhs)
1085
1117
 
1086
-
1087
1118
  @classmethod
1088
1119
  def fromstring(cls, input, encoding=None):
1089
1120
  """
1090
- Return a probabilistic ``PCFG`` corresponding to the
1121
+ Return a probabilistic context-free grammar corresponding to the
1091
1122
  input string(s).
1092
1123
 
1093
1124
  :param input: a grammar, either in the form of a string or else
@@ -1095,7 +1126,7 @@ class PCFG(CFG):
1095
1126
  """
1096
1127
  start, productions = read_grammar(input, standard_nonterm_parser,
1097
1128
  probabilistic=True, encoding=encoding)
1098
- return PCFG(start, productions)
1129
+ return cls(start, productions)
1099
1130
 
1100
1131
 
1101
1132
  #################################################################
@@ -1127,10 +1158,10 @@ def induce_pcfg(start, productions):
1127
1158
 
1128
1159
  for prod in productions:
1129
1160
  lcount[prod.lhs()] = lcount.get(prod.lhs(), 0) + 1
1130
- pcount[prod] = pcount.get(prod, 0) + 1
1161
+ pcount[prod] = pcount.get(prod, 0) + 1
1131
1162
 
1132
1163
  prods = [ProbabilisticProduction(p.lhs(), p.rhs(),
1133
- prob=pcount[p] / lcount[p.lhs()])
1164
+ prob=pcount[p] / lcount[p.lhs()])
1134
1165
  for p in pcount]
1135
1166
  return PCFG(start, prods)
1136
1167
 
@@ -1145,12 +1176,14 @@ def _read_cfg_production(input):
1145
1176
  """
1146
1177
  return _read_production(input, standard_nonterm_parser)
1147
1178
 
1179
+
1148
1180
  def _read_pcfg_production(input):
1149
1181
  """
1150
1182
  Return a list of PCFG ``ProbabilisticProductions``.
1151
1183
  """
1152
1184
  return _read_production(input, standard_nonterm_parser, probabilistic=True)
1153
1185
 
1186
+
1154
1187
  def _read_fcfg_production(input, fstruct_reader):
1155
1188
  """
1156
1189
  Return a list of feature-based ``Productions``.
@@ -1165,6 +1198,7 @@ _PROBABILITY_RE = re.compile(r'( \[ [\d\.]+ \] ) \s*', re.VERBOSE)
1165
1198
  _TERMINAL_RE = re.compile(r'( "[^"]+" | \'[^\']+\' ) \s*', re.VERBOSE)
1166
1199
  _DISJUNCTION_RE = re.compile(r'\| \s*', re.VERBOSE)
1167
1200
 
1201
+
1168
1202
  def _read_production(line, nonterm_parser, probabilistic=False):
1169
1203
  """
1170
1204
  Parse a grammar rule, given as a string, and return
@@ -1251,9 +1285,9 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
1251
1285
  continue_line = ''
1252
1286
  for linenum, line in enumerate(lines):
1253
1287
  line = continue_line + line.strip()
1254
- if line.startswith('#') or line=='': continue
1288
+ if line.startswith('#') or line == '': continue
1255
1289
  if line.endswith('\\'):
1256
- continue_line = line[:-1].rstrip()+' '
1290
+ continue_line = line[:-1].rstrip() + ' '
1257
1291
  continue
1258
1292
  continue_line = ''
1259
1293
  try:
@@ -1270,7 +1304,7 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
1270
1304
  productions += _read_production(line, nonterm_parser, probabilistic)
1271
1305
  except ValueError as e:
1272
1306
  raise ValueError('Unable to parse line %s: %s\n%s' %
1273
- (linenum+1, line, e))
1307
+ (linenum + 1, line, e))
1274
1308
 
1275
1309
  if not productions:
1276
1310
  raise ValueError('No productions found!')
@@ -1278,8 +1312,10 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
1278
1312
  start = productions[0].lhs()
1279
1313
  return (start, productions)
1280
1314
 
1315
+
1281
1316
  _STANDARD_NONTERM_RE = re.compile('( [\w/][\w/^<>-]* ) \s*', re.VERBOSE)
1282
1317
 
1318
+
1283
1319
  def standard_nonterm_parser(string, pos):
1284
1320
  m = _STANDARD_NONTERM_RE.match(string, pos)
1285
1321
  if not m: raise ValueError('Expected a nonterminal, found: '
@@ -1300,15 +1336,16 @@ _READ_DG_RE = re.compile(r'''^\s* # leading whitespace
1300
1336
  | \| # disjunction
1301
1337
  )
1302
1338
  \s*) # trailing space
1303
- *$''', # zero or more copies
1304
- re.VERBOSE)
1339
+ *$''', # zero or more copies
1340
+ re.VERBOSE)
1305
1341
  _SPLIT_DG_RE = re.compile(r'''('[^']'|[-=]+>|"[^"]+"|'[^']+'|\|)''')
1306
1342
 
1343
+
1307
1344
  def _read_dependency_production(s):
1308
1345
  if not _READ_DG_RE.match(s):
1309
1346
  raise ValueError('Bad production string')
1310
1347
  pieces = _SPLIT_DG_RE.split(s)
1311
- pieces = [p for i,p in enumerate(pieces) if i%2==1]
1348
+ pieces = [p for i, p in enumerate(pieces) if i % 2 == 1]
1312
1349
  lhside = pieces[0].strip('\'\"')
1313
1350
  rhsides = [[]]
1314
1351
  for piece in pieces[2:]:
@@ -1333,9 +1370,9 @@ def cfg_demo():
1333
1370
  # Create some nonterminals
1334
1371
  S, NP, VP, PP = nonterminals('S, NP, VP, PP')
1335
1372
  N, V, P, Det = nonterminals('N, V, P, Det')
1336
- VP_slash_NP = VP/NP
1373
+ VP_slash_NP = VP / NP
1337
1374
 
1338
- print('Some nonterminals:', [S, NP, VP, PP, N, V, P, Det, VP/NP])
1375
+ print('Some nonterminals:', [S, NP, VP, PP, N, V, P, Det, VP / NP])
1339
1376
  print(' S.symbol() =>', repr(S.symbol()))
1340
1377
  print()
1341
1378
 
@@ -1357,9 +1394,10 @@ def cfg_demo():
1357
1394
  print(' grammar.start() =>', repr(grammar.start()))
1358
1395
  print(' grammar.productions() =>', end=' ')
1359
1396
  # Use string.replace(...) is to line-wrap the output.
1360
- print(repr(grammar.productions()).replace(',', ',\n'+' '*25))
1397
+ print(repr(grammar.productions()).replace(',', ',\n' + ' ' * 25))
1361
1398
  print()
1362
1399
 
1400
+
1363
1401
  toy_pcfg1 = PCFG.fromstring("""
1364
1402
  S -> NP VP [1.0]
1365
1403
  NP -> Det N [0.5] | NP PP [0.25] | 'John' [0.1] | 'I' [0.15]
@@ -1397,6 +1435,7 @@ toy_pcfg2 = PCFG.fromstring("""
1397
1435
  Det -> 'my' [.28]
1398
1436
  """)
1399
1437
 
1438
+
1400
1439
  def pcfg_demo():
1401
1440
  """
1402
1441
  A demonstration showing how a ``PCFG`` can be created and used.
@@ -1421,7 +1460,7 @@ def pcfg_demo():
1421
1460
  print(' grammar.start() =>', repr(grammar.start()))
1422
1461
  print(' grammar.productions() =>', end=' ')
1423
1462
  # Use .replace(...) is to line-wrap the output.
1424
- print(repr(grammar.productions()).replace(',', ',\n'+' '*26))
1463
+ print(repr(grammar.productions()).replace(',', ',\n' + ' ' * 26))
1425
1464
  print()
1426
1465
 
1427
1466
  # extract productions from three trees and induce the PCFG
@@ -1431,8 +1470,8 @@ def pcfg_demo():
1431
1470
  item = treebank._fileids[0]
1432
1471
  for tree in treebank.parsed_sents(item)[:3]:
1433
1472
  # perform optional tree transformations, e.g.:
1434
- tree.collapse_unary(collapsePOS = False)
1435
- tree.chomsky_normal_form(horzMarkov = 2)
1473
+ tree.collapse_unary(collapsePOS=False)
1474
+ tree.chomsky_normal_form(horzMarkov=2)
1436
1475
 
1437
1476
  productions += tree.productions()
1438
1477
 
@@ -1447,19 +1486,21 @@ def pcfg_demo():
1447
1486
  parser.trace(3)
1448
1487
 
1449
1488
  # doesn't work as tokens are different:
1450
- #sent = treebank.tokenized('wsj_0001.mrg')[0]
1489
+ # sent = treebank.tokenized('wsj_0001.mrg')[0]
1451
1490
 
1452
1491
  sent = treebank.parsed_sents(item)[0].leaves()
1453
1492
  print(sent)
1454
1493
  for parse in parser.parse(sent):
1455
1494
  print(parse)
1456
1495
 
1496
+
1457
1497
  def fcfg_demo():
1458
1498
  import nltk.data
1459
1499
  g = nltk.data.load('grammars/book_grammars/feat0.fcfg')
1460
1500
  print(g)
1461
1501
  print()
1462
1502
 
1503
+
1463
1504
  def dg_demo():
1464
1505
  """
1465
1506
  A demonstration showing the creation and inspection of a
@@ -1472,6 +1513,7 @@ def dg_demo():
1472
1513
  """)
1473
1514
  print(grammar)
1474
1515
 
1516
+
1475
1517
  def sdg_demo():
1476
1518
  """
1477
1519
  A demonstration of how to read a string representation of
@@ -1497,6 +1539,7 @@ def sdg_demo():
1497
1539
  tree = dg.tree()
1498
1540
  print(tree.pprint())
1499
1541
 
1542
+
1500
1543
  def demo():
1501
1544
  cfg_demo()
1502
1545
  pcfg_demo()
@@ -1504,13 +1547,13 @@ def demo():
1504
1547
  dg_demo()
1505
1548
  sdg_demo()
1506
1549
 
1550
+
1507
1551
  if __name__ == '__main__':
1508
1552
  demo()
1509
1553
 
1510
1554
  __all__ = ['Nonterminal', 'nonterminals',
1511
1555
  'CFG', 'Production',
1512
- 'PCFG', 'ProbabilisticProduction',
1513
- 'DependencyGrammar', 'DependencyProduction',
1556
+ 'PCFG', 'ProbabilisticProduction',
1557
+ 'DependencyGrammar', 'DependencyProduction',
1514
1558
  'ProbabilisticDependencyGrammar',
1515
- 'induce_pcfg', 'read_grammar']
1516
-
1559
+ 'induce_pcfg', 'read_grammar']
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit (NLTK) Help
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Authors: Steven Bird <stevenbird1@gmail.com>
5
5
  # URL: <http://nltk.org/>
6
6
  # For license information, see LICENSE.TXT
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit: Inference
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Author: Dan Garrette <dhgarrette@gmail.com>
5
5
  # Ewan Klein <ewan@inf.ed.ac.uk>
6
6
  #
@@ -18,10 +18,14 @@ goal *G*, the model builder tries to find a counter-model, in the sense of a mod
18
18
  the assumptions plus the negation of *G*.
19
19
  """
20
20
  from __future__ import print_function
21
+ from abc import ABCMeta, abstractmethod
22
+ from six import add_metaclass
21
23
 
22
24
  import threading
23
25
  import time
24
26
 
27
+
28
+ @add_metaclass(ABCMeta)
25
29
  class Prover(object):
26
30
  """
27
31
  Interface for trying to prove a goal from assumptions. Both the goal and
@@ -34,13 +38,15 @@ class Prover(object):
34
38
  """
35
39
  return self._prove(goal, assumptions, verbose)[0]
36
40
 
41
+ @abstractmethod
37
42
  def _prove(self, goal=None, assumptions=None, verbose=False):
38
43
  """
39
44
  :return: Whether the proof was successful or not, along with the proof
40
45
  :rtype: tuple: (bool, str)
41
46
  """
42
- raise NotImplementedError()
43
47
 
48
+
49
+ @add_metaclass(ABCMeta)
44
50
  class ModelBuilder(object):
45
51
  """
46
52
  Interface for trying to build a model of set of formulas.
@@ -56,20 +62,22 @@ class ModelBuilder(object):
56
62
  """
57
63
  return self._build_model(goal, assumptions, verbose)[0]
58
64
 
65
+ @abstractmethod
59
66
  def _build_model(self, goal=None, assumptions=None, verbose=False):
60
67
  """
61
68
  Perform the actual model building.
62
69
  :return: Whether a model was generated, and the model itself
63
70
  :rtype: tuple(bool, sem.Valuation)
64
71
  """
65
- raise NotImplementedError()
66
72
 
67
73
 
74
+ @add_metaclass(ABCMeta)
68
75
  class TheoremToolCommand(object):
69
76
  """
70
77
  This class holds a goal and a list of assumptions to be used in proving
71
78
  or model building.
72
79
  """
80
+ @abstractmethod
73
81
  def add_assumptions(self, new_assumptions):
74
82
  """
75
83
  Add new assumptions to the assumption list.
@@ -77,8 +85,8 @@ class TheoremToolCommand(object):
77
85
  :param new_assumptions: new assumptions
78
86
  :type new_assumptions: list(sem.Expression)
79
87
  """
80
- raise NotImplementedError()
81
88
 
89
+ @abstractmethod
82
90
  def retract_assumptions(self, retracted, debug=False):
83
91
  """
84
92
  Retract assumptions from the assumption list.
@@ -89,29 +97,28 @@ class TheoremToolCommand(object):
89
97
  :param retracted: assumptions to be retracted
90
98
  :type retracted: list(sem.Expression)
91
99
  """
92
- raise NotImplementedError()
93
100
 
101
+ @abstractmethod
94
102
  def assumptions(self):
95
103
  """
96
104
  List the current assumptions.
97
105
 
98
106
  :return: list of ``Expression``
99
107
  """
100
- raise NotImplementedError()
101
108
 
109
+ @abstractmethod
102
110
  def goal(self):
103
111
  """
104
112
  Return the goal
105
113
 
106
114
  :return: ``Expression``
107
115
  """
108
- raise NotImplementedError()
109
116
 
117
+ @abstractmethod
110
118
  def print_assumptions(self):
111
119
  """
112
120
  Print the list of the current assumptions.
113
121
  """
114
- raise NotImplementedError()
115
122
 
116
123
 
117
124
  class ProverCommand(TheoremToolCommand):
@@ -119,26 +126,26 @@ class ProverCommand(TheoremToolCommand):
119
126
  This class holds a ``Prover``, a goal, and a list of assumptions. When
120
127
  prove() is called, the ``Prover`` is executed with the goal and assumptions.
121
128
  """
129
+ @abstractmethod
122
130
  def prove(self, verbose=False):
123
131
  """
124
132
  Perform the actual proof.
125
133
  """
126
- raise NotImplementedError()
127
134
 
135
+ @abstractmethod
128
136
  def proof(self, simplify=True):
129
137
  """
130
138
  Return the proof string
131
139
  :param simplify: bool simplify the proof?
132
140
  :return: str
133
141
  """
134
- raise NotImplementedError()
135
142
 
143
+ @abstractmethod
136
144
  def get_prover(self):
137
145
  """
138
146
  Return the prover object
139
147
  :return: ``Prover``
140
148
  """
141
- raise NotImplementedError()
142
149
 
143
150
 
144
151
  class ModelBuilderCommand(TheoremToolCommand):
@@ -147,14 +154,15 @@ class ModelBuilderCommand(TheoremToolCommand):
147
154
  When build_model() is called, the ``ModelBuilder`` is executed with the goal
148
155
  and assumptions.
149
156
  """
157
+ @abstractmethod
150
158
  def build_model(self, verbose=False):
151
159
  """
152
160
  Perform the actual model building.
153
161
  :return: A model if one is generated; None otherwise.
154
162
  :rtype: sem.Valuation
155
163
  """
156
- raise NotImplementedError()
157
164
 
165
+ @abstractmethod
158
166
  def model(self, format=None):
159
167
  """
160
168
  Return a string representation of the model
@@ -162,14 +170,13 @@ class ModelBuilderCommand(TheoremToolCommand):
162
170
  :param simplify: bool simplify the proof?
163
171
  :return: str
164
172
  """
165
- raise NotImplementedError()
166
173
 
174
+ @abstractmethod
167
175
  def get_model_builder(self):
168
176
  """
169
177
  Return the model builder object
170
178
  :return: ``ModelBuilder``
171
179
  """
172
- raise NotImplementedError()
173
180
 
174
181
 
175
182
  class BaseTheoremToolCommand(TheoremToolCommand):
@@ -369,8 +376,8 @@ class TheoremToolCommandDecorator(TheoremToolCommand):
369
376
  """
370
377
  self._command = command
371
378
 
372
- #The decorator has its own versions of 'result' different from the
373
- #underlying command
379
+ # The decorator has its own versions of 'result' different from the
380
+ # underlying command
374
381
  self._result = None
375
382
 
376
383
  def assumptions(self):
@@ -402,8 +409,8 @@ class ProverCommandDecorator(TheoremToolCommandDecorator, ProverCommand):
402
409
  """
403
410
  TheoremToolCommandDecorator.__init__(self, proverCommand)
404
411
 
405
- #The decorator has its own versions of 'result' and 'proof'
406
- #because they may be different from the underlying command
412
+ # The decorator has its own versions of 'result' and 'proof'
413
+ # because they may be different from the underlying command
407
414
  self._proof = None
408
415
 
409
416
  def prove(self, verbose=False):
@@ -449,8 +456,8 @@ class ModelBuilderCommandDecorator(TheoremToolCommandDecorator, ModelBuilderComm
449
456
  """
450
457
  TheoremToolCommandDecorator.__init__(self, modelBuilderCommand)
451
458
 
452
- #The decorator has its own versions of 'result' and 'valuation'
453
- #because they may be different from the underlying command
459
+ # The decorator has its own versions of 'result' and 'valuation'
460
+ # because they may be different from the underlying command
454
461
  self._model = None
455
462
 
456
463
  def build_model(self, verbose=False):
@@ -528,6 +535,7 @@ class ParallelProverBuilder(Prover, ModelBuilder):
528
535
  else:
529
536
  return None
530
537
 
538
+
531
539
  class ParallelProverBuilderCommand(BaseProverCommand, BaseModelBuilderCommand):
532
540
  """
533
541
  This command stores both a prover and a model builder and when either