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,366 +1,366 @@
1
- # -*- coding: utf-8 -*-
2
- # Natural Language Toolkit: Transformation-based learning
3
- #
4
- # Copyright (C) 2001-2015 NLTK Project
5
- # Author: Marcus Uneson <marcus.uneson@gmail.com>
6
- # based on previous (nltk2) version by
7
- # Christopher Maloof, Edward Loper, Steven Bird
8
- # URL: <http://nltk.org/>
9
- # For license information, see LICENSE.TXT
10
-
11
- from __future__ import print_function, absolute_import, division
12
- import os
13
- import pickle
14
-
15
- import random
16
- import time
17
-
18
- from nltk.corpus import treebank
19
-
20
- from nltk.tbl import error_list, Template
21
- from nltk.tag.brill import Word, Pos
22
- from nltk.tag import BrillTaggerTrainer, RegexpTagger, UnigramTagger
23
-
24
- def demo():
25
- """
26
- Run a demo with defaults. See source comments for details,
27
- or docstrings of any of the more specific demo_* functions.
28
- """
29
- postag()
30
-
31
- def demo_repr_rule_format():
32
- """
33
- Exemplify repr(Rule) (see also str(Rule) and Rule.format("verbose"))
34
- """
35
- postag(ruleformat="repr")
36
-
37
- def demo_str_rule_format():
38
- """
39
- Exemplify repr(Rule) (see also str(Rule) and Rule.format("verbose"))
40
- """
41
- postag(ruleformat="str")
42
-
43
- def demo_verbose_rule_format():
44
- """
45
- Exemplify Rule.format("verbose")
46
- """
47
- postag(ruleformat="verbose")
48
-
49
- def demo_multiposition_feature():
50
- """
51
- The feature/s of a template takes a list of positions
52
- relative to the current word where the feature should be
53
- looked for, conceptually joined by logical OR. For instance,
54
- Pos([-1, 1]), given a value V, will hold whenever V is found
55
- one step to the left and/or one step to the right.
56
-
57
- For contiguous ranges, a 2-arg form giving inclusive end
58
- points can also be used: Pos(-3, -1) is the same as the arg
59
- below.
60
- """
61
- postag(templates=[Template(Pos([-3,-2,-1]))])
62
-
63
- def demo_multifeature_template():
64
- """
65
- Templates can have more than a single feature.
66
- """
67
- postag(templates=[Template(Word([0]), Pos([-2,-1]))])
68
-
69
- def demo_template_statistics():
70
- """
71
- Show aggregate statistics per template. Little used templates are
72
- candidates for deletion, much used templates may possibly be refined.
73
-
74
- Deleting unused templates is mostly about saving time and/or space:
75
- training is basically O(T) in the number of templates T
76
- (also in terms of memory usage, which often will be the limiting factor).
77
- """
78
- postag(incremental_stats=True, template_stats=True)
79
-
80
- def demo_generated_templates():
81
- """
82
- Template.expand and Feature.expand are class methods facilitating
83
- generating large amounts of templates. See their documentation for
84
- details.
85
-
86
- Note: training with 500 templates can easily fill all available
87
- even on relatively small corpora
88
- """
89
- wordtpls = Word.expand([-1,0,1], [1,2], excludezero=False)
90
- tagtpls = Pos.expand([-2,-1,0,1], [1,2], excludezero=True)
91
- templates = list(Template.expand([wordtpls, tagtpls], combinations=(1,3)))
92
- print("Generated {0} templates for transformation-based learning".format(len(templates)))
93
- postag(templates=templates, incremental_stats=True, template_stats=True)
94
-
95
- def demo_learning_curve():
96
- """
97
- Plot a learning curve -- the contribution on tagging accuracy of
98
- the individual rules.
99
- Note: requires matplotlib
100
- """
101
- postag(incremental_stats=True, separate_baseline_data=True, learning_curve_output="learningcurve.png")
102
-
103
- def demo_error_analysis():
104
- """
105
- Writes a file with context for each erroneous word after tagging testing data
106
- """
107
- postag(error_output="errors.txt")
108
-
109
- def demo_serialize_tagger():
110
- """
111
- Serializes the learned tagger to a file in pickle format; reloads it
112
- and validates the process.
113
- """
114
- postag(serialize_output="tagger.pcl")
115
-
116
- def demo_high_accuracy_rules():
117
- """
118
- Discard rules with low accuracy. This may hurt performance a bit,
119
- but will often produce rules which are more interesting read to a human.
120
- """
121
- postag(num_sents=3000, min_acc=0.96, min_score=10)
122
-
123
- def postag(
124
- templates=None,
125
- tagged_data=None,
126
- num_sents=1000,
127
- max_rules=300,
128
- min_score=3,
129
- min_acc=None,
130
- train=0.8,
131
- trace=3,
132
- randomize=False,
133
- ruleformat="str",
134
- incremental_stats=False,
135
- template_stats=False,
136
- error_output=None,
137
- serialize_output=None,
138
- learning_curve_output=None,
139
- learning_curve_take=300,
140
- baseline_backoff_tagger=None,
141
- separate_baseline_data=False,
142
- cache_baseline_tagger=None):
143
- """
144
- Brill Tagger Demonstration
145
- :param templates: how many sentences of training and testing data to use
146
- :type templates: list of Template
147
-
148
- :param tagged_data: maximum number of rule instances to create
149
- :type tagged_data: C{int}
150
-
151
- :param num_sents: how many sentences of training and testing data to use
152
- :type num_sents: C{int}
153
-
154
- :param max_rules: maximum number of rule instances to create
155
- :type max_rules: C{int}
156
-
157
- :param min_score: the minimum score for a rule in order for it to be considered
158
- :type min_score: C{int}
159
-
160
- :param min_acc: the minimum score for a rule in order for it to be considered
161
- :type min_acc: C{float}
162
-
163
- :param train: the fraction of the the corpus to be used for training (1=all)
164
- :type train: C{float}
165
-
166
- :param trace: the level of diagnostic tracing output to produce (0-4)
167
- :type trace: C{int}
168
-
169
- :param randomize: whether the training data should be a random subset of the corpus
170
- :type randomize: C{bool}
171
-
172
- :param ruleformat: rule output format, one of "str", "repr", "verbose"
173
- :type ruleformat: C{str}
174
-
175
- :param incremental_stats: if true, will tag incrementally and collect stats for each rule (rather slow)
176
- :type incremental_stats: C{bool}
177
-
178
- :param template_stats: if true, will print per-template statistics collected in training and (optionally) testing
179
- :type template_stats: C{bool}
180
-
181
- :param error_output: the file where errors will be saved
182
- :type error_output: C{string}
183
-
184
- :param serialize_output: the file where the learned tbl tagger will be saved
185
- :type serialize_output: C{string}
186
-
187
- :param learning_curve_output: filename of plot of learning curve(s) (train and also test, if available)
188
- :type learning_curve_output: C{string}
189
-
190
- :param learning_curve_take: how many rules plotted
191
- :type learning_curve_take: C{int}
192
-
193
- :param baseline_backoff_tagger: the file where rules will be saved
194
- :type baseline_backoff_tagger: tagger
195
-
196
- :param separate_baseline_data: use a fraction of the training data exclusively for training baseline
197
- :type separate_baseline_data: C{bool}
198
-
199
- :param cache_baseline_tagger: cache baseline tagger to this file (only interesting as a temporary workaround to get
200
- deterministic output from the baseline unigram tagger between python versions)
201
- :type cache_baseline_tagger: C{string}
202
-
203
-
204
- Note on separate_baseline_data: if True, reuse training data both for baseline and rule learner. This
205
- is fast and fine for a demo, but is likely to generalize worse on unseen data.
206
- Also cannot be sensibly used for learning curves on training data (the baseline will be artificially high).
207
- """
208
-
209
- # defaults
210
- baseline_backoff_tagger = baseline_backoff_tagger or REGEXP_TAGGER
211
- if templates is None:
212
- from nltk.tag.brill import describe_template_sets, brill24
213
- # some pre-built template sets taken from typical systems or publications are
214
- # available. Print a list with describe_template_sets()
215
- # for instance:
216
- templates = brill24()
217
- (training_data, baseline_data, gold_data, testing_data) = \
218
- _demo_prepare_data(tagged_data, train, num_sents, randomize, separate_baseline_data)
219
-
220
- # creating (or reloading from cache) a baseline tagger (unigram tagger)
221
- # this is just a mechanism for getting deterministic output from the baseline between
222
- # python versions
223
- if cache_baseline_tagger:
224
- if not os.path.exists(cache_baseline_tagger):
225
- baseline_tagger = UnigramTagger(baseline_data, backoff=baseline_backoff_tagger)
226
- with open(cache_baseline_tagger, 'w') as print_rules:
227
- pickle.dump(baseline_tagger, print_rules)
228
- print("Trained baseline tagger, pickled it to {0}".format(cache_baseline_tagger))
229
- with open(cache_baseline_tagger, "r") as print_rules:
230
- baseline_tagger= pickle.load(print_rules)
231
- print("Reloaded pickled tagger from {0}".format(cache_baseline_tagger))
232
- else:
233
- baseline_tagger = UnigramTagger(baseline_data, backoff=baseline_backoff_tagger)
234
- print("Trained baseline tagger")
235
- if gold_data:
236
- print(" Accuracy on test set: {0:0.4f}".format(baseline_tagger.evaluate(gold_data)))
237
-
238
- # creating a Brill tagger
239
- tbrill = time.time()
240
- trainer = BrillTaggerTrainer(baseline_tagger, templates, trace, ruleformat=ruleformat)
241
- print("Training tbl tagger...")
242
- brill_tagger = trainer.train(training_data, max_rules, min_score, min_acc)
243
- print("Trained tbl tagger in {0:0.2f} seconds".format(time.time() - tbrill))
244
- if gold_data:
245
- print(" Accuracy on test set: %.4f" % brill_tagger.evaluate(gold_data))
246
-
247
- # printing the learned rules, if learned silently
248
- if trace == 1:
249
- print("\nLearned rules: ")
250
- for (ruleno, rule) in enumerate(brill_tagger.rules(),1):
251
- print("{0:4d} {1:s}".format(ruleno, rule.format(ruleformat)))
252
-
253
-
254
- # printing template statistics (optionally including comparison with the training data)
255
- # note: if not separate_baseline_data, then baseline accuracy will be artificially high
256
- if incremental_stats:
257
- print("Incrementally tagging the test data, collecting individual rule statistics")
258
- (taggedtest, teststats) = brill_tagger.batch_tag_incremental(testing_data, gold_data)
259
- print(" Rule statistics collected")
260
- if not separate_baseline_data:
261
- print("WARNING: train_stats asked for separate_baseline_data=True; the baseline "
262
- "will be artificially high")
263
- trainstats = brill_tagger.train_stats()
264
- if template_stats:
265
- brill_tagger.print_template_statistics(teststats)
266
- if learning_curve_output:
267
- _demo_plot(learning_curve_output, teststats, trainstats, take=learning_curve_take)
268
- print("Wrote plot of learning curve to {0}".format(learning_curve_output))
269
- else:
270
- print("Tagging the test data")
271
- taggedtest = brill_tagger.tag_sents(testing_data)
272
- if template_stats:
273
- brill_tagger.print_template_statistics()
274
-
275
- # writing error analysis to file
276
- if error_output is not None:
277
- with open(error_output, 'w') as f:
278
- f.write('Errors for Brill Tagger %r\n\n' % serialize_output)
279
- f.write(u'\n'.join(error_list(gold_data, taggedtest)).encode('utf-8') + '\n')
280
- print("Wrote tagger errors including context to {0}".format(error_output))
281
-
282
- # serializing the tagger to a pickle file and reloading (just to see it works)
283
- if serialize_output is not None:
284
- taggedtest = brill_tagger.tag_sents(testing_data)
285
- with open(serialize_output, 'w') as print_rules:
286
- pickle.dump(brill_tagger, print_rules)
287
- print("Wrote pickled tagger to {0}".format(serialize_output))
288
- with open(serialize_output, "r") as print_rules:
289
- brill_tagger_reloaded = pickle.load(print_rules)
290
- print("Reloaded pickled tagger from {0}".format(serialize_output))
291
- taggedtest_reloaded = brill_tagger.tag_sents(testing_data)
292
- if taggedtest == taggedtest_reloaded:
293
- print("Reloaded tagger tried on test set, results identical")
294
- else:
295
- print("PROBLEM: Reloaded tagger gave different results on test set")
296
-
297
- def _demo_prepare_data(tagged_data, train, num_sents, randomize, separate_baseline_data):
298
- # train is the proportion of data used in training; the rest is reserved
299
- # for testing.
300
- if tagged_data is None:
301
- print("Loading tagged data from treebank... ")
302
- tagged_data = treebank.tagged_sents()
303
- if num_sents is None or len(tagged_data) <= num_sents:
304
- num_sents = len(tagged_data)
305
- if randomize:
306
- random.seed(len(tagged_data))
307
- random.shuffle(tagged_data)
308
- cutoff = int(num_sents * train)
309
- training_data = tagged_data[:cutoff]
310
- gold_data = tagged_data[cutoff:num_sents]
311
- testing_data = [[t[0] for t in sent] for sent in gold_data]
312
- if not separate_baseline_data:
313
- baseline_data = training_data
314
- else:
315
- bl_cutoff = len(training_data) // 3
316
- (baseline_data, training_data) = (training_data[:bl_cutoff], training_data[bl_cutoff:])
317
- (trainseqs, traintokens) = corpus_size(training_data)
318
- (testseqs, testtokens) = corpus_size(testing_data)
319
- (bltrainseqs, bltraintokens) = corpus_size(baseline_data)
320
- print("Read testing data ({0:d} sents/{1:d} wds)".format(testseqs, testtokens))
321
- print("Read training data ({0:d} sents/{1:d} wds)".format(trainseqs, traintokens))
322
- print("Read baseline data ({0:d} sents/{1:d} wds) {2:s}".format(
323
- bltrainseqs, bltraintokens, "" if separate_baseline_data else "[reused the training set]"))
324
- return (training_data, baseline_data, gold_data, testing_data)
325
-
326
-
327
- def _demo_plot(learning_curve_output, teststats, trainstats=None, take=None):
328
- testcurve = [teststats['initialerrors']]
329
- for rulescore in teststats['rulescores']:
330
- testcurve.append(testcurve[-1] - rulescore)
331
- testcurve = [1 - x/teststats['tokencount'] for x in testcurve[:take]]
332
-
333
- traincurve = [trainstats['initialerrors']]
334
- for rulescore in trainstats['rulescores']:
335
- traincurve.append(traincurve[-1] - rulescore)
336
- traincurve = [1 - x/trainstats['tokencount'] for x in traincurve[:take]]
337
-
338
- import matplotlib.pyplot as plt
339
- r = list(range(len(testcurve)))
340
- plt.plot(r, testcurve, r, traincurve)
341
- plt.axis([None, None, None, 1.0])
342
- plt.savefig(learning_curve_output)
343
-
344
-
345
- NN_CD_TAGGER = RegexpTagger(
346
- [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'),
347
- (r'.*', 'NN')])
348
-
349
- REGEXP_TAGGER = RegexpTagger(
350
- [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'), # cardinal numbers
351
- (r'(The|the|A|a|An|an)$', 'AT'), # articles
352
- (r'.*able$', 'JJ'), # adjectives
353
- (r'.*ness$', 'NN'), # nouns formed from adjectives
354
- (r'.*ly$', 'RB'), # adverbs
355
- (r'.*s$', 'NNS'), # plural nouns
356
- (r'.*ing$', 'VBG'), # gerunds
357
- (r'.*ed$', 'VBD'), # past tense verbs
358
- (r'.*', 'NN') # nouns (default)
359
- ])
360
-
361
-
362
- def corpus_size(seqs):
363
- return (len(seqs), sum(len(x) for x in seqs))
364
-
365
- if __name__ == '__main__':
366
- demo_learning_curve()
1
+ # -*- coding: utf-8 -*-
2
+ # Natural Language Toolkit: Transformation-based learning
3
+ #
4
+ # Copyright (C) 2001-2018 NLTK Project
5
+ # Author: Marcus Uneson <marcus.uneson@gmail.com>
6
+ # based on previous (nltk2) version by
7
+ # Christopher Maloof, Edward Loper, Steven Bird
8
+ # URL: <http://nltk.org/>
9
+ # For license information, see LICENSE.TXT
10
+
11
+ from __future__ import print_function, absolute_import, division
12
+ import os
13
+ import pickle
14
+
15
+ import random
16
+ import time
17
+
18
+ from nltk.corpus import treebank
19
+
20
+ from nltk.tbl import error_list, Template
21
+ from nltk.tag.brill import Word, Pos
22
+ from nltk.tag import BrillTaggerTrainer, RegexpTagger, UnigramTagger
23
+
24
+ def demo():
25
+ """
26
+ Run a demo with defaults. See source comments for details,
27
+ or docstrings of any of the more specific demo_* functions.
28
+ """
29
+ postag()
30
+
31
+ def demo_repr_rule_format():
32
+ """
33
+ Exemplify repr(Rule) (see also str(Rule) and Rule.format("verbose"))
34
+ """
35
+ postag(ruleformat="repr")
36
+
37
+ def demo_str_rule_format():
38
+ """
39
+ Exemplify repr(Rule) (see also str(Rule) and Rule.format("verbose"))
40
+ """
41
+ postag(ruleformat="str")
42
+
43
+ def demo_verbose_rule_format():
44
+ """
45
+ Exemplify Rule.format("verbose")
46
+ """
47
+ postag(ruleformat="verbose")
48
+
49
+ def demo_multiposition_feature():
50
+ """
51
+ The feature/s of a template takes a list of positions
52
+ relative to the current word where the feature should be
53
+ looked for, conceptually joined by logical OR. For instance,
54
+ Pos([-1, 1]), given a value V, will hold whenever V is found
55
+ one step to the left and/or one step to the right.
56
+
57
+ For contiguous ranges, a 2-arg form giving inclusive end
58
+ points can also be used: Pos(-3, -1) is the same as the arg
59
+ below.
60
+ """
61
+ postag(templates=[Template(Pos([-3,-2,-1]))])
62
+
63
+ def demo_multifeature_template():
64
+ """
65
+ Templates can have more than a single feature.
66
+ """
67
+ postag(templates=[Template(Word([0]), Pos([-2,-1]))])
68
+
69
+ def demo_template_statistics():
70
+ """
71
+ Show aggregate statistics per template. Little used templates are
72
+ candidates for deletion, much used templates may possibly be refined.
73
+
74
+ Deleting unused templates is mostly about saving time and/or space:
75
+ training is basically O(T) in the number of templates T
76
+ (also in terms of memory usage, which often will be the limiting factor).
77
+ """
78
+ postag(incremental_stats=True, template_stats=True)
79
+
80
+ def demo_generated_templates():
81
+ """
82
+ Template.expand and Feature.expand are class methods facilitating
83
+ generating large amounts of templates. See their documentation for
84
+ details.
85
+
86
+ Note: training with 500 templates can easily fill all available
87
+ even on relatively small corpora
88
+ """
89
+ wordtpls = Word.expand([-1,0,1], [1,2], excludezero=False)
90
+ tagtpls = Pos.expand([-2,-1,0,1], [1,2], excludezero=True)
91
+ templates = list(Template.expand([wordtpls, tagtpls], combinations=(1,3)))
92
+ print("Generated {0} templates for transformation-based learning".format(len(templates)))
93
+ postag(templates=templates, incremental_stats=True, template_stats=True)
94
+
95
+ def demo_learning_curve():
96
+ """
97
+ Plot a learning curve -- the contribution on tagging accuracy of
98
+ the individual rules.
99
+ Note: requires matplotlib
100
+ """
101
+ postag(incremental_stats=True, separate_baseline_data=True, learning_curve_output="learningcurve.png")
102
+
103
+ def demo_error_analysis():
104
+ """
105
+ Writes a file with context for each erroneous word after tagging testing data
106
+ """
107
+ postag(error_output="errors.txt")
108
+
109
+ def demo_serialize_tagger():
110
+ """
111
+ Serializes the learned tagger to a file in pickle format; reloads it
112
+ and validates the process.
113
+ """
114
+ postag(serialize_output="tagger.pcl")
115
+
116
+ def demo_high_accuracy_rules():
117
+ """
118
+ Discard rules with low accuracy. This may hurt performance a bit,
119
+ but will often produce rules which are more interesting read to a human.
120
+ """
121
+ postag(num_sents=3000, min_acc=0.96, min_score=10)
122
+
123
+ def postag(
124
+ templates=None,
125
+ tagged_data=None,
126
+ num_sents=1000,
127
+ max_rules=300,
128
+ min_score=3,
129
+ min_acc=None,
130
+ train=0.8,
131
+ trace=3,
132
+ randomize=False,
133
+ ruleformat="str",
134
+ incremental_stats=False,
135
+ template_stats=False,
136
+ error_output=None,
137
+ serialize_output=None,
138
+ learning_curve_output=None,
139
+ learning_curve_take=300,
140
+ baseline_backoff_tagger=None,
141
+ separate_baseline_data=False,
142
+ cache_baseline_tagger=None):
143
+ """
144
+ Brill Tagger Demonstration
145
+ :param templates: how many sentences of training and testing data to use
146
+ :type templates: list of Template
147
+
148
+ :param tagged_data: maximum number of rule instances to create
149
+ :type tagged_data: C{int}
150
+
151
+ :param num_sents: how many sentences of training and testing data to use
152
+ :type num_sents: C{int}
153
+
154
+ :param max_rules: maximum number of rule instances to create
155
+ :type max_rules: C{int}
156
+
157
+ :param min_score: the minimum score for a rule in order for it to be considered
158
+ :type min_score: C{int}
159
+
160
+ :param min_acc: the minimum score for a rule in order for it to be considered
161
+ :type min_acc: C{float}
162
+
163
+ :param train: the fraction of the the corpus to be used for training (1=all)
164
+ :type train: C{float}
165
+
166
+ :param trace: the level of diagnostic tracing output to produce (0-4)
167
+ :type trace: C{int}
168
+
169
+ :param randomize: whether the training data should be a random subset of the corpus
170
+ :type randomize: C{bool}
171
+
172
+ :param ruleformat: rule output format, one of "str", "repr", "verbose"
173
+ :type ruleformat: C{str}
174
+
175
+ :param incremental_stats: if true, will tag incrementally and collect stats for each rule (rather slow)
176
+ :type incremental_stats: C{bool}
177
+
178
+ :param template_stats: if true, will print per-template statistics collected in training and (optionally) testing
179
+ :type template_stats: C{bool}
180
+
181
+ :param error_output: the file where errors will be saved
182
+ :type error_output: C{string}
183
+
184
+ :param serialize_output: the file where the learned tbl tagger will be saved
185
+ :type serialize_output: C{string}
186
+
187
+ :param learning_curve_output: filename of plot of learning curve(s) (train and also test, if available)
188
+ :type learning_curve_output: C{string}
189
+
190
+ :param learning_curve_take: how many rules plotted
191
+ :type learning_curve_take: C{int}
192
+
193
+ :param baseline_backoff_tagger: the file where rules will be saved
194
+ :type baseline_backoff_tagger: tagger
195
+
196
+ :param separate_baseline_data: use a fraction of the training data exclusively for training baseline
197
+ :type separate_baseline_data: C{bool}
198
+
199
+ :param cache_baseline_tagger: cache baseline tagger to this file (only interesting as a temporary workaround to get
200
+ deterministic output from the baseline unigram tagger between python versions)
201
+ :type cache_baseline_tagger: C{string}
202
+
203
+
204
+ Note on separate_baseline_data: if True, reuse training data both for baseline and rule learner. This
205
+ is fast and fine for a demo, but is likely to generalize worse on unseen data.
206
+ Also cannot be sensibly used for learning curves on training data (the baseline will be artificially high).
207
+ """
208
+
209
+ # defaults
210
+ baseline_backoff_tagger = baseline_backoff_tagger or REGEXP_TAGGER
211
+ if templates is None:
212
+ from nltk.tag.brill import describe_template_sets, brill24
213
+ # some pre-built template sets taken from typical systems or publications are
214
+ # available. Print a list with describe_template_sets()
215
+ # for instance:
216
+ templates = brill24()
217
+ (training_data, baseline_data, gold_data, testing_data) = \
218
+ _demo_prepare_data(tagged_data, train, num_sents, randomize, separate_baseline_data)
219
+
220
+ # creating (or reloading from cache) a baseline tagger (unigram tagger)
221
+ # this is just a mechanism for getting deterministic output from the baseline between
222
+ # python versions
223
+ if cache_baseline_tagger:
224
+ if not os.path.exists(cache_baseline_tagger):
225
+ baseline_tagger = UnigramTagger(baseline_data, backoff=baseline_backoff_tagger)
226
+ with open(cache_baseline_tagger, 'w') as print_rules:
227
+ pickle.dump(baseline_tagger, print_rules)
228
+ print("Trained baseline tagger, pickled it to {0}".format(cache_baseline_tagger))
229
+ with open(cache_baseline_tagger, "r") as print_rules:
230
+ baseline_tagger= pickle.load(print_rules)
231
+ print("Reloaded pickled tagger from {0}".format(cache_baseline_tagger))
232
+ else:
233
+ baseline_tagger = UnigramTagger(baseline_data, backoff=baseline_backoff_tagger)
234
+ print("Trained baseline tagger")
235
+ if gold_data:
236
+ print(" Accuracy on test set: {0:0.4f}".format(baseline_tagger.evaluate(gold_data)))
237
+
238
+ # creating a Brill tagger
239
+ tbrill = time.time()
240
+ trainer = BrillTaggerTrainer(baseline_tagger, templates, trace, ruleformat=ruleformat)
241
+ print("Training tbl tagger...")
242
+ brill_tagger = trainer.train(training_data, max_rules, min_score, min_acc)
243
+ print("Trained tbl tagger in {0:0.2f} seconds".format(time.time() - tbrill))
244
+ if gold_data:
245
+ print(" Accuracy on test set: %.4f" % brill_tagger.evaluate(gold_data))
246
+
247
+ # printing the learned rules, if learned silently
248
+ if trace == 1:
249
+ print("\nLearned rules: ")
250
+ for (ruleno, rule) in enumerate(brill_tagger.rules(),1):
251
+ print("{0:4d} {1:s}".format(ruleno, rule.format(ruleformat)))
252
+
253
+
254
+ # printing template statistics (optionally including comparison with the training data)
255
+ # note: if not separate_baseline_data, then baseline accuracy will be artificially high
256
+ if incremental_stats:
257
+ print("Incrementally tagging the test data, collecting individual rule statistics")
258
+ (taggedtest, teststats) = brill_tagger.batch_tag_incremental(testing_data, gold_data)
259
+ print(" Rule statistics collected")
260
+ if not separate_baseline_data:
261
+ print("WARNING: train_stats asked for separate_baseline_data=True; the baseline "
262
+ "will be artificially high")
263
+ trainstats = brill_tagger.train_stats()
264
+ if template_stats:
265
+ brill_tagger.print_template_statistics(teststats)
266
+ if learning_curve_output:
267
+ _demo_plot(learning_curve_output, teststats, trainstats, take=learning_curve_take)
268
+ print("Wrote plot of learning curve to {0}".format(learning_curve_output))
269
+ else:
270
+ print("Tagging the test data")
271
+ taggedtest = brill_tagger.tag_sents(testing_data)
272
+ if template_stats:
273
+ brill_tagger.print_template_statistics()
274
+
275
+ # writing error analysis to file
276
+ if error_output is not None:
277
+ with open(error_output, 'w') as f:
278
+ f.write('Errors for Brill Tagger %r\n\n' % serialize_output)
279
+ f.write(u'\n'.join(error_list(gold_data, taggedtest)).encode('utf-8') + '\n')
280
+ print("Wrote tagger errors including context to {0}".format(error_output))
281
+
282
+ # serializing the tagger to a pickle file and reloading (just to see it works)
283
+ if serialize_output is not None:
284
+ taggedtest = brill_tagger.tag_sents(testing_data)
285
+ with open(serialize_output, 'w') as print_rules:
286
+ pickle.dump(brill_tagger, print_rules)
287
+ print("Wrote pickled tagger to {0}".format(serialize_output))
288
+ with open(serialize_output, "r") as print_rules:
289
+ brill_tagger_reloaded = pickle.load(print_rules)
290
+ print("Reloaded pickled tagger from {0}".format(serialize_output))
291
+ taggedtest_reloaded = brill_tagger.tag_sents(testing_data)
292
+ if taggedtest == taggedtest_reloaded:
293
+ print("Reloaded tagger tried on test set, results identical")
294
+ else:
295
+ print("PROBLEM: Reloaded tagger gave different results on test set")
296
+
297
+ def _demo_prepare_data(tagged_data, train, num_sents, randomize, separate_baseline_data):
298
+ # train is the proportion of data used in training; the rest is reserved
299
+ # for testing.
300
+ if tagged_data is None:
301
+ print("Loading tagged data from treebank... ")
302
+ tagged_data = treebank.tagged_sents()
303
+ if num_sents is None or len(tagged_data) <= num_sents:
304
+ num_sents = len(tagged_data)
305
+ if randomize:
306
+ random.seed(len(tagged_data))
307
+ random.shuffle(tagged_data)
308
+ cutoff = int(num_sents * train)
309
+ training_data = tagged_data[:cutoff]
310
+ gold_data = tagged_data[cutoff:num_sents]
311
+ testing_data = [[t[0] for t in sent] for sent in gold_data]
312
+ if not separate_baseline_data:
313
+ baseline_data = training_data
314
+ else:
315
+ bl_cutoff = len(training_data) // 3
316
+ (baseline_data, training_data) = (training_data[:bl_cutoff], training_data[bl_cutoff:])
317
+ (trainseqs, traintokens) = corpus_size(training_data)
318
+ (testseqs, testtokens) = corpus_size(testing_data)
319
+ (bltrainseqs, bltraintokens) = corpus_size(baseline_data)
320
+ print("Read testing data ({0:d} sents/{1:d} wds)".format(testseqs, testtokens))
321
+ print("Read training data ({0:d} sents/{1:d} wds)".format(trainseqs, traintokens))
322
+ print("Read baseline data ({0:d} sents/{1:d} wds) {2:s}".format(
323
+ bltrainseqs, bltraintokens, "" if separate_baseline_data else "[reused the training set]"))
324
+ return (training_data, baseline_data, gold_data, testing_data)
325
+
326
+
327
+ def _demo_plot(learning_curve_output, teststats, trainstats=None, take=None):
328
+ testcurve = [teststats['initialerrors']]
329
+ for rulescore in teststats['rulescores']:
330
+ testcurve.append(testcurve[-1] - rulescore)
331
+ testcurve = [1 - x/teststats['tokencount'] for x in testcurve[:take]]
332
+
333
+ traincurve = [trainstats['initialerrors']]
334
+ for rulescore in trainstats['rulescores']:
335
+ traincurve.append(traincurve[-1] - rulescore)
336
+ traincurve = [1 - x/trainstats['tokencount'] for x in traincurve[:take]]
337
+
338
+ import matplotlib.pyplot as plt
339
+ r = list(range(len(testcurve)))
340
+ plt.plot(r, testcurve, r, traincurve)
341
+ plt.axis([None, None, None, 1.0])
342
+ plt.savefig(learning_curve_output)
343
+
344
+
345
+ NN_CD_TAGGER = RegexpTagger(
346
+ [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'),
347
+ (r'.*', 'NN')])
348
+
349
+ REGEXP_TAGGER = RegexpTagger(
350
+ [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'), # cardinal numbers
351
+ (r'(The|the|A|a|An|an)$', 'AT'), # articles
352
+ (r'.*able$', 'JJ'), # adjectives
353
+ (r'.*ness$', 'NN'), # nouns formed from adjectives
354
+ (r'.*ly$', 'RB'), # adverbs
355
+ (r'.*s$', 'NNS'), # plural nouns
356
+ (r'.*ing$', 'VBG'), # gerunds
357
+ (r'.*ed$', 'VBD'), # past tense verbs
358
+ (r'.*', 'NN') # nouns (default)
359
+ ])
360
+
361
+
362
+ def corpus_size(seqs):
363
+ return (len(seqs), sum(len(x) for x in seqs))
364
+
365
+ if __name__ == '__main__':
366
+ demo_learning_curve()