nltk 3.2__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 (406) hide show
  1. {nltk-3.2 → nltk-3.3}/INSTALL.txt +6 -6
  2. {nltk-3.2 → nltk-3.3}/LICENSE.txt +13 -13
  3. {nltk-3.2 → nltk-3.3}/MANIFEST.in +6 -6
  4. {nltk-3.2/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
  5. nltk-3.2/README.txt → nltk-3.3/README.md +49 -48
  6. nltk-3.3/nltk/VERSION +1 -0
  7. {nltk-3.2 → nltk-3.3}/nltk/__init__.py +185 -185
  8. {nltk-3.2 → nltk-3.3}/nltk/app/__init__.py +52 -53
  9. {nltk-3.2 → nltk-3.3}/nltk/app/chartparser_app.py +2276 -2276
  10. {nltk-3.2 → nltk-3.3}/nltk/app/chunkparser_app.py +1262 -1264
  11. {nltk-3.2 → nltk-3.3}/nltk/app/collocations_app.py +347 -350
  12. {nltk-3.2 → nltk-3.3}/nltk/app/concordance_app.py +568 -570
  13. {nltk-3.2 → nltk-3.3}/nltk/app/nemo_app.py +156 -155
  14. {nltk-3.2 → nltk-3.3}/nltk/app/rdparser_app.py +892 -894
  15. {nltk-3.2 → nltk-3.3}/nltk/app/srparser_app.py +809 -809
  16. {nltk-3.2 → nltk-3.3}/nltk/app/wordfreq_app.py +32 -32
  17. {nltk-3.2 → nltk-3.3}/nltk/app/wordnet_app.py +968 -968
  18. {nltk-3.2 → nltk-3.3}/nltk/book.py +91 -90
  19. {nltk-3.2 → nltk-3.3}/nltk/ccg/__init__.py +22 -22
  20. {nltk-3.2 → nltk-3.3}/nltk/ccg/api.py +359 -335
  21. {nltk-3.2 → nltk-3.3}/nltk/ccg/chart.py +394 -361
  22. {nltk-3.2 → nltk-3.3}/nltk/ccg/combinator.py +343 -312
  23. {nltk-3.2 → nltk-3.3}/nltk/ccg/lexicon.py +328 -290
  24. nltk-3.3/nltk/ccg/logic.py +46 -0
  25. {nltk-3.2 → nltk-3.3}/nltk/chat/__init__.py +49 -49
  26. {nltk-3.2 → nltk-3.3}/nltk/chat/eliza.py +244 -244
  27. {nltk-3.2 → nltk-3.3}/nltk/chat/iesha.py +140 -140
  28. {nltk-3.2 → nltk-3.3}/nltk/chat/rude.py +92 -92
  29. {nltk-3.2 → nltk-3.3}/nltk/chat/suntsu.py +117 -117
  30. {nltk-3.2 → nltk-3.3}/nltk/chat/util.py +122 -120
  31. {nltk-3.2 → nltk-3.3}/nltk/chat/zen.py +282 -282
  32. {nltk-3.2 → nltk-3.3}/nltk/chunk/__init__.py +190 -190
  33. {nltk-3.2 → nltk-3.3}/nltk/chunk/api.py +51 -51
  34. {nltk-3.2 → nltk-3.3}/nltk/chunk/named_entity.py +331 -331
  35. {nltk-3.2 → nltk-3.3}/nltk/chunk/regexp.py +1390 -1384
  36. {nltk-3.2 → nltk-3.3}/nltk/chunk/util.py +600 -600
  37. {nltk-3.2 → nltk-3.3}/nltk/classify/__init__.py +98 -98
  38. {nltk-3.2 → nltk-3.3}/nltk/classify/api.py +193 -193
  39. {nltk-3.2 → nltk-3.3}/nltk/classify/decisiontree.py +295 -295
  40. {nltk-3.2 → nltk-3.3}/nltk/classify/maxent.py +1510 -1492
  41. {nltk-3.2 → nltk-3.3}/nltk/classify/megam.py +179 -178
  42. {nltk-3.2 → nltk-3.3}/nltk/classify/naivebayes.py +245 -242
  43. {nltk-3.2 → nltk-3.3}/nltk/classify/positivenaivebayes.py +170 -170
  44. {nltk-3.2 → nltk-3.3}/nltk/classify/rte_classify.py +160 -191
  45. {nltk-3.2 → nltk-3.3}/nltk/classify/scikitlearn.py +153 -151
  46. {nltk-3.2 → nltk-3.3}/nltk/classify/senna.py +183 -181
  47. {nltk-3.2 → nltk-3.3}/nltk/classify/svm.py +15 -15
  48. {nltk-3.2 → nltk-3.3}/nltk/classify/tadm.py +113 -112
  49. {nltk-3.2 → nltk-3.3}/nltk/classify/textcat.py +193 -193
  50. {nltk-3.2 → nltk-3.3}/nltk/classify/util.py +324 -312
  51. {nltk-3.2 → nltk-3.3}/nltk/classify/weka.py +346 -345
  52. {nltk-3.2 → nltk-3.3}/nltk/cluster/__init__.py +86 -86
  53. {nltk-3.2 → nltk-3.3}/nltk/cluster/api.py +74 -70
  54. {nltk-3.2 → nltk-3.3}/nltk/cluster/em.py +247 -247
  55. {nltk-3.2 → nltk-3.3}/nltk/cluster/gaac.py +168 -168
  56. {nltk-3.2 → nltk-3.3}/nltk/cluster/kmeans.py +221 -221
  57. {nltk-3.2 → nltk-3.3}/nltk/cluster/util.py +304 -289
  58. nltk-3.3/nltk/collections.py +640 -0
  59. {nltk-3.2 → nltk-3.3}/nltk/collocations.py +388 -388
  60. nltk-3.3/nltk/compat.py +365 -0
  61. {nltk-3.2 → nltk-3.3}/nltk/corpus/__init__.py +341 -320
  62. {nltk-3.2 → nltk-3.3}/nltk/corpus/europarl_raw.py +44 -44
  63. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/__init__.py +147 -145
  64. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/aligned.py +115 -114
  65. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/api.py +448 -446
  66. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bnc.py +252 -252
  67. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +227 -227
  68. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +179 -178
  69. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chasen.py +140 -139
  70. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/childes.py +522 -494
  71. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chunked.py +212 -212
  72. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/cmudict.py +97 -95
  73. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +280 -278
  74. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/conll.py +528 -521
  75. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/crubadan.py +116 -116
  76. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/dependency.py +101 -101
  77. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/framenet.py +3059 -2093
  78. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ieer.py +112 -111
  79. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/indian.py +85 -86
  80. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ipipan.py +332 -331
  81. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/knbc.py +187 -187
  82. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/lin.py +156 -156
  83. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/mte.py +311 -310
  84. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nkjp.py +429 -428
  85. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nombank.py +421 -421
  86. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +73 -73
  87. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +115 -115
  88. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +165 -165
  89. nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
  90. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/plaintext.py +232 -233
  91. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ppattach.py +96 -95
  92. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/propbank.py +479 -481
  93. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +128 -126
  94. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/reviews.py +330 -328
  95. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/rte.py +144 -146
  96. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/semcor.py +256 -256
  97. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/senseval.py +203 -201
  98. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +137 -137
  99. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +75 -75
  100. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/string_category.py +60 -59
  101. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/switchboard.py +119 -119
  102. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/tagged.py +295 -294
  103. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/timit.py +452 -450
  104. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/toolbox.py +68 -68
  105. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/twitter.py +155 -157
  106. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/udhr.py +80 -80
  107. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/util.py +804 -800
  108. nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
  109. nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
  110. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/wordnet.py +2108 -2036
  111. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +392 -387
  112. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ycoe.py +243 -242
  113. {nltk-3.2 → nltk-3.3}/nltk/corpus/util.py +144 -127
  114. {nltk-3.2 → nltk-3.3}/nltk/data.py +1487 -1451
  115. {nltk-3.2 → nltk-3.3}/nltk/decorators.py +219 -215
  116. {nltk-3.2 → nltk-3.3}/nltk/downloader.py +2278 -2274
  117. {nltk-3.2 → nltk-3.3}/nltk/draw/__init__.py +27 -27
  118. {nltk-3.2 → nltk-3.3}/nltk/draw/cfg.py +774 -777
  119. {nltk-3.2 → nltk-3.3}/nltk/draw/dispersion.py +58 -58
  120. {nltk-3.2 → nltk-3.3}/nltk/draw/table.py +1098 -1098
  121. {nltk-3.2 → nltk-3.3}/nltk/draw/tree.py +963 -966
  122. {nltk-3.2 → nltk-3.3}/nltk/draw/util.py +2356 -2356
  123. {nltk-3.2 → nltk-3.3}/nltk/featstruct.py +2617 -2500
  124. {nltk-3.2 → nltk-3.3}/nltk/grammar.py +1559 -1516
  125. {nltk-3.2 → nltk-3.3}/nltk/help.py +56 -56
  126. {nltk-3.2 → nltk-3.3}/nltk/inference/__init__.py +20 -20
  127. {nltk-3.2 → nltk-3.3}/nltk/inference/api.py +597 -589
  128. {nltk-3.2 → nltk-3.3}/nltk/inference/discourse.py +612 -608
  129. {nltk-3.2 → nltk-3.3}/nltk/inference/mace.py +311 -311
  130. {nltk-3.2 → nltk-3.3}/nltk/inference/nonmonotonic.py +509 -509
  131. {nltk-3.2 → nltk-3.3}/nltk/inference/prover9.py +431 -431
  132. {nltk-3.2 → nltk-3.3}/nltk/inference/resolution.py +687 -687
  133. {nltk-3.2 → nltk-3.3}/nltk/inference/tableau.py +607 -607
  134. {nltk-3.2 → nltk-3.3}/nltk/internals.py +982 -982
  135. {nltk-3.2 → nltk-3.3}/nltk/jsontags.py +63 -63
  136. {nltk-3.2 → nltk-3.3}/nltk/lazyimport.py +142 -142
  137. {nltk-3.2 → nltk-3.3}/nltk/metrics/__init__.py +30 -29
  138. {nltk-3.2 → nltk-3.3}/nltk/metrics/agreement.py +421 -401
  139. nltk-3.3/nltk/metrics/aline.py +607 -0
  140. {nltk-3.2 → nltk-3.3}/nltk/metrics/association.py +414 -410
  141. {nltk-3.2 → nltk-3.3}/nltk/metrics/confusionmatrix.py +206 -206
  142. {nltk-3.2 → nltk-3.3}/nltk/metrics/distance.py +207 -202
  143. {nltk-3.2 → nltk-3.3}/nltk/metrics/paice.py +381 -381
  144. {nltk-3.2 → nltk-3.3}/nltk/metrics/scores.py +228 -228
  145. {nltk-3.2 → nltk-3.3}/nltk/metrics/segmentation.py +231 -232
  146. {nltk-3.2 → nltk-3.3}/nltk/metrics/spearman.py +69 -69
  147. {nltk-3.2 → nltk-3.3}/nltk/misc/__init__.py +11 -11
  148. {nltk-3.2 → nltk-3.3}/nltk/misc/babelfish.py +10 -10
  149. {nltk-3.2 → nltk-3.3}/nltk/misc/chomsky.py +135 -133
  150. {nltk-3.2 → nltk-3.3}/nltk/misc/minimalset.py +83 -83
  151. {nltk-3.2 → nltk-3.3}/nltk/misc/sort.py +157 -157
  152. {nltk-3.2 → nltk-3.3}/nltk/misc/wordfinder.py +129 -129
  153. {nltk-3.2 → nltk-3.3}/nltk/parse/__init__.py +81 -80
  154. {nltk-3.2 → nltk-3.3}/nltk/parse/api.py +66 -66
  155. {nltk-3.2 → nltk-3.3}/nltk/parse/bllip.py +282 -282
  156. {nltk-3.2 → nltk-3.3}/nltk/parse/chart.py +1682 -1681
  157. nltk-3.3/nltk/parse/corenlp.py +780 -0
  158. {nltk-3.2 → nltk-3.3}/nltk/parse/dependencygraph.py +760 -758
  159. {nltk-3.2 → nltk-3.3}/nltk/parse/earleychart.py +452 -451
  160. {nltk-3.2 → nltk-3.3}/nltk/parse/evaluate.py +129 -129
  161. {nltk-3.2 → nltk-3.3}/nltk/parse/featurechart.py +580 -578
  162. {nltk-3.2 → nltk-3.3}/nltk/parse/generate.py +87 -76
  163. {nltk-3.2 → nltk-3.3}/nltk/parse/malt.py +356 -356
  164. {nltk-3.2 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +783 -783
  165. {nltk-3.2 → nltk-3.3}/nltk/parse/pchart.py +522 -522
  166. {nltk-3.2 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +579 -578
  167. {nltk-3.2 → nltk-3.3}/nltk/parse/recursivedescent.py +655 -656
  168. {nltk-3.2 → nltk-3.3}/nltk/parse/shiftreduce.py +458 -459
  169. {nltk-3.2 → nltk-3.3}/nltk/parse/stanford.py +431 -406
  170. {nltk-3.2 → nltk-3.3}/nltk/parse/transitionparser.py +774 -772
  171. {nltk-3.2 → nltk-3.3}/nltk/parse/util.py +231 -231
  172. {nltk-3.2 → nltk-3.3}/nltk/parse/viterbi.py +401 -401
  173. {nltk-3.2 → nltk-3.3}/nltk/probability.py +2410 -2355
  174. {nltk-3.2 → nltk-3.3}/nltk/sem/__init__.py +61 -61
  175. {nltk-3.2 → nltk-3.3}/nltk/sem/boxer.py +1261 -1261
  176. {nltk-3.2 → nltk-3.3}/nltk/sem/chat80.py +782 -782
  177. {nltk-3.2 → nltk-3.3}/nltk/sem/cooper_storage.py +118 -118
  178. {nltk-3.2 → nltk-3.3}/nltk/sem/drt.py +1258 -1257
  179. {nltk-3.2 → nltk-3.3}/nltk/sem/drt_glue_demo.py +485 -489
  180. {nltk-3.2 → nltk-3.3}/nltk/sem/evaluate.py +790 -784
  181. {nltk-3.2 → nltk-3.3}/nltk/sem/glue.py +696 -694
  182. {nltk-3.2 → nltk-3.3}/nltk/sem/hole.py +386 -384
  183. {nltk-3.2 → nltk-3.3}/nltk/sem/lfg.py +210 -208
  184. {nltk-3.2 → nltk-3.3}/nltk/sem/linearlogic.py +451 -449
  185. {nltk-3.2 → nltk-3.3}/nltk/sem/logic.py +1910 -1910
  186. {nltk-3.2 → nltk-3.3}/nltk/sem/relextract.py +476 -483
  187. {nltk-3.2 → nltk-3.3}/nltk/sem/skolemize.py +101 -101
  188. {nltk-3.2 → nltk-3.3}/nltk/sem/util.py +249 -249
  189. {nltk-3.2 → nltk-3.3}/nltk/sentiment/__init__.py +14 -14
  190. {nltk-3.2 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +229 -229
  191. {nltk-3.2 → nltk-3.3}/nltk/sentiment/util.py +762 -752
  192. {nltk-3.2 → nltk-3.3}/nltk/sentiment/vader.py +443 -445
  193. {nltk-3.2 → nltk-3.3}/nltk/stem/__init__.py +31 -33
  194. {nltk-3.2 → nltk-3.3}/nltk/stem/api.py +28 -25
  195. nltk-3.3/nltk/stem/arlstem.py +369 -0
  196. {nltk-3.2 → nltk-3.3}/nltk/stem/isri.py +345 -345
  197. {nltk-3.2 → nltk-3.3}/nltk/stem/lancaster.py +337 -310
  198. nltk-3.3/nltk/stem/porter.py +710 -0
  199. {nltk-3.2 → nltk-3.3}/nltk/stem/regexp.py +61 -61
  200. {nltk-3.2 → nltk-3.3}/nltk/stem/rslp.py +142 -142
  201. {nltk-3.2 → nltk-3.3}/nltk/stem/snowball.py +4236 -3712
  202. {nltk-3.2 → nltk-3.3}/nltk/stem/util.py +22 -12
  203. {nltk-3.2 → nltk-3.3}/nltk/stem/wordnet.py +51 -51
  204. {nltk-3.2 → nltk-3.3}/nltk/tag/__init__.py +152 -127
  205. {nltk-3.2 → nltk-3.3}/nltk/tag/api.py +86 -81
  206. {nltk-3.2 → nltk-3.3}/nltk/tag/brill.py +424 -426
  207. {nltk-3.2 → nltk-3.3}/nltk/tag/brill_trainer.py +608 -608
  208. {nltk-3.2 → nltk-3.3}/nltk/tag/crf.py +204 -200
  209. {nltk-3.2 → nltk-3.3}/nltk/tag/hmm.py +1277 -1277
  210. {nltk-3.2 → nltk-3.3}/nltk/tag/hunpos.py +132 -132
  211. {nltk-3.2 → nltk-3.3}/nltk/tag/mapping.py +101 -101
  212. {nltk-3.2 → nltk-3.3}/nltk/tag/perceptron.py +329 -314
  213. {nltk-3.2 → nltk-3.3}/nltk/tag/senna.py +147 -145
  214. {nltk-3.2 → nltk-3.3}/nltk/tag/sequential.py +740 -736
  215. {nltk-3.2 → nltk-3.3}/nltk/tag/stanford.py +219 -196
  216. {nltk-3.2 → nltk-3.3}/nltk/tag/tnt.py +595 -604
  217. {nltk-3.2 → nltk-3.3}/nltk/tag/util.py +72 -72
  218. {nltk-3.2 → nltk-3.3}/nltk/tbl/__init__.py +28 -28
  219. {nltk-3.2 → nltk-3.3}/nltk/tbl/api.py +1 -1
  220. {nltk-3.2 → nltk-3.3}/nltk/tbl/demo.py +366 -366
  221. {nltk-3.2 → nltk-3.3}/nltk/tbl/erroranalysis.py +39 -39
  222. {nltk-3.2 → nltk-3.3}/nltk/tbl/feature.py +259 -261
  223. {nltk-3.2 → nltk-3.3}/nltk/tbl/rule.py +321 -321
  224. {nltk-3.2 → nltk-3.3}/nltk/tbl/template.py +303 -308
  225. {nltk-3.2 → nltk-3.3}/nltk/test/__init__.py +18 -18
  226. {nltk-3.2 → nltk-3.3}/nltk/test/all.py +24 -23
  227. {nltk-3.2 → nltk-3.3}/nltk/test/bleu.doctest +14 -14
  228. {nltk-3.2 → nltk-3.3}/nltk/test/bnc.doctest +60 -60
  229. {nltk-3.2 → nltk-3.3}/nltk/test/ccg.doctest +376 -395
  230. nltk-3.3/nltk/test/ccg_semantics.doctest +553 -0
  231. {nltk-3.2 → nltk-3.3}/nltk/test/chat80.doctest +234 -234
  232. {nltk-3.2 → nltk-3.3}/nltk/test/childes.doctest +184 -184
  233. {nltk-3.2 → nltk-3.3}/nltk/test/childes_fixt.py +14 -13
  234. {nltk-3.2 → nltk-3.3}/nltk/test/chunk.doctest +373 -373
  235. {nltk-3.2 → nltk-3.3}/nltk/test/classify.doctest +185 -185
  236. {nltk-3.2 → nltk-3.3}/nltk/test/classify_fixt.py +11 -10
  237. nltk-3.3/nltk/test/collections.doctest +20 -0
  238. {nltk-3.2 → nltk-3.3}/nltk/test/collocations.doctest +276 -276
  239. {nltk-3.2 → nltk-3.3}/nltk/test/compat.doctest +134 -138
  240. {nltk-3.2 → nltk-3.3}/nltk/test/compat_fixt.py +9 -8
  241. nltk-3.3/nltk/test/concordance.doctest +55 -0
  242. {nltk-3.2 → nltk-3.3}/nltk/test/corpus.doctest +2200 -2212
  243. {nltk-3.2 → nltk-3.3}/nltk/test/corpus_fixt.py +3 -3
  244. {nltk-3.2 → nltk-3.3}/nltk/test/crubadan.doctest +65 -65
  245. {nltk-3.2 → nltk-3.3}/nltk/test/data.doctest +379 -379
  246. {nltk-3.2 → nltk-3.3}/nltk/test/dependency.doctest +241 -241
  247. {nltk-3.2 → nltk-3.3}/nltk/test/discourse.doctest +546 -546
  248. {nltk-3.2 → nltk-3.3}/nltk/test/discourse_fixt.py +14 -13
  249. {nltk-3.2 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +159 -156
  250. {nltk-3.2 → nltk-3.3}/nltk/test/drt.doctest +517 -517
  251. {nltk-3.2 → nltk-3.3}/nltk/test/featgram.doctest +607 -607
  252. {nltk-3.2 → nltk-3.3}/nltk/test/featstruct.doctest +1229 -1230
  253. {nltk-3.2 → nltk-3.3}/nltk/test/framenet.doctest +288 -239
  254. {nltk-3.2 → nltk-3.3}/nltk/test/generate.doctest +67 -67
  255. {nltk-3.2 → nltk-3.3}/nltk/test/gensim.doctest +140 -141
  256. {nltk-3.2 → nltk-3.3}/nltk/test/gensim_fixt.py +10 -9
  257. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics.doctest +384 -386
  258. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +68 -68
  259. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +12 -11
  260. {nltk-3.2 → nltk-3.3}/nltk/test/grammar.doctest +48 -48
  261. {nltk-3.2 → nltk-3.3}/nltk/test/grammartestsuites.doctest +109 -109
  262. {nltk-3.2 → nltk-3.3}/nltk/test/index.doctest +100 -100
  263. {nltk-3.2 → nltk-3.3}/nltk/test/inference.doctest +534 -534
  264. {nltk-3.2 → nltk-3.3}/nltk/test/inference_fixt.py +12 -11
  265. {nltk-3.2 → nltk-3.3}/nltk/test/internals.doctest +140 -140
  266. {nltk-3.2 → nltk-3.3}/nltk/test/japanese.doctest +48 -48
  267. {nltk-3.2 → nltk-3.3}/nltk/test/logic.doctest +1098 -1098
  268. {nltk-3.2 → nltk-3.3}/nltk/test/metrics.doctest +270 -270
  269. {nltk-3.2 → nltk-3.3}/nltk/test/misc.doctest +118 -118
  270. {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic.doctest +286 -286
  271. {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +12 -11
  272. {nltk-3.2 → nltk-3.3}/nltk/test/paice.doctest +35 -35
  273. {nltk-3.2 → nltk-3.3}/nltk/test/parse.doctest +884 -884
  274. {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en.doctest +565 -565
  275. {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +16 -16
  276. {nltk-3.2 → nltk-3.3}/nltk/test/probability.doctest +304 -304
  277. {nltk-3.2 → nltk-3.3}/nltk/test/probability_fixt.py +13 -12
  278. {nltk-3.2 → nltk-3.3}/nltk/test/propbank.doctest +176 -176
  279. {nltk-3.2 → nltk-3.3}/nltk/test/relextract.doctest +263 -263
  280. {nltk-3.2 → nltk-3.3}/nltk/test/resolution.doctest +221 -221
  281. {nltk-3.2 → nltk-3.3}/nltk/test/runtests.py +86 -64
  282. {nltk-3.2 → nltk-3.3}/nltk/test/segmentation_fixt.py +10 -10
  283. {nltk-3.2 → nltk-3.3}/nltk/test/semantics.doctest +665 -665
  284. {nltk-3.2 → nltk-3.3}/nltk/test/semantics_fixt.py +7 -7
  285. {nltk-3.2 → nltk-3.3}/nltk/test/sentiment.doctest +233 -233
  286. {nltk-3.2 → nltk-3.3}/nltk/test/sentiwordnet.doctest +41 -41
  287. {nltk-3.2 → nltk-3.3}/nltk/test/simple.doctest +85 -85
  288. {nltk-3.2 → nltk-3.3}/nltk/test/stem.doctest +78 -78
  289. {nltk-3.2 → nltk-3.3}/nltk/test/tag.doctest +33 -33
  290. {nltk-3.2 → nltk-3.3}/nltk/test/tokenize.doctest +273 -166
  291. {nltk-3.2 → nltk-3.3}/nltk/test/toolbox.doctest +307 -307
  292. {nltk-3.2 → nltk-3.3}/nltk/test/translate.doctest +242 -242
  293. {nltk-3.2 → nltk-3.3}/nltk/test/translate_fixt.py +3 -3
  294. {nltk-3.2 → nltk-3.3}/nltk/test/tree.doctest +1101 -1101
  295. {nltk-3.2 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +127 -127
  296. {nltk-3.2 → nltk-3.3}/nltk/test/treetransforms.doctest +156 -156
  297. nltk-3.3/nltk/test/unit/test_2x_compat.py +63 -0
  298. nltk-3.3/nltk/test/unit/test_aline.py +52 -0
  299. nltk-3.3/nltk/test/unit/test_chunk.py +56 -0
  300. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_classify.py +55 -53
  301. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_collocations.py +88 -79
  302. nltk-3.3/nltk/test/unit/test_concordance.py +98 -0
  303. nltk-3.3/nltk/test/unit/test_corenlp.py +1000 -0
  304. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpora.py +200 -183
  305. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +45 -45
  306. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_hmm.py +88 -88
  307. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +188 -187
  308. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +26 -26
  309. nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
  310. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +124 -124
  311. nltk-3.3/nltk/test/unit/test_senna.py +74 -0
  312. nltk-3.3/nltk/test/unit/test_stem.py +121 -0
  313. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tag.py +20 -20
  314. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tgrep.py +628 -626
  315. nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
  316. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +185 -185
  317. nltk-3.3/nltk/test/unit/test_wordnet.py +134 -0
  318. nltk-3.3/nltk/test/unit/translate/test_bleu.py +244 -0
  319. nltk-3.3/nltk/test/unit/translate/test_gdfa.py +57 -0
  320. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +75 -75
  321. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +87 -87
  322. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +105 -105
  323. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +126 -126
  324. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +166 -166
  325. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +270 -270
  326. nltk-3.3/nltk/test/unit/translate/test_nist.py +37 -0
  327. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +300 -300
  328. {nltk-3.2 → nltk-3.3}/nltk/test/unit/utils.py +41 -41
  329. {nltk-3.2 → nltk-3.3}/nltk/test/util.doctest +48 -48
  330. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet.doctest +595 -581
  331. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_fixt.py +7 -6
  332. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_lch.doctest +53 -53
  333. {nltk-3.2 → nltk-3.3}/nltk/test/wsd.doctest +68 -68
  334. {nltk-3.2 → nltk-3.3}/nltk/text.py +663 -610
  335. {nltk-3.2 → nltk-3.3}/nltk/tgrep.py +938 -937
  336. {nltk-3.2 → nltk-3.3}/nltk/tokenize/__init__.py +130 -107
  337. {nltk-3.2 → nltk-3.3}/nltk/tokenize/api.py +77 -78
  338. {nltk-3.2 → nltk-3.3}/nltk/tokenize/casual.py +343 -342
  339. {nltk-3.2 → nltk-3.3}/nltk/tokenize/mwe.py +120 -120
  340. nltk-3.3/nltk/tokenize/nist.py +173 -0
  341. {nltk-3.2 → nltk-3.3}/nltk/tokenize/punkt.py +1620 -1601
  342. {nltk-3.2 → nltk-3.3}/nltk/tokenize/regexp.py +208 -202
  343. nltk-3.3/nltk/tokenize/repp.py +151 -0
  344. {nltk-3.2 → nltk-3.3}/nltk/tokenize/sexpr.py +140 -142
  345. {nltk-3.2 → nltk-3.3}/nltk/tokenize/simple.py +138 -136
  346. {nltk-3.2 → nltk-3.3}/nltk/tokenize/stanford.py +117 -113
  347. nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
  348. {nltk-3.2 → nltk-3.3}/nltk/tokenize/texttiling.py +458 -460
  349. nltk-3.3/nltk/tokenize/toktok.py +155 -0
  350. nltk-3.3/nltk/tokenize/treebank.py +363 -0
  351. nltk-3.3/nltk/tokenize/util.py +261 -0
  352. {nltk-3.2 → nltk-3.3}/nltk/toolbox.py +499 -497
  353. {nltk-3.2 → nltk-3.3}/nltk/translate/__init__.py +24 -24
  354. {nltk-3.2 → nltk-3.3}/nltk/translate/api.py +331 -321
  355. {nltk-3.2 → nltk-3.3}/nltk/translate/bleu_score.py +615 -556
  356. nltk-3.3/nltk/translate/chrf_score.py +137 -0
  357. {nltk-3.2 → nltk-3.3}/nltk/translate/gale_church.py +248 -235
  358. {nltk-3.2 → nltk-3.3}/nltk/translate/gdfa.py +135 -131
  359. nltk-3.3/nltk/translate/gleu_score.py +193 -0
  360. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm1.py +250 -241
  361. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm2.py +308 -308
  362. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm3.py +337 -337
  363. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm4.py +467 -467
  364. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm5.py +639 -639
  365. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm_model.py +536 -533
  366. {nltk-3.2 → nltk-3.3}/nltk/translate/metrics.py +40 -40
  367. nltk-3.3/nltk/translate/nist_score.py +178 -0
  368. {nltk-3.2 → nltk-3.3}/nltk/translate/phrase_based.py +175 -175
  369. {nltk-3.2 → nltk-3.3}/nltk/translate/ribes_score.py +325 -325
  370. {nltk-3.2 → nltk-3.3}/nltk/translate/stack_decoder.py +499 -495
  371. {nltk-3.2 → nltk-3.3}/nltk/tree.py +1605 -1603
  372. {nltk-3.2 → nltk-3.3}/nltk/treeprettyprinter.py +564 -564
  373. {nltk-3.2 → nltk-3.3}/nltk/treetransforms.py +309 -309
  374. {nltk-3.2 → nltk-3.3}/nltk/twitter/__init__.py +28 -28
  375. {nltk-3.2 → nltk-3.3}/nltk/twitter/api.py +141 -136
  376. {nltk-3.2 → nltk-3.3}/nltk/twitter/common.py +264 -258
  377. {nltk-3.2 → nltk-3.3}/nltk/twitter/twitter_demo.py +288 -288
  378. {nltk-3.2 → nltk-3.3}/nltk/twitter/twitterclient.py +530 -530
  379. {nltk-3.2 → nltk-3.3}/nltk/twitter/util.py +147 -146
  380. nltk-3.3/nltk/util.py +751 -0
  381. {nltk-3.2 → nltk-3.3}/nltk/wsd.py +53 -53
  382. {nltk-3.2 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
  383. {nltk-3.2 → nltk-3.3}/nltk.egg-info/SOURCES.txt +26 -3
  384. nltk-3.3/nltk.egg-info/requires.txt +31 -0
  385. {nltk-3.2 → nltk-3.3}/setup.cfg +0 -1
  386. {nltk-3.2 → nltk-3.3}/setup.py +102 -75
  387. nltk-3.2/nltk/VERSION +0 -1
  388. nltk-3.2/nltk/compat.py +0 -680
  389. nltk-3.2/nltk/corpus/reader/pl196x.py +0 -278
  390. nltk-3.2/nltk/corpus/reader/verbnet.py +0 -408
  391. nltk-3.2/nltk/corpus/reader/wordlist.py +0 -37
  392. nltk-3.2/nltk/sentiment/vader_lexicon.txt +0 -7517
  393. nltk-3.2/nltk/six.py +0 -868
  394. nltk-3.2/nltk/stem/porter.py +0 -692
  395. nltk-3.2/nltk/test/unit/test_2x_compat.py +0 -26
  396. nltk-3.2/nltk/test/unit/test_stem.py +0 -36
  397. nltk-3.2/nltk/test/unit/test_tokenize.py +0 -23
  398. nltk-3.2/nltk/test/unit/translate/test_bleu.py +0 -84
  399. nltk-3.2/nltk/tokenize/treebank.py +0 -124
  400. nltk-3.2/nltk/tokenize/util.py +0 -90
  401. nltk-3.2/nltk/util.py +0 -1364
  402. {nltk-3.2 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
  403. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
  404. {nltk-3.2 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
  405. {nltk-3.2 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
  406. {nltk-3.2 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
@@ -1,379 +1,379 @@
1
- .. Copyright (C) 2001-2015 NLTK Project
2
- .. For license information, see LICENSE.TXT
3
-
4
- =========================================
5
- Loading Resources From the Data Package
6
- =========================================
7
-
8
- >>> import nltk.data
9
-
10
- Overview
11
- ~~~~~~~~
12
- The `nltk.data` module contains functions that can be used to load
13
- NLTK resource files, such as corpora, grammars, and saved processing
14
- objects.
15
-
16
- Loading Data Files
17
- ~~~~~~~~~~~~~~~~~~
18
- Resources are loaded using the function `nltk.data.load()`, which
19
- takes as its first argument a URL specifying what file should be
20
- loaded. The ``nltk:`` protocol loads files from the NLTK data
21
- distribution:
22
-
23
- >>> from __future__ import print_function
24
- >>> tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')
25
- >>> tokenizer.tokenize('Hello. This is a test. It works!')
26
- ['Hello.', 'This is a test.', 'It works!']
27
-
28
- It is important to note that there should be no space following the
29
- colon (':') in the URL; 'nltk: tokenizers/punkt/english.pickle' will
30
- not work!
31
-
32
- The ``nltk:`` protocol is used by default if no protocol is specified:
33
-
34
- >>> nltk.data.load('tokenizers/punkt/english.pickle') # doctest: +ELLIPSIS
35
- <nltk.tokenize.punkt.PunktSentenceTokenizer object at ...>
36
-
37
- But it is also possible to load resources from ``http:``, ``ftp:``,
38
- and ``file:`` URLs, e.g. ``cfg = nltk.data.load('http://example.com/path/to/toy.cfg')``
39
-
40
- >>> # Load a grammar using an absolute path.
41
- >>> url = 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg')
42
- >>> url.replace('\\', '/') # doctest: +ELLIPSIS
43
- 'file:...toy.cfg'
44
- >>> print(nltk.data.load(url)) # doctest: +ELLIPSIS
45
- Grammar with 14 productions (start state = S)
46
- S -> NP VP
47
- PP -> P NP
48
- ...
49
- P -> 'on'
50
- P -> 'in'
51
-
52
- The second argument to the `nltk.data.load()` function specifies the
53
- file format, which determines how the file's contents are processed
54
- before they are returned by ``load()``. The formats that are
55
- currently supported by the data module are described by the dictionary
56
- `nltk.data.FORMATS`:
57
-
58
- >>> for format, descr in sorted(nltk.data.FORMATS.items()):
59
- ... print('{0:<7} {1:}'.format(format, descr)) # doctest: +NORMALIZE_WHITESPACE
60
- cfg A context free grammar.
61
- fcfg A feature CFG.
62
- fol A list of first order logic expressions, parsed with
63
- nltk.sem.logic.Expression.fromstring.
64
- json A serialized python object, stored using the json module.
65
- logic A list of first order logic expressions, parsed with
66
- nltk.sem.logic.LogicParser. Requires an additional logic_parser
67
- parameter
68
- pcfg A probabilistic CFG.
69
- pickle A serialized python object, stored using the pickle
70
- module.
71
- raw The raw (byte string) contents of a file.
72
- text The raw (unicode string) contents of a file.
73
- val A semantic valuation, parsed by
74
- nltk.sem.Valuation.fromstring.
75
- yaml A serialized python object, stored using the yaml module.
76
-
77
- `nltk.data.load()` will raise a ValueError if a bad format name is
78
- specified:
79
-
80
- >>> nltk.data.load('grammars/sample_grammars/toy.cfg', 'bar')
81
- Traceback (most recent call last):
82
- . . .
83
- ValueError: Unknown format type!
84
-
85
- By default, the ``"auto"`` format is used, which chooses a format
86
- based on the filename's extension. The mapping from file extensions
87
- to format names is specified by `nltk.data.AUTO_FORMATS`:
88
-
89
- >>> for ext, format in sorted(nltk.data.AUTO_FORMATS.items()):
90
- ... print('.%-7s -> %s' % (ext, format))
91
- .cfg -> cfg
92
- .fcfg -> fcfg
93
- .fol -> fol
94
- .json -> json
95
- .logic -> logic
96
- .pcfg -> pcfg
97
- .pickle -> pickle
98
- .text -> text
99
- .txt -> text
100
- .val -> val
101
- .yaml -> yaml
102
-
103
- If `nltk.data.load()` is unable to determine the format based on the
104
- filename's extension, it will raise a ValueError:
105
-
106
- >>> nltk.data.load('foo.bar')
107
- Traceback (most recent call last):
108
- . . .
109
- ValueError: Could not determine format for foo.bar based on its file
110
- extension; use the "format" argument to specify the format explicitly.
111
-
112
- Note that by explicitly specifying the ``format`` argument, you can
113
- override the load method's default processing behavior. For example,
114
- to get the raw contents of any file, simply use ``format="raw"``:
115
-
116
- >>> s = nltk.data.load('grammars/sample_grammars/toy.cfg', 'text')
117
- >>> print(s) # doctest: +ELLIPSIS
118
- S -> NP VP
119
- PP -> P NP
120
- NP -> Det N | NP PP
121
- VP -> V NP | VP PP
122
- ...
123
-
124
- Making Local Copies
125
- ~~~~~~~~~~~~~~~~~~~
126
- .. This will not be visible in the html output: create a tempdir to
127
- play in.
128
- >>> import tempfile, os
129
- >>> tempdir = tempfile.mkdtemp()
130
- >>> old_dir = os.path.abspath('.')
131
- >>> os.chdir(tempdir)
132
-
133
- The function `nltk.data.retrieve()` copies a given resource to a local
134
- file. This can be useful, for example, if you want to edit one of the
135
- sample grammars.
136
-
137
- >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg')
138
- Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy.cfg'
139
-
140
- >>> # Simulate editing the grammar.
141
- >>> with open('toy.cfg') as inp:
142
- ... s = inp.read().replace('NP', 'DP')
143
- >>> with open('toy.cfg', 'w') as out:
144
- ... _bytes_written = out.write(s)
145
-
146
- >>> # Load the edited grammar, & display it.
147
- >>> cfg = nltk.data.load('file:///' + os.path.abspath('toy.cfg'))
148
- >>> print(cfg) # doctest: +ELLIPSIS
149
- Grammar with 14 productions (start state = S)
150
- S -> DP VP
151
- PP -> P DP
152
- ...
153
- P -> 'on'
154
- P -> 'in'
155
-
156
- The second argument to `nltk.data.retrieve()` specifies the filename
157
- for the new copy of the file. By default, the source file's filename
158
- is used.
159
-
160
- >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg', 'mytoy.cfg')
161
- Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'mytoy.cfg'
162
- >>> os.path.isfile('./mytoy.cfg')
163
- True
164
- >>> nltk.data.retrieve('grammars/sample_grammars/np.fcfg')
165
- Retrieving 'nltk:grammars/sample_grammars/np.fcfg', saving to 'np.fcfg'
166
- >>> os.path.isfile('./np.fcfg')
167
- True
168
-
169
- If a file with the specified (or default) filename already exists in
170
- the current directory, then `nltk.data.retrieve()` will raise a
171
- ValueError exception. It will *not* overwrite the file:
172
-
173
- >>> os.path.isfile('./toy.cfg')
174
- True
175
- >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg') # doctest: +ELLIPSIS
176
- Traceback (most recent call last):
177
- . . .
178
- ValueError: File '...toy.cfg' already exists!
179
-
180
- .. This will not be visible in the html output: clean up the tempdir.
181
- >>> os.chdir(old_dir)
182
- >>> for f in os.listdir(tempdir):
183
- ... os.remove(os.path.join(tempdir, f))
184
- >>> os.rmdir(tempdir)
185
-
186
- Finding Files in the NLTK Data Package
187
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188
- The `nltk.data.find()` function searches the NLTK data package for a
189
- given file, and returns a pointer to that file. This pointer can
190
- either be a `FileSystemPathPointer` (whose `path` attribute gives the
191
- absolute path of the file); or a `ZipFilePathPointer`, specifying a
192
- zipfile and the name of an entry within that zipfile. Both pointer
193
- types define the `open()` method, which can be used to read the string
194
- contents of the file.
195
-
196
- >>> path = nltk.data.find('corpora/abc/rural.txt')
197
- >>> str(path) # doctest: +ELLIPSIS
198
- '...rural.txt'
199
- >>> print(path.open().read(60).decode())
200
- PM denies knowledge of AWB kickbacks
201
- The Prime Minister has
202
-
203
- Alternatively, the `nltk.data.load()` function can be used with the
204
- keyword argument ``format="raw"``:
205
-
206
- >>> s = nltk.data.load('corpora/abc/rural.txt', format='raw')[:60]
207
- >>> print(s.decode())
208
- PM denies knowledge of AWB kickbacks
209
- The Prime Minister has
210
-
211
- Alternatively, you can use the keyword argument ``format="text"``:
212
-
213
- >>> s = nltk.data.load('corpora/abc/rural.txt', format='text')[:60]
214
- >>> print(s)
215
- PM denies knowledge of AWB kickbacks
216
- The Prime Minister has
217
-
218
- Resource Caching
219
- ~~~~~~~~~~~~~~~~
220
-
221
- NLTK uses a weakref dictionary to maintain a cache of resources that
222
- have been loaded. If you load a resource that is already stored in
223
- the cache, then the cached copy will be returned. This behavior can
224
- be seen by the trace output generated when verbose=True:
225
-
226
- >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
227
- <<Loading nltk:grammars/book_grammars/feat0.fcfg>>
228
- >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
229
- <<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
230
-
231
- If you wish to load a resource from its source, bypassing the cache,
232
- use the ``cache=False`` argument to `nltk.data.load()`. This can be
233
- useful, for example, if the resource is loaded from a local file, and
234
- you are actively editing that file:
235
-
236
- >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',cache=False,verbose=True)
237
- <<Loading nltk:grammars/book_grammars/feat0.fcfg>>
238
-
239
- The cache *no longer* uses weak references. A resource will not be
240
- automatically expunged from the cache when no more objects are using
241
- it. In the following example, when we clear the variable ``feat0``,
242
- the reference count for the feature grammar object drops to zero.
243
- However, the object remains cached:
244
-
245
- >>> del feat0
246
- >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',
247
- ... verbose=True)
248
- <<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
249
-
250
- You can clear the entire contents of the cache, using
251
- `nltk.data.clear_cache()`:
252
-
253
- >>> nltk.data.clear_cache()
254
-
255
- Retrieving other Data Sources
256
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
257
- >>> formulas = nltk.data.load('grammars/book_grammars/background.fol')
258
- >>> for f in formulas: print(str(f))
259
- all x.(boxerdog(x) -> dog(x))
260
- all x.(boxer(x) -> person(x))
261
- all x.-(dog(x) & person(x))
262
- all x.(married(x) <-> exists y.marry(x,y))
263
- all x.(bark(x) -> dog(x))
264
- all x y.(marry(x,y) -> (person(x) & person(y)))
265
- -(Vincent = Mia)
266
- -(Vincent = Fido)
267
- -(Mia = Fido)
268
-
269
- Regression Tests
270
- ~~~~~~~~~~~~~~~~
271
- Create a temp dir for tests that write files:
272
-
273
- >>> import tempfile, os
274
- >>> tempdir = tempfile.mkdtemp()
275
- >>> old_dir = os.path.abspath('.')
276
- >>> os.chdir(tempdir)
277
-
278
- The `retrieve()` function accepts all url types:
279
-
280
- >>> urls = ['https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg',
281
- ... 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg'),
282
- ... 'nltk:grammars/sample_grammars/toy.cfg',
283
- ... 'grammars/sample_grammars/toy.cfg']
284
- >>> for i, url in enumerate(urls):
285
- ... nltk.data.retrieve(url, 'toy-%d.cfg' % i) # doctest: +ELLIPSIS
286
- Retrieving 'https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg', saving to 'toy-0.cfg'
287
- Retrieving 'file:...toy.cfg', saving to 'toy-1.cfg'
288
- Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-2.cfg'
289
- Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-3.cfg'
290
-
291
- Clean up the temp dir:
292
-
293
- >>> os.chdir(old_dir)
294
- >>> for f in os.listdir(tempdir):
295
- ... os.remove(os.path.join(tempdir, f))
296
- >>> os.rmdir(tempdir)
297
-
298
- Lazy Loader
299
- -----------
300
- A lazy loader is a wrapper object that defers loading a resource until
301
- it is accessed or used in any way. This is mainly intended for
302
- internal use by NLTK's corpus readers.
303
-
304
- >>> # Create a lazy loader for toy.cfg.
305
- >>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
306
-
307
- >>> # Show that it's not loaded yet:
308
- >>> object.__repr__(ll) # doctest: +ELLIPSIS
309
- '<nltk.data.LazyLoader object at ...>'
310
-
311
- >>> # printing it is enough to cause it to be loaded:
312
- >>> print(ll)
313
- <Grammar with 14 productions>
314
-
315
- >>> # Show that it's now been loaded:
316
- >>> object.__repr__(ll) # doctest: +ELLIPSIS
317
- '<nltk.grammar.CFG object at ...>'
318
-
319
-
320
- >>> # Test that accessing an attribute also loads it:
321
- >>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
322
- >>> ll.start()
323
- S
324
- >>> object.__repr__(ll) # doctest: +ELLIPSIS
325
- '<nltk.grammar.CFG object at ...>'
326
-
327
- Buffered Gzip Reading and Writing
328
- ---------------------------------
329
- Write performance to gzip-compressed is extremely poor when the files become large.
330
- File creation can become a bottleneck in those cases.
331
-
332
- Read performance from large gzipped pickle files was improved in data.py by
333
- buffering the reads. A similar fix can be applied to writes by buffering
334
- the writes to a StringIO object first.
335
-
336
- This is mainly intended for internal use. The test simply tests that reading
337
- and writing work as intended and does not test how much improvement buffering
338
- provides.
339
-
340
- >>> from nltk.compat import StringIO
341
- >>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'wb', size=2**10)
342
- >>> ans = []
343
- >>> for i in range(10000):
344
- ... ans.append(str(i).encode('ascii'))
345
- ... test.write(str(i).encode('ascii'))
346
- >>> test.close()
347
- >>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'rb')
348
- >>> test.read() == b''.join(ans)
349
- True
350
- >>> test.close()
351
- >>> import os
352
- >>> os.unlink('testbuf.gz')
353
-
354
- JSON Encoding and Decoding
355
- --------------------------
356
- JSON serialization is used instead of pickle for some classes.
357
-
358
- >>> from nltk import jsontags
359
- >>> from nltk.jsontags import JSONTaggedEncoder, JSONTaggedDecoder, register_tag
360
- >>> @jsontags.register_tag
361
- ... class JSONSerializable:
362
- ... json_tag = 'JSONSerializable'
363
- ...
364
- ... def __init__(self, n):
365
- ... self.n = n
366
- ...
367
- ... def encode_json_obj(self):
368
- ... return self.n
369
- ...
370
- ... @classmethod
371
- ... def decode_json_obj(cls, obj):
372
- ... n = obj
373
- ... return cls(n)
374
- ...
375
- >>> JSONTaggedEncoder().encode(JSONSerializable(1))
376
- '{"!JSONSerializable": 1}'
377
- >>> JSONTaggedDecoder().decode('{"!JSONSerializable": 1}').n
378
- 1
379
-
1
+ .. Copyright (C) 2001-2018 NLTK Project
2
+ .. For license information, see LICENSE.TXT
3
+
4
+ =========================================
5
+ Loading Resources From the Data Package
6
+ =========================================
7
+
8
+ >>> import nltk.data
9
+
10
+ Overview
11
+ ~~~~~~~~
12
+ The `nltk.data` module contains functions that can be used to load
13
+ NLTK resource files, such as corpora, grammars, and saved processing
14
+ objects.
15
+
16
+ Loading Data Files
17
+ ~~~~~~~~~~~~~~~~~~
18
+ Resources are loaded using the function `nltk.data.load()`, which
19
+ takes as its first argument a URL specifying what file should be
20
+ loaded. The ``nltk:`` protocol loads files from the NLTK data
21
+ distribution:
22
+
23
+ >>> from __future__ import print_function
24
+ >>> tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')
25
+ >>> tokenizer.tokenize('Hello. This is a test. It works!')
26
+ ['Hello.', 'This is a test.', 'It works!']
27
+
28
+ It is important to note that there should be no space following the
29
+ colon (':') in the URL; 'nltk: tokenizers/punkt/english.pickle' will
30
+ not work!
31
+
32
+ The ``nltk:`` protocol is used by default if no protocol is specified:
33
+
34
+ >>> nltk.data.load('tokenizers/punkt/english.pickle') # doctest: +ELLIPSIS
35
+ <nltk.tokenize.punkt.PunktSentenceTokenizer object at ...>
36
+
37
+ But it is also possible to load resources from ``http:``, ``ftp:``,
38
+ and ``file:`` URLs, e.g. ``cfg = nltk.data.load('http://example.com/path/to/toy.cfg')``
39
+
40
+ >>> # Load a grammar using an absolute path.
41
+ >>> url = 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg')
42
+ >>> url.replace('\\', '/') # doctest: +ELLIPSIS
43
+ 'file:...toy.cfg'
44
+ >>> print(nltk.data.load(url)) # doctest: +ELLIPSIS
45
+ Grammar with 14 productions (start state = S)
46
+ S -> NP VP
47
+ PP -> P NP
48
+ ...
49
+ P -> 'on'
50
+ P -> 'in'
51
+
52
+ The second argument to the `nltk.data.load()` function specifies the
53
+ file format, which determines how the file's contents are processed
54
+ before they are returned by ``load()``. The formats that are
55
+ currently supported by the data module are described by the dictionary
56
+ `nltk.data.FORMATS`:
57
+
58
+ >>> for format, descr in sorted(nltk.data.FORMATS.items()):
59
+ ... print('{0:<7} {1:}'.format(format, descr)) # doctest: +NORMALIZE_WHITESPACE
60
+ cfg A context free grammar.
61
+ fcfg A feature CFG.
62
+ fol A list of first order logic expressions, parsed with
63
+ nltk.sem.logic.Expression.fromstring.
64
+ json A serialized python object, stored using the json module.
65
+ logic A list of first order logic expressions, parsed with
66
+ nltk.sem.logic.LogicParser. Requires an additional logic_parser
67
+ parameter
68
+ pcfg A probabilistic CFG.
69
+ pickle A serialized python object, stored using the pickle
70
+ module.
71
+ raw The raw (byte string) contents of a file.
72
+ text The raw (unicode string) contents of a file.
73
+ val A semantic valuation, parsed by
74
+ nltk.sem.Valuation.fromstring.
75
+ yaml A serialized python object, stored using the yaml module.
76
+
77
+ `nltk.data.load()` will raise a ValueError if a bad format name is
78
+ specified:
79
+
80
+ >>> nltk.data.load('grammars/sample_grammars/toy.cfg', 'bar')
81
+ Traceback (most recent call last):
82
+ . . .
83
+ ValueError: Unknown format type!
84
+
85
+ By default, the ``"auto"`` format is used, which chooses a format
86
+ based on the filename's extension. The mapping from file extensions
87
+ to format names is specified by `nltk.data.AUTO_FORMATS`:
88
+
89
+ >>> for ext, format in sorted(nltk.data.AUTO_FORMATS.items()):
90
+ ... print('.%-7s -> %s' % (ext, format))
91
+ .cfg -> cfg
92
+ .fcfg -> fcfg
93
+ .fol -> fol
94
+ .json -> json
95
+ .logic -> logic
96
+ .pcfg -> pcfg
97
+ .pickle -> pickle
98
+ .text -> text
99
+ .txt -> text
100
+ .val -> val
101
+ .yaml -> yaml
102
+
103
+ If `nltk.data.load()` is unable to determine the format based on the
104
+ filename's extension, it will raise a ValueError:
105
+
106
+ >>> nltk.data.load('foo.bar')
107
+ Traceback (most recent call last):
108
+ . . .
109
+ ValueError: Could not determine format for foo.bar based on its file
110
+ extension; use the "format" argument to specify the format explicitly.
111
+
112
+ Note that by explicitly specifying the ``format`` argument, you can
113
+ override the load method's default processing behavior. For example,
114
+ to get the raw contents of any file, simply use ``format="raw"``:
115
+
116
+ >>> s = nltk.data.load('grammars/sample_grammars/toy.cfg', 'text')
117
+ >>> print(s) # doctest: +ELLIPSIS
118
+ S -> NP VP
119
+ PP -> P NP
120
+ NP -> Det N | NP PP
121
+ VP -> V NP | VP PP
122
+ ...
123
+
124
+ Making Local Copies
125
+ ~~~~~~~~~~~~~~~~~~~
126
+ .. This will not be visible in the html output: create a tempdir to
127
+ play in.
128
+ >>> import tempfile, os
129
+ >>> tempdir = tempfile.mkdtemp()
130
+ >>> old_dir = os.path.abspath('.')
131
+ >>> os.chdir(tempdir)
132
+
133
+ The function `nltk.data.retrieve()` copies a given resource to a local
134
+ file. This can be useful, for example, if you want to edit one of the
135
+ sample grammars.
136
+
137
+ >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg')
138
+ Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy.cfg'
139
+
140
+ >>> # Simulate editing the grammar.
141
+ >>> with open('toy.cfg') as inp:
142
+ ... s = inp.read().replace('NP', 'DP')
143
+ >>> with open('toy.cfg', 'w') as out:
144
+ ... _bytes_written = out.write(s)
145
+
146
+ >>> # Load the edited grammar, & display it.
147
+ >>> cfg = nltk.data.load('file:///' + os.path.abspath('toy.cfg'))
148
+ >>> print(cfg) # doctest: +ELLIPSIS
149
+ Grammar with 14 productions (start state = S)
150
+ S -> DP VP
151
+ PP -> P DP
152
+ ...
153
+ P -> 'on'
154
+ P -> 'in'
155
+
156
+ The second argument to `nltk.data.retrieve()` specifies the filename
157
+ for the new copy of the file. By default, the source file's filename
158
+ is used.
159
+
160
+ >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg', 'mytoy.cfg')
161
+ Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'mytoy.cfg'
162
+ >>> os.path.isfile('./mytoy.cfg')
163
+ True
164
+ >>> nltk.data.retrieve('grammars/sample_grammars/np.fcfg')
165
+ Retrieving 'nltk:grammars/sample_grammars/np.fcfg', saving to 'np.fcfg'
166
+ >>> os.path.isfile('./np.fcfg')
167
+ True
168
+
169
+ If a file with the specified (or default) filename already exists in
170
+ the current directory, then `nltk.data.retrieve()` will raise a
171
+ ValueError exception. It will *not* overwrite the file:
172
+
173
+ >>> os.path.isfile('./toy.cfg')
174
+ True
175
+ >>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg') # doctest: +ELLIPSIS
176
+ Traceback (most recent call last):
177
+ . . .
178
+ ValueError: File '...toy.cfg' already exists!
179
+
180
+ .. This will not be visible in the html output: clean up the tempdir.
181
+ >>> os.chdir(old_dir)
182
+ >>> for f in os.listdir(tempdir):
183
+ ... os.remove(os.path.join(tempdir, f))
184
+ >>> os.rmdir(tempdir)
185
+
186
+ Finding Files in the NLTK Data Package
187
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188
+ The `nltk.data.find()` function searches the NLTK data package for a
189
+ given file, and returns a pointer to that file. This pointer can
190
+ either be a `FileSystemPathPointer` (whose `path` attribute gives the
191
+ absolute path of the file); or a `ZipFilePathPointer`, specifying a
192
+ zipfile and the name of an entry within that zipfile. Both pointer
193
+ types define the `open()` method, which can be used to read the string
194
+ contents of the file.
195
+
196
+ >>> path = nltk.data.find('corpora/abc/rural.txt')
197
+ >>> str(path) # doctest: +ELLIPSIS
198
+ '...rural.txt'
199
+ >>> print(path.open().read(60).decode())
200
+ PM denies knowledge of AWB kickbacks
201
+ The Prime Minister has
202
+
203
+ Alternatively, the `nltk.data.load()` function can be used with the
204
+ keyword argument ``format="raw"``:
205
+
206
+ >>> s = nltk.data.load('corpora/abc/rural.txt', format='raw')[:60]
207
+ >>> print(s.decode())
208
+ PM denies knowledge of AWB kickbacks
209
+ The Prime Minister has
210
+
211
+ Alternatively, you can use the keyword argument ``format="text"``:
212
+
213
+ >>> s = nltk.data.load('corpora/abc/rural.txt', format='text')[:60]
214
+ >>> print(s)
215
+ PM denies knowledge of AWB kickbacks
216
+ The Prime Minister has
217
+
218
+ Resource Caching
219
+ ~~~~~~~~~~~~~~~~
220
+
221
+ NLTK uses a weakref dictionary to maintain a cache of resources that
222
+ have been loaded. If you load a resource that is already stored in
223
+ the cache, then the cached copy will be returned. This behavior can
224
+ be seen by the trace output generated when verbose=True:
225
+
226
+ >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
227
+ <<Loading nltk:grammars/book_grammars/feat0.fcfg>>
228
+ >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
229
+ <<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
230
+
231
+ If you wish to load a resource from its source, bypassing the cache,
232
+ use the ``cache=False`` argument to `nltk.data.load()`. This can be
233
+ useful, for example, if the resource is loaded from a local file, and
234
+ you are actively editing that file:
235
+
236
+ >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',cache=False,verbose=True)
237
+ <<Loading nltk:grammars/book_grammars/feat0.fcfg>>
238
+
239
+ The cache *no longer* uses weak references. A resource will not be
240
+ automatically expunged from the cache when no more objects are using
241
+ it. In the following example, when we clear the variable ``feat0``,
242
+ the reference count for the feature grammar object drops to zero.
243
+ However, the object remains cached:
244
+
245
+ >>> del feat0
246
+ >>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',
247
+ ... verbose=True)
248
+ <<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
249
+
250
+ You can clear the entire contents of the cache, using
251
+ `nltk.data.clear_cache()`:
252
+
253
+ >>> nltk.data.clear_cache()
254
+
255
+ Retrieving other Data Sources
256
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
257
+ >>> formulas = nltk.data.load('grammars/book_grammars/background.fol')
258
+ >>> for f in formulas: print(str(f))
259
+ all x.(boxerdog(x) -> dog(x))
260
+ all x.(boxer(x) -> person(x))
261
+ all x.-(dog(x) & person(x))
262
+ all x.(married(x) <-> exists y.marry(x,y))
263
+ all x.(bark(x) -> dog(x))
264
+ all x y.(marry(x,y) -> (person(x) & person(y)))
265
+ -(Vincent = Mia)
266
+ -(Vincent = Fido)
267
+ -(Mia = Fido)
268
+
269
+ Regression Tests
270
+ ~~~~~~~~~~~~~~~~
271
+ Create a temp dir for tests that write files:
272
+
273
+ >>> import tempfile, os
274
+ >>> tempdir = tempfile.mkdtemp()
275
+ >>> old_dir = os.path.abspath('.')
276
+ >>> os.chdir(tempdir)
277
+
278
+ The `retrieve()` function accepts all url types:
279
+
280
+ >>> urls = ['https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg',
281
+ ... 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg'),
282
+ ... 'nltk:grammars/sample_grammars/toy.cfg',
283
+ ... 'grammars/sample_grammars/toy.cfg']
284
+ >>> for i, url in enumerate(urls):
285
+ ... nltk.data.retrieve(url, 'toy-%d.cfg' % i) # doctest: +ELLIPSIS
286
+ Retrieving 'https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg', saving to 'toy-0.cfg'
287
+ Retrieving 'file:...toy.cfg', saving to 'toy-1.cfg'
288
+ Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-2.cfg'
289
+ Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-3.cfg'
290
+
291
+ Clean up the temp dir:
292
+
293
+ >>> os.chdir(old_dir)
294
+ >>> for f in os.listdir(tempdir):
295
+ ... os.remove(os.path.join(tempdir, f))
296
+ >>> os.rmdir(tempdir)
297
+
298
+ Lazy Loader
299
+ -----------
300
+ A lazy loader is a wrapper object that defers loading a resource until
301
+ it is accessed or used in any way. This is mainly intended for
302
+ internal use by NLTK's corpus readers.
303
+
304
+ >>> # Create a lazy loader for toy.cfg.
305
+ >>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
306
+
307
+ >>> # Show that it's not loaded yet:
308
+ >>> object.__repr__(ll) # doctest: +ELLIPSIS
309
+ '<nltk.data.LazyLoader object at ...>'
310
+
311
+ >>> # printing it is enough to cause it to be loaded:
312
+ >>> print(ll)
313
+ <Grammar with 14 productions>
314
+
315
+ >>> # Show that it's now been loaded:
316
+ >>> object.__repr__(ll) # doctest: +ELLIPSIS
317
+ '<nltk.grammar.CFG object at ...>'
318
+
319
+
320
+ >>> # Test that accessing an attribute also loads it:
321
+ >>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
322
+ >>> ll.start()
323
+ S
324
+ >>> object.__repr__(ll) # doctest: +ELLIPSIS
325
+ '<nltk.grammar.CFG object at ...>'
326
+
327
+ Buffered Gzip Reading and Writing
328
+ ---------------------------------
329
+ Write performance to gzip-compressed is extremely poor when the files become large.
330
+ File creation can become a bottleneck in those cases.
331
+
332
+ Read performance from large gzipped pickle files was improved in data.py by
333
+ buffering the reads. A similar fix can be applied to writes by buffering
334
+ the writes to a StringIO object first.
335
+
336
+ This is mainly intended for internal use. The test simply tests that reading
337
+ and writing work as intended and does not test how much improvement buffering
338
+ provides.
339
+
340
+ >>> from nltk.compat import StringIO
341
+ >>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'wb', size=2**10)
342
+ >>> ans = []
343
+ >>> for i in range(10000):
344
+ ... ans.append(str(i).encode('ascii'))
345
+ ... test.write(str(i).encode('ascii'))
346
+ >>> test.close()
347
+ >>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'rb')
348
+ >>> test.read() == b''.join(ans)
349
+ True
350
+ >>> test.close()
351
+ >>> import os
352
+ >>> os.unlink('testbuf.gz')
353
+
354
+ JSON Encoding and Decoding
355
+ --------------------------
356
+ JSON serialization is used instead of pickle for some classes.
357
+
358
+ >>> from nltk import jsontags
359
+ >>> from nltk.jsontags import JSONTaggedEncoder, JSONTaggedDecoder, register_tag
360
+ >>> @jsontags.register_tag
361
+ ... class JSONSerializable:
362
+ ... json_tag = 'JSONSerializable'
363
+ ...
364
+ ... def __init__(self, n):
365
+ ... self.n = n
366
+ ...
367
+ ... def encode_json_obj(self):
368
+ ... return self.n
369
+ ...
370
+ ... @classmethod
371
+ ... def decode_json_obj(cls, obj):
372
+ ... n = obj
373
+ ... return cls(n)
374
+ ...
375
+ >>> JSONTaggedEncoder().encode(JSONSerializable(1))
376
+ '{"!JSONSerializable": 1}'
377
+ >>> JSONTaggedDecoder().decode('{"!JSONSerializable": 1}').n
378
+ 1
379
+