nltk 3.2.1__zip → 3.3__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. {nltk-3.2.1 → nltk-3.3}/LICENSE.txt +1 -1
  2. {nltk-3.2.1/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
  3. nltk-3.3/README.md +49 -0
  4. nltk-3.3/nltk/VERSION +1 -0
  5. {nltk-3.2.1 → nltk-3.3}/nltk/__init__.py +3 -3
  6. {nltk-3.2.1 → nltk-3.3}/nltk/app/__init__.py +2 -3
  7. {nltk-3.2.1 → nltk-3.3}/nltk/app/chartparser_app.py +92 -92
  8. {nltk-3.2.1 → nltk-3.3}/nltk/app/chunkparser_app.py +11 -13
  9. {nltk-3.2.1 → nltk-3.3}/nltk/app/collocations_app.py +8 -11
  10. {nltk-3.2.1 → nltk-3.3}/nltk/app/concordance_app.py +9 -11
  11. {nltk-3.2.1 → nltk-3.3}/nltk/app/nemo_app.py +18 -17
  12. {nltk-3.2.1 → nltk-3.3}/nltk/app/rdparser_app.py +10 -12
  13. {nltk-3.2.1 → nltk-3.3}/nltk/app/srparser_app.py +16 -16
  14. {nltk-3.2.1 → nltk-3.3}/nltk/app/wordfreq_app.py +1 -1
  15. {nltk-3.2.1 → nltk-3.3}/nltk/app/wordnet_app.py +11 -11
  16. {nltk-3.2.1 → nltk-3.3}/nltk/book.py +2 -1
  17. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/__init__.py +1 -1
  18. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/api.py +67 -47
  19. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/chart.py +7 -5
  20. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/combinator.py +42 -11
  21. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/lexicon.py +1 -1
  22. {nltk-3.2.1 → nltk-3.3}/nltk/ccg/logic.py +1 -1
  23. {nltk-3.2.1 → nltk-3.3}/nltk/chat/__init__.py +1 -1
  24. {nltk-3.2.1 → nltk-3.3}/nltk/chat/eliza.py +1 -1
  25. {nltk-3.2.1 → nltk-3.3}/nltk/chat/iesha.py +1 -1
  26. {nltk-3.2.1 → nltk-3.3}/nltk/chat/rude.py +1 -1
  27. {nltk-3.2.1 → nltk-3.3}/nltk/chat/suntsu.py +1 -1
  28. {nltk-3.2.1 → nltk-3.3}/nltk/chat/util.py +12 -10
  29. {nltk-3.2.1 → nltk-3.3}/nltk/chat/zen.py +1 -1
  30. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/__init__.py +1 -1
  31. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/api.py +1 -1
  32. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/named_entity.py +13 -13
  33. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/regexp.py +9 -3
  34. {nltk-3.2.1 → nltk-3.3}/nltk/chunk/util.py +12 -12
  35. {nltk-3.2.1 → nltk-3.3}/nltk/classify/__init__.py +1 -1
  36. {nltk-3.2.1 → nltk-3.3}/nltk/classify/api.py +1 -1
  37. {nltk-3.2.1 → nltk-3.3}/nltk/classify/decisiontree.py +18 -18
  38. {nltk-3.2.1 → nltk-3.3}/nltk/classify/maxent.py +26 -8
  39. {nltk-3.2.1 → nltk-3.3}/nltk/classify/megam.py +5 -4
  40. {nltk-3.2.1 → nltk-3.3}/nltk/classify/naivebayes.py +29 -26
  41. {nltk-3.2.1 → nltk-3.3}/nltk/classify/rte_classify.py +58 -89
  42. {nltk-3.2.1 → nltk-3.3}/nltk/classify/scikitlearn.py +4 -2
  43. {nltk-3.2.1 → nltk-3.3}/nltk/classify/senna.py +24 -22
  44. {nltk-3.2.1 → nltk-3.3}/nltk/classify/svm.py +1 -1
  45. {nltk-3.2.1 → nltk-3.3}/nltk/classify/tadm.py +4 -3
  46. {nltk-3.2.1 → nltk-3.3}/nltk/classify/textcat.py +1 -1
  47. {nltk-3.2.1 → nltk-3.3}/nltk/classify/util.py +13 -1
  48. {nltk-3.2.1 → nltk-3.3}/nltk/classify/weka.py +7 -6
  49. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/__init__.py +1 -1
  50. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/api.py +9 -5
  51. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/em.py +1 -1
  52. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/gaac.py +3 -3
  53. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/kmeans.py +1 -1
  54. {nltk-3.2.1 → nltk-3.3}/nltk/cluster/util.py +35 -20
  55. nltk-3.3/nltk/collections.py +640 -0
  56. {nltk-3.2.1 → nltk-3.3}/nltk/collocations.py +2 -2
  57. nltk-3.3/nltk/compat.py +365 -0
  58. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/__init__.py +37 -16
  59. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/europarl_raw.py +1 -1
  60. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/__init__.py +4 -2
  61. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/aligned.py +4 -3
  62. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/api.py +12 -10
  63. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bnc.py +1 -1
  64. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +1 -1
  65. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +4 -3
  66. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chasen.py +5 -4
  67. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/childes.py +8 -9
  68. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chunked.py +4 -4
  69. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/cmudict.py +4 -2
  70. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +4 -2
  71. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/conll.py +19 -12
  72. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/crubadan.py +2 -2
  73. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/dependency.py +1 -1
  74. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/framenet.py +1085 -119
  75. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ieer.py +4 -3
  76. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/indian.py +4 -5
  77. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ipipan.py +6 -5
  78. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/knbc.py +2 -2
  79. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/lin.py +1 -1
  80. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/mte.py +5 -4
  81. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nkjp.py +4 -3
  82. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nombank.py +8 -8
  83. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +1 -1
  84. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +3 -3
  85. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +1 -1
  86. nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
  87. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/plaintext.py +3 -4
  88. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ppattach.py +4 -3
  89. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/propbank.py +8 -10
  90. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +5 -3
  91. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/reviews.py +3 -1
  92. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/rte.py +5 -7
  93. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/semcor.py +1 -1
  94. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/senseval.py +4 -2
  95. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +3 -3
  96. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +1 -1
  97. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/string_category.py +4 -3
  98. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/switchboard.py +1 -1
  99. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/tagged.py +4 -3
  100. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/timit.py +10 -8
  101. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/toolbox.py +4 -4
  102. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/twitter.py +4 -6
  103. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/util.py +7 -3
  104. nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
  105. nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
  106. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/wordnet.py +357 -285
  107. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +10 -5
  108. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ycoe.py +25 -24
  109. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/util.py +22 -5
  110. {nltk-3.2.1 → nltk-3.3}/nltk/data.py +65 -29
  111. {nltk-3.2.1 → nltk-3.3}/nltk/decorators.py +5 -1
  112. {nltk-3.2.1 → nltk-3.3}/nltk/downloader.py +59 -55
  113. {nltk-3.2.1 → nltk-3.3}/nltk/draw/__init__.py +4 -4
  114. {nltk-3.2.1 → nltk-3.3}/nltk/draw/cfg.py +5 -8
  115. {nltk-3.2.1 → nltk-3.3}/nltk/draw/dispersion.py +1 -1
  116. {nltk-3.2.1 → nltk-3.3}/nltk/draw/table.py +4 -4
  117. {nltk-3.2.1 → nltk-3.3}/nltk/draw/tree.py +2 -5
  118. {nltk-3.2.1 → nltk-3.3}/nltk/draw/util.py +17 -17
  119. {nltk-3.2.1 → nltk-3.3}/nltk/featstruct.py +290 -173
  120. {nltk-3.2.1 → nltk-3.3}/nltk/grammar.py +87 -44
  121. {nltk-3.2.1 → nltk-3.3}/nltk/help.py +1 -1
  122. {nltk-3.2.1 → nltk-3.3}/nltk/inference/__init__.py +1 -1
  123. {nltk-3.2.1 → nltk-3.3}/nltk/inference/api.py +27 -19
  124. {nltk-3.2.1 → nltk-3.3}/nltk/inference/discourse.py +20 -16
  125. {nltk-3.2.1 → nltk-3.3}/nltk/inference/nonmonotonic.py +1 -1
  126. {nltk-3.2.1 → nltk-3.3}/nltk/inference/prover9.py +1 -1
  127. {nltk-3.2.1 → nltk-3.3}/nltk/inference/resolution.py +1 -1
  128. {nltk-3.2.1 → nltk-3.3}/nltk/inference/tableau.py +1 -1
  129. {nltk-3.2.1 → nltk-3.3}/nltk/internals.py +44 -44
  130. {nltk-3.2.1 → nltk-3.3}/nltk/jsontags.py +1 -1
  131. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/__init__.py +2 -1
  132. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/agreement.py +29 -9
  133. nltk-3.3/nltk/metrics/aline.py +607 -0
  134. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/association.py +8 -4
  135. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/confusionmatrix.py +1 -1
  136. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/distance.py +12 -7
  137. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/paice.py +1 -1
  138. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/scores.py +7 -7
  139. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/segmentation.py +4 -5
  140. {nltk-3.2.1 → nltk-3.3}/nltk/metrics/spearman.py +1 -1
  141. {nltk-3.2.1 → nltk-3.3}/nltk/misc/__init__.py +1 -1
  142. {nltk-3.2.1 → nltk-3.3}/nltk/misc/chomsky.py +4 -2
  143. {nltk-3.2.1 → nltk-3.3}/nltk/misc/minimalset.py +1 -1
  144. {nltk-3.2.1 → nltk-3.3}/nltk/misc/sort.py +1 -1
  145. {nltk-3.2.1 → nltk-3.3}/nltk/misc/wordfinder.py +1 -1
  146. {nltk-3.2.1 → nltk-3.3}/nltk/parse/__init__.py +2 -1
  147. {nltk-3.2.1 → nltk-3.3}/nltk/parse/api.py +1 -1
  148. {nltk-3.2.1 → nltk-3.3}/nltk/parse/bllip.py +1 -1
  149. {nltk-3.2.1 → nltk-3.3}/nltk/parse/chart.py +8 -7
  150. nltk-3.3/nltk/parse/corenlp.py +780 -0
  151. {nltk-3.2.1 → nltk-3.3}/nltk/parse/dependencygraph.py +4 -2
  152. {nltk-3.2.1 → nltk-3.3}/nltk/parse/earleychart.py +4 -3
  153. {nltk-3.2.1 → nltk-3.3}/nltk/parse/evaluate.py +1 -1
  154. {nltk-3.2.1 → nltk-3.3}/nltk/parse/featurechart.py +6 -4
  155. {nltk-3.2.1 → nltk-3.3}/nltk/parse/generate.py +15 -4
  156. {nltk-3.2.1 → nltk-3.3}/nltk/parse/malt.py +2 -2
  157. {nltk-3.2.1 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +3 -3
  158. {nltk-3.2.1 → nltk-3.3}/nltk/parse/pchart.py +1 -1
  159. {nltk-3.2.1 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +6 -5
  160. {nltk-3.2.1 → nltk-3.3}/nltk/parse/recursivedescent.py +2 -3
  161. {nltk-3.2.1 → nltk-3.3}/nltk/parse/shiftreduce.py +2 -3
  162. {nltk-3.2.1 → nltk-3.3}/nltk/parse/stanford.py +53 -28
  163. {nltk-3.2.1 → nltk-3.3}/nltk/parse/transitionparser.py +11 -9
  164. {nltk-3.2.1 → nltk-3.3}/nltk/parse/util.py +1 -1
  165. {nltk-3.2.1 → nltk-3.3}/nltk/parse/viterbi.py +1 -1
  166. {nltk-3.2.1 → nltk-3.3}/nltk/probability.py +75 -20
  167. {nltk-3.2.1 → nltk-3.3}/nltk/sem/__init__.py +1 -1
  168. {nltk-3.2.1 → nltk-3.3}/nltk/sem/boxer.py +15 -15
  169. {nltk-3.2.1 → nltk-3.3}/nltk/sem/chat80.py +6 -6
  170. {nltk-3.2.1 → nltk-3.3}/nltk/sem/cooper_storage.py +1 -1
  171. {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt.py +9 -8
  172. {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt_glue_demo.py +5 -9
  173. {nltk-3.2.1 → nltk-3.3}/nltk/sem/evaluate.py +9 -3
  174. {nltk-3.2.1 → nltk-3.3}/nltk/sem/glue.py +8 -6
  175. {nltk-3.2.1 → nltk-3.3}/nltk/sem/hole.py +4 -2
  176. {nltk-3.2.1 → nltk-3.3}/nltk/sem/lfg.py +4 -2
  177. {nltk-3.2.1 → nltk-3.3}/nltk/sem/linearlogic.py +4 -2
  178. {nltk-3.2.1 → nltk-3.3}/nltk/sem/logic.py +14 -14
  179. {nltk-3.2.1 → nltk-3.3}/nltk/sem/relextract.py +11 -18
  180. {nltk-3.2.1 → nltk-3.3}/nltk/sem/skolemize.py +1 -1
  181. {nltk-3.2.1 → nltk-3.3}/nltk/sem/util.py +1 -1
  182. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/__init__.py +1 -1
  183. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +1 -1
  184. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/util.py +14 -4
  185. {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/vader.py +41 -42
  186. {nltk-3.2.1 → nltk-3.3}/nltk/stem/__init__.py +1 -3
  187. {nltk-3.2.1 → nltk-3.3}/nltk/stem/api.py +7 -4
  188. nltk-3.3/nltk/stem/arlstem.py +369 -0
  189. {nltk-3.2.1 → nltk-3.3}/nltk/stem/isri.py +1 -1
  190. {nltk-3.2.1 → nltk-3.3}/nltk/stem/lancaster.py +39 -12
  191. nltk-3.3/nltk/stem/porter.py +710 -0
  192. {nltk-3.2.1 → nltk-3.3}/nltk/stem/regexp.py +2 -2
  193. {nltk-3.2.1 → nltk-3.3}/nltk/stem/rslp.py +1 -1
  194. {nltk-3.2.1 → nltk-3.3}/nltk/stem/snowball.py +537 -13
  195. {nltk-3.2.1 → nltk-3.3}/nltk/stem/util.py +11 -1
  196. {nltk-3.2.1 → nltk-3.3}/nltk/stem/wordnet.py +1 -1
  197. {nltk-3.2.1 → nltk-3.3}/nltk/tag/__init__.py +32 -7
  198. {nltk-3.2.1 → nltk-3.3}/nltk/tag/api.py +13 -8
  199. {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill.py +4 -6
  200. {nltk-3.2.1 → nltk-3.3}/nltk/tag/crf.py +1 -1
  201. {nltk-3.2.1 → nltk-3.3}/nltk/tag/hmm.py +11 -11
  202. {nltk-3.2.1 → nltk-3.3}/nltk/tag/hunpos.py +4 -4
  203. {nltk-3.2.1 → nltk-3.3}/nltk/tag/mapping.py +1 -1
  204. {nltk-3.2.1 → nltk-3.3}/nltk/tag/perceptron.py +25 -10
  205. {nltk-3.2.1 → nltk-3.3}/nltk/tag/senna.py +25 -23
  206. {nltk-3.2.1 → nltk-3.3}/nltk/tag/sequential.py +19 -15
  207. {nltk-3.2.1 → nltk-3.3}/nltk/tag/stanford.py +59 -36
  208. {nltk-3.2.1 → nltk-3.3}/nltk/tag/tnt.py +11 -20
  209. {nltk-3.2.1 → nltk-3.3}/nltk/tag/util.py +1 -1
  210. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/__init__.py +1 -1
  211. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/demo.py +1 -1
  212. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/erroranalysis.py +1 -1
  213. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/feature.py +5 -7
  214. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/rule.py +6 -6
  215. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/template.py +18 -23
  216. {nltk-3.2.1 → nltk-3.3}/nltk/test/__init__.py +1 -1
  217. {nltk-3.2.1 → nltk-3.3}/nltk/test/all.py +7 -6
  218. {nltk-3.2.1 → nltk-3.3}/nltk/test/bnc.doctest +1 -1
  219. {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg.doctest +1 -1
  220. {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg_semantics.doctest +1 -1
  221. {nltk-3.2.1 → nltk-3.3}/nltk/test/chat80.doctest +1 -1
  222. {nltk-3.2.1 → nltk-3.3}/nltk/test/childes_fixt.py +1 -0
  223. {nltk-3.2.1 → nltk-3.3}/nltk/test/chunk.doctest +1 -1
  224. {nltk-3.2.1 → nltk-3.3}/nltk/test/classify.doctest +1 -1
  225. {nltk-3.2.1 → nltk-3.3}/nltk/test/classify_fixt.py +2 -1
  226. nltk-3.3/nltk/test/collections.doctest +20 -0
  227. {nltk-3.2.1 → nltk-3.3}/nltk/test/collocations.doctest +1 -1
  228. {nltk-3.2.1 → nltk-3.3}/nltk/test/compat.doctest +0 -4
  229. {nltk-3.2.1 → nltk-3.3}/nltk/test/compat_fixt.py +1 -0
  230. nltk-3.3/nltk/test/concordance.doctest +55 -0
  231. {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus.doctest +38 -49
  232. {nltk-3.2.1 → nltk-3.3}/nltk/test/crubadan.doctest +1 -1
  233. {nltk-3.2.1 → nltk-3.3}/nltk/test/data.doctest +1 -1
  234. {nltk-3.2.1 → nltk-3.3}/nltk/test/dependency.doctest +1 -1
  235. {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse.doctest +1 -1
  236. {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse_fixt.py +1 -0
  237. {nltk-3.2.1 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +8 -5
  238. {nltk-3.2.1 → nltk-3.3}/nltk/test/drt.doctest +1 -1
  239. {nltk-3.2.1 → nltk-3.3}/nltk/test/featgram.doctest +1 -1
  240. {nltk-3.2.1 → nltk-3.3}/nltk/test/featstruct.doctest +2 -3
  241. {nltk-3.2.1 → nltk-3.3}/nltk/test/framenet.doctest +82 -33
  242. {nltk-3.2.1 → nltk-3.3}/nltk/test/generate.doctest +1 -1
  243. {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim.doctest +6 -7
  244. {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim_fixt.py +1 -0
  245. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics.doctest +13 -15
  246. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +1 -1
  247. {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +1 -0
  248. {nltk-3.2.1 → nltk-3.3}/nltk/test/grammar.doctest +1 -1
  249. {nltk-3.2.1 → nltk-3.3}/nltk/test/grammartestsuites.doctest +1 -1
  250. {nltk-3.2.1 → nltk-3.3}/nltk/test/index.doctest +1 -1
  251. {nltk-3.2.1 → nltk-3.3}/nltk/test/inference.doctest +1 -1
  252. {nltk-3.2.1 → nltk-3.3}/nltk/test/inference_fixt.py +1 -0
  253. {nltk-3.2.1 → nltk-3.3}/nltk/test/internals.doctest +1 -1
  254. {nltk-3.2.1 → nltk-3.3}/nltk/test/japanese.doctest +1 -1
  255. {nltk-3.2.1 → nltk-3.3}/nltk/test/logic.doctest +1 -1
  256. {nltk-3.2.1 → nltk-3.3}/nltk/test/metrics.doctest +3 -3
  257. {nltk-3.2.1 → nltk-3.3}/nltk/test/misc.doctest +1 -1
  258. {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic.doctest +1 -1
  259. {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +1 -0
  260. {nltk-3.2.1 → nltk-3.3}/nltk/test/parse.doctest +1 -1
  261. {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en.doctest +1 -1
  262. {nltk-3.2.1 → nltk-3.3}/nltk/test/probability.doctest +1 -1
  263. {nltk-3.2.1 → nltk-3.3}/nltk/test/probability_fixt.py +2 -1
  264. {nltk-3.2.1 → nltk-3.3}/nltk/test/propbank.doctest +1 -1
  265. {nltk-3.2.1 → nltk-3.3}/nltk/test/relextract.doctest +1 -1
  266. {nltk-3.2.1 → nltk-3.3}/nltk/test/resolution.doctest +1 -1
  267. {nltk-3.2.1 → nltk-3.3}/nltk/test/runtests.py +35 -13
  268. {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics.doctest +1 -1
  269. {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiment.doctest +3 -3
  270. {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiwordnet.doctest +1 -1
  271. {nltk-3.2.1 → nltk-3.3}/nltk/test/simple.doctest +1 -1
  272. {nltk-3.2.1 → nltk-3.3}/nltk/test/stem.doctest +2 -2
  273. {nltk-3.2.1 → nltk-3.3}/nltk/test/tag.doctest +1 -1
  274. {nltk-3.2.1 → nltk-3.3}/nltk/test/tokenize.doctest +109 -2
  275. {nltk-3.2.1 → nltk-3.3}/nltk/test/toolbox.doctest +1 -1
  276. {nltk-3.2.1 → nltk-3.3}/nltk/test/translate.doctest +1 -1
  277. {nltk-3.2.1 → nltk-3.3}/nltk/test/tree.doctest +1 -1
  278. {nltk-3.2.1 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +1 -1
  279. {nltk-3.2.1 → nltk-3.3}/nltk/test/treetransforms.doctest +1 -1
  280. nltk-3.3/nltk/test/unit/test_aline.py +52 -0
  281. nltk-3.3/nltk/test/unit/test_chunk.py +56 -0
  282. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_classify.py +20 -18
  283. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_collocations.py +16 -7
  284. nltk-3.3/nltk/test/unit/test_concordance.py +98 -0
  285. nltk-3.3/nltk/test/unit/test_corenlp.py +1000 -0
  286. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_corpora.py +18 -1
  287. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +4 -3
  288. nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
  289. nltk-3.3/nltk/test/unit/test_senna.py +74 -0
  290. nltk-3.3/nltk/test/unit/test_stem.py +121 -0
  291. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_tgrep.py +4 -2
  292. nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
  293. nltk-3.3/nltk/test/unit/test_wordnet.py +134 -0
  294. nltk-3.3/nltk/test/unit/translate/test_bleu.py +244 -0
  295. nltk-3.3/nltk/test/unit/translate/test_gdfa.py +57 -0
  296. nltk-3.3/nltk/test/unit/translate/test_nist.py +37 -0
  297. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +1 -1
  298. {nltk-3.2.1 → nltk-3.3}/nltk/test/util.doctest +1 -1
  299. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet.doctest +17 -3
  300. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_fixt.py +1 -0
  301. {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_lch.doctest +1 -1
  302. {nltk-3.2.1 → nltk-3.3}/nltk/test/wsd.doctest +1 -1
  303. {nltk-3.2.1 → nltk-3.3}/nltk/text.py +92 -39
  304. {nltk-3.2.1 → nltk-3.3}/nltk/tgrep.py +8 -7
  305. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/__init__.py +37 -15
  306. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/api.py +3 -4
  307. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/casual.py +10 -9
  308. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/mwe.py +2 -2
  309. nltk-3.3/nltk/tokenize/nist.py +173 -0
  310. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/punkt.py +186 -167
  311. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/regexp.py +13 -7
  312. nltk-3.3/nltk/tokenize/repp.py +151 -0
  313. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/sexpr.py +4 -6
  314. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/simple.py +7 -5
  315. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/stanford.py +18 -14
  316. nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
  317. {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/texttiling.py +43 -45
  318. nltk-3.3/nltk/tokenize/toktok.py +155 -0
  319. nltk-3.3/nltk/tokenize/treebank.py +363 -0
  320. nltk-3.3/nltk/tokenize/util.py +261 -0
  321. {nltk-3.2.1 → nltk-3.3}/nltk/toolbox.py +4 -2
  322. {nltk-3.2.1 → nltk-3.3}/nltk/translate/__init__.py +1 -1
  323. {nltk-3.2.1 → nltk-3.3}/nltk/translate/api.py +50 -40
  324. {nltk-3.2.1 → nltk-3.3}/nltk/translate/bleu_score.py +221 -156
  325. nltk-3.3/nltk/translate/chrf_score.py +137 -0
  326. {nltk-3.2.1 → nltk-3.3}/nltk/translate/gale_church.py +32 -19
  327. {nltk-3.2.1 → nltk-3.3}/nltk/translate/gdfa.py +14 -10
  328. nltk-3.3/nltk/translate/gleu_score.py +193 -0
  329. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm1.py +17 -8
  330. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm2.py +4 -4
  331. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm4.py +1 -1
  332. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm5.py +1 -1
  333. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm_model.py +4 -1
  334. {nltk-3.2.1 → nltk-3.3}/nltk/translate/metrics.py +1 -1
  335. nltk-3.3/nltk/translate/nist_score.py +178 -0
  336. {nltk-3.2.1 → nltk-3.3}/nltk/translate/phrase_based.py +1 -1
  337. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ribes_score.py +1 -1
  338. {nltk-3.2.1 → nltk-3.3}/nltk/translate/stack_decoder.py +5 -1
  339. {nltk-3.2.1 → nltk-3.3}/nltk/tree.py +10 -8
  340. {nltk-3.2.1 → nltk-3.3}/nltk/treeprettyprinter.py +6 -6
  341. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/__init__.py +1 -1
  342. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/api.py +8 -3
  343. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/common.py +9 -3
  344. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitter_demo.py +1 -1
  345. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitterclient.py +1 -1
  346. {nltk-3.2.1 → nltk-3.3}/nltk/twitter/util.py +5 -4
  347. {nltk-3.2.1 → nltk-3.3}/nltk/util.py +41 -654
  348. {nltk-3.2.1 → nltk-3.3}/nltk/wsd.py +2 -2
  349. {nltk-3.2.1 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
  350. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/SOURCES.txt +23 -1
  351. nltk-3.3/nltk.egg-info/requires.txt +31 -0
  352. {nltk-3.2.1 → nltk-3.3}/setup.cfg +0 -1
  353. {nltk-3.2.1 → nltk-3.3}/setup.py +32 -5
  354. nltk-3.2.1/nltk/VERSION +0 -1
  355. nltk-3.2.1/nltk/compat.py +0 -706
  356. nltk-3.2.1/nltk/corpus/reader/pl196x.py +0 -278
  357. nltk-3.2.1/nltk/corpus/reader/verbnet.py +0 -408
  358. nltk-3.2.1/nltk/corpus/reader/wordlist.py +0 -37
  359. nltk-3.2.1/nltk/six.py +0 -868
  360. nltk-3.2.1/nltk/stem/porter.py +0 -692
  361. nltk-3.2.1/nltk/test/unit/test_stem.py +0 -36
  362. nltk-3.2.1/nltk/test/unit/test_tokenize.py +0 -23
  363. nltk-3.2.1/nltk/test/unit/translate/test_bleu.py +0 -138
  364. nltk-3.2.1/nltk/tokenize/stanford_segmenter.py +0 -157
  365. nltk-3.2.1/nltk/tokenize/treebank.py +0 -124
  366. nltk-3.2.1/nltk/tokenize/util.py +0 -90
  367. {nltk-3.2.1 → nltk-3.3}/INSTALL.txt +0 -0
  368. {nltk-3.2.1 → nltk-3.3}/MANIFEST.in +0 -0
  369. {nltk-3.2.1 → nltk-3.3}/nltk/classify/positivenaivebayes.py +0 -0
  370. {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/udhr.py +0 -0
  371. {nltk-3.2.1 → nltk-3.3}/nltk/inference/mace.py +0 -0
  372. {nltk-3.2.1 → nltk-3.3}/nltk/lazyimport.py +0 -0
  373. {nltk-3.2.1 → nltk-3.3}/nltk/misc/babelfish.py +0 -0
  374. {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill_trainer.py +0 -0
  375. {nltk-3.2.1 → nltk-3.3}/nltk/tbl/api.py +0 -0
  376. {nltk-3.2.1 → nltk-3.3}/nltk/test/bleu.doctest +0 -0
  377. {nltk-3.2.1 → nltk-3.3}/nltk/test/childes.doctest +0 -0
  378. {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus_fixt.py +0 -0
  379. {nltk-3.2.1 → nltk-3.3}/nltk/test/paice.doctest +0 -0
  380. {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +0 -0
  381. {nltk-3.2.1 → nltk-3.3}/nltk/test/segmentation_fixt.py +0 -0
  382. {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics_fixt.py +0 -0
  383. {nltk-3.2.1 → nltk-3.3}/nltk/test/translate_fixt.py +0 -0
  384. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
  385. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_2x_compat.py +0 -0
  386. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +0 -0
  387. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_hmm.py +0 -0
  388. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +0 -0
  389. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +0 -0
  390. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_tag.py +0 -0
  391. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +0 -0
  392. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
  393. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +0 -0
  394. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +0 -0
  395. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +0 -0
  396. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +0 -0
  397. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +0 -0
  398. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +0 -0
  399. {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/utils.py +0 -0
  400. {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm3.py +0 -0
  401. {nltk-3.2.1 → nltk-3.3}/nltk/treetransforms.py +0 -0
  402. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
  403. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
  404. {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Taggers
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Edward Loper <edloper@gmail.com>
6
6
  # Steven Bird <stevenbird1@gmail.com> (minor additions)
7
7
  # URL: <http://nltk.org/>
@@ -19,13 +19,20 @@ the word ``'fly'`` with a noun part of speech tag (``'NN'``):
19
19
 
20
20
  >>> tagged_tok = ('fly', 'NN')
21
21
 
22
- An off-the-shelf tagger is available. It uses the Penn Treebank tagset:
22
+ An off-the-shelf tagger is available for English. It uses the Penn Treebank tagset:
23
23
 
24
24
  >>> from nltk import pos_tag, word_tokenize
25
25
  >>> pos_tag(word_tokenize("John's big idea isn't all that bad."))
26
26
  [('John', 'NNP'), ("'s", 'POS'), ('big', 'JJ'), ('idea', 'NN'), ('is', 'VBZ'),
27
27
  ("n't", 'RB'), ('all', 'PDT'), ('that', 'DT'), ('bad', 'JJ'), ('.', '.')]
28
28
 
29
+ A Russian tagger is also available if you specify lang="rus". It uses
30
+ the Russian National Corpus tagset:
31
+
32
+ >>> pos_tag(word_tokenize("Илья оторопел и дважды перечитал бумажку."), lang='rus') # doctest: +SKIP
33
+ [('Илья', 'S'), ('оторопел', 'V'), ('и', 'CONJ'), ('дважды', 'ADV'), ('перечитал', 'V'),
34
+ ('бумажку', 'S'), ('.', 'NONLEX')]
35
+
29
36
  This package defines several taggers, which take a list of tokens,
30
37
  assign a tag to each one, and return the resulting list of tagged tokens.
31
38
  Most of the taggers are built automatically based on a training corpus.
@@ -76,7 +83,20 @@ from nltk.tag.mapping import tagset_mapping, map_tag
76
83
  from nltk.tag.crf import CRFTagger
77
84
  from nltk.tag.perceptron import PerceptronTagger
78
85
 
79
- from nltk.data import load
86
+ from nltk.data import load, find
87
+
88
+ RUS_PICKLE = 'taggers/averaged_perceptron_tagger_ru/averaged_perceptron_tagger_ru.pickle'
89
+
90
+
91
+ def _get_tagger(lang=None):
92
+ if lang == 'rus':
93
+ tagger = PerceptronTagger(False)
94
+ ap_russian_model_loc = 'file:' + str(find(RUS_PICKLE))
95
+ tagger.load(ap_russian_model_loc)
96
+ else:
97
+ tagger = PerceptronTagger()
98
+ return tagger
99
+
80
100
 
81
101
  def _pos_tag(tokens, tagset, tagger):
82
102
  tagged_tokens = tagger.tag(tokens)
@@ -84,7 +104,8 @@ def _pos_tag(tokens, tagset, tagger):
84
104
  tagged_tokens = [(token, map_tag('en-ptb', tagset, tag)) for (token, tag) in tagged_tokens]
85
105
  return tagged_tokens
86
106
 
87
- def pos_tag(tokens, tagset=None):
107
+
108
+ def pos_tag(tokens, tagset=None, lang='eng'):
88
109
  """
89
110
  Use NLTK's currently recommended part of speech tagger to
90
111
  tag the given list of tokens.
@@ -104,14 +125,16 @@ def pos_tag(tokens, tagset=None):
104
125
  :type tokens: list(str)
105
126
  :param tagset: the tagset to be used, e.g. universal, wsj, brown
106
127
  :type tagset: str
128
+ :param lang: the ISO 639 code of the language, e.g. 'eng' for English, 'rus' for Russian
129
+ :type lang: str
107
130
  :return: The tagged tokens
108
131
  :rtype: list(tuple(str, str))
109
132
  """
110
- tagger = PerceptronTagger()
133
+ tagger = _get_tagger(lang)
111
134
  return _pos_tag(tokens, tagset, tagger)
112
135
 
113
136
 
114
- def pos_tag_sents(sentences, tagset=None):
137
+ def pos_tag_sents(sentences, tagset=None, lang='eng'):
115
138
  """
116
139
  Use NLTK's currently recommended part of speech tagger to tag the
117
140
  given list of sentences, each consisting of a list of tokens.
@@ -120,8 +143,10 @@ def pos_tag_sents(sentences, tagset=None):
120
143
  :type tokens: list(list(str))
121
144
  :param tagset: the tagset to be used, e.g. universal, wsj, brown
122
145
  :type tagset: str
146
+ :param lang: the ISO 639 code of the language, e.g. 'eng' for English, 'rus' for Russian
147
+ :type lang: str
123
148
  :return: The list of tagged sentences
124
149
  :rtype: list(list(tuple(str, str)))
125
150
  """
126
- tagger = PerceptronTagger()
151
+ tagger = _get_tagger(lang)
127
152
  return [_pos_tag(sent, tagset, tagger) for sent in sentences]
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit: Tagger Interface
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Author: Edward Loper <edloper@gmail.com>
5
5
  # Steven Bird <stevenbird1@gmail.com> (minor additions)
6
6
  # URL: <http://nltk.org/>
@@ -10,11 +10,17 @@
10
10
  Interface for tagging each token in a sentence with supplementary
11
11
  information, such as its part of speech.
12
12
  """
13
+ from abc import ABCMeta, abstractmethod
14
+ from six import add_metaclass
15
+ from itertools import chain
16
+
13
17
  from nltk.internals import overridden
14
18
  from nltk.metrics import accuracy
15
19
 
16
20
  from nltk.tag.util import untag
17
21
 
22
+
23
+ @add_metaclass(ABCMeta)
18
24
  class TaggerI(object):
19
25
  """
20
26
  A processing interface for assigning a tag to each token in a list.
@@ -29,6 +35,7 @@ class TaggerI(object):
29
35
  Subclasses must define:
30
36
  - either ``tag()`` or ``tag_sents()`` (or both)
31
37
  """
38
+ @abstractmethod
32
39
  def tag(self, tokens):
33
40
  """
34
41
  Determine the most appropriate tag sequence for the given
@@ -39,8 +46,6 @@ class TaggerI(object):
39
46
  """
40
47
  if overridden(self.tag_sents):
41
48
  return self.tag_sents([tokens])[0]
42
- else:
43
- raise NotImplementedError()
44
49
 
45
50
  def tag_sents(self, sentences):
46
51
  """
@@ -62,13 +67,15 @@ class TaggerI(object):
62
67
  """
63
68
 
64
69
  tagged_sents = self.tag_sents(untag(sent) for sent in gold)
65
- gold_tokens = sum(gold, [])
66
- test_tokens = sum(tagged_sents, [])
70
+ gold_tokens = list(chain(*gold))
71
+ test_tokens = list(chain(*tagged_sents))
67
72
  return accuracy(gold_tokens, test_tokens)
68
73
 
69
74
  def _check_params(self, train, model):
70
75
  if (train and model) or (not train and not model):
71
- raise ValueError('Must specify either training data or trained model.')
76
+ raise ValueError(
77
+ 'Must specify either training data or trained model.')
78
+
72
79
 
73
80
  class FeaturesetTaggerI(TaggerI):
74
81
  """
@@ -77,5 +84,3 @@ class FeaturesetTaggerI(TaggerI):
77
84
  values. See ``nltk.classify`` for more information about features
78
85
  and featuresets.
79
86
  """
80
-
81
-
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Transformation-based learning
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Marcus Uneson <marcus.uneson@gmail.com>
6
6
  # based on previous (nltk2) version by
7
7
  # Christopher Maloof, Edward Loper, Steven Bird
@@ -10,9 +10,8 @@
10
10
 
11
11
  from __future__ import print_function, division
12
12
 
13
- from collections import defaultdict
13
+ from collections import defaultdict, Counter
14
14
 
15
- from nltk.compat import Counter
16
15
  from nltk.tag import TaggerI
17
16
  from nltk.tbl import Feature, Template
18
17
  from nltk import jsontags
@@ -376,8 +375,9 @@ class BrillTagger(TaggerI):
376
375
  usedtpls = set([int(tid) for tid in tids])
377
376
  unused = [(tid, tpl) for (tid, tpl) in enumerate(Template.ALLTEMPLATES) if tid not in usedtpls]
378
377
  print("UNUSED TEMPLATES ({0})".format(len(unused)))
378
+
379
379
  for (tid, tpl) in unused:
380
- print("{0:03d} {1:s}".format(tid, tpl))
380
+ print("{0:03d} {1:s}".format(tid, str(tpl)))
381
381
 
382
382
  if test_stats is None:
383
383
  print_train_stats()
@@ -422,5 +422,3 @@ class BrillTagger(TaggerI):
422
422
  testing_stats['finalerrors'] = errors[-1]
423
423
  testing_stats['finalacc'] = 1 - testing_stats['finalerrors']/testing_stats['tokencount']
424
424
  return (tagged_tokenses, testing_stats)
425
-
426
-
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Interface to the CRFSuite Tagger
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Long Duong <longdt219@gmail.com>
6
6
  # URL: <http://nltk.org/>
7
7
  # For license information, see LICENSE.TXT
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit: Hidden Markov Model
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Author: Trevor Cohn <tacohn@csse.unimelb.edu.au>
5
5
  # Philip Blunsom <pcbl@csse.unimelb.edu.au>
6
6
  # Tiago Tresoldi <tiago@tresoldi.pro.br> (fixes)
@@ -73,6 +73,8 @@ from __future__ import print_function, unicode_literals, division
73
73
  import re
74
74
  import itertools
75
75
 
76
+ from six.moves import map, zip
77
+
76
78
  try:
77
79
  import numpy as np
78
80
  except ImportError:
@@ -85,7 +87,7 @@ from nltk.probability import (FreqDist, ConditionalFreqDist,
85
87
  MLEProbDist, RandomProbDist)
86
88
  from nltk.metrics import accuracy
87
89
  from nltk.util import LazyMap, unique_list
88
- from nltk.compat import python_2_unicode_compatible, izip, imap
90
+ from nltk.compat import python_2_unicode_compatible
89
91
  from nltk.tag.api import TaggerI
90
92
 
91
93
 
@@ -269,7 +271,7 @@ class HiddenMarkovModelTagger(TaggerI):
269
271
 
270
272
  def _tag(self, unlabeled_sequence):
271
273
  path = self._best_path(unlabeled_sequence)
272
- return list(izip(unlabeled_sequence, path))
274
+ return list(zip(unlabeled_sequence, path))
273
275
 
274
276
  def _output_logprob(self, state, symbol):
275
277
  """
@@ -778,10 +780,10 @@ class HiddenMarkovModelTagger(TaggerI):
778
780
  return list(itertools.chain(*seq))
779
781
 
780
782
  test_sequence = self._transform(test_sequence)
781
- predicted_sequence = list(imap(self._tag, imap(words, test_sequence)))
783
+ predicted_sequence = list(map(self._tag, map(words, test_sequence)))
782
784
 
783
785
  if verbose:
784
- for test_sent, predicted_sent in izip(test_sequence, predicted_sequence):
786
+ for test_sent, predicted_sent in zip(test_sequence, predicted_sequence):
785
787
  print('Test:',
786
788
  ' '.join('%s/%s' % (token, tag)
787
789
  for (token, tag) in test_sent))
@@ -799,8 +801,8 @@ class HiddenMarkovModelTagger(TaggerI):
799
801
  print()
800
802
  print('-' * 60)
801
803
 
802
- test_tags = flatten(imap(tags, test_sequence))
803
- predicted_tags = flatten(imap(tags, predicted_sequence))
804
+ test_tags = flatten(map(tags, test_sequence))
805
+ predicted_tags = flatten(map(tags, predicted_sequence))
804
806
 
805
807
  acc = accuracy(test_tags, predicted_tags)
806
808
  count = sum(len(sent) for sent in test_sequence)
@@ -840,9 +842,11 @@ class HiddenMarkovModelTrainer(object):
840
842
  :rtype: HiddenMarkovModelTagger
841
843
  :param labelled_sequences: the supervised training data, a set of
842
844
  labelled sequences of observations
845
+ ex: [ (word_1, tag_1),...,(word_n,tag_n) ]
843
846
  :type labelled_sequences: list
844
847
  :param unlabeled_sequences: the unsupervised training data, a set of
845
848
  sequences of observations
849
+ ex: [ word_1, ..., word_n ]
846
850
  :type unlabeled_sequences: list
847
851
  :param kwargs: additional arguments to pass to the training methods
848
852
  """
@@ -1271,7 +1275,3 @@ def demo_bw():
1271
1275
  trainer = HiddenMarkovModelTrainer(states, symbols)
1272
1276
  hmm = trainer.train_unsupervised(training, model=model,
1273
1277
  max_iterations=1000)
1274
-
1275
-
1276
-
1277
-
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Interface to the HunPos POS-tagger
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Peter Ljunglöf <peter.ljunglof@heatherleaf.se>
6
6
  # Dávid Márk Nemeskey <nemeskeyd@gmail.com> (modifications)
7
7
  # Attila Zséder <zseder@gmail.com> (modifications)
@@ -15,9 +15,10 @@ A module for interfacing with the HunPos open-source POS-tagger.
15
15
  import os
16
16
  from subprocess import Popen, PIPE
17
17
 
18
+ from six import text_type
19
+
18
20
  from nltk.internals import find_binary, find_file
19
21
  from nltk.tag.api import TaggerI
20
- from nltk import compat
21
22
 
22
23
  _hunpos_url = 'http://code.google.com/p/hunpos/'
23
24
 
@@ -105,7 +106,7 @@ class HunposTagger(TaggerI):
105
106
  """
106
107
  for token in tokens:
107
108
  assert "\n" not in token, "Tokens should not contain newlines"
108
- if isinstance(token, compat.text_type):
109
+ if isinstance(token, text_type):
109
110
  token = token.encode(self._encoding)
110
111
  self._hunpos.stdin.write(token + b"\n")
111
112
  # We write a final empty line to tell hunpos that the sentence is finished:
@@ -129,4 +130,3 @@ def setup_module(module):
129
130
  HunposTagger('en_wsj.model')
130
131
  except LookupError:
131
132
  raise SkipTest("HunposTagger is not available")
132
-
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit: Tagset Mapping
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Author: Nathan Schneider <nathan@cmu.edu>
5
5
  # Steven Bird <stevenbird1@gmail.com>
6
6
  # URL: <http://nltk.org/>
@@ -28,7 +28,7 @@ class AveragedPerceptron(object):
28
28
  '''An averaged perceptron, as implemented by Matthew Honnibal.
29
29
 
30
30
  See more implementation details here:
31
- http://spacy.io/blog/part-of-speech-POS-tagger-in-python/
31
+ https://explosion.ai/blog/part-of-speech-pos-tagger-in-python
32
32
  '''
33
33
 
34
34
  def __init__(self):
@@ -101,7 +101,7 @@ class PerceptronTagger(TaggerI):
101
101
  '''
102
102
  Greedy Averaged Perceptron tagger, as implemented by Matthew Honnibal.
103
103
  See more implementation details here:
104
- http://spacy.io/blog/part-of-speech-POS-tagger-in-python/
104
+ https://explosion.ai/blog/part-of-speech-pos-tagger-in-python
105
105
 
106
106
  >>> from nltk.tag.perceptron import PerceptronTagger
107
107
 
@@ -165,18 +165,26 @@ class PerceptronTagger(TaggerI):
165
165
  '''Train a model from sentences, and save it at ``save_loc``. ``nr_iter``
166
166
  controls the number of Perceptron training iterations.
167
167
 
168
- :param sentences: A list of (words, tags) tuples.
168
+ :param sentences: A list or iterator of sentences, where each sentence
169
+ is a list of (words, tags) tuples.
169
170
  :param save_loc: If not ``None``, saves a pickled model in this location.
170
171
  :param nr_iter: Number of training iterations.
171
172
  '''
173
+ # We'd like to allow ``sentences`` to be either a list or an iterator,
174
+ # the latter being especially important for a large training dataset.
175
+ # Because ``self._make_tagdict(sentences)`` runs regardless, we make
176
+ # it populate ``self._sentences`` (a list) with all the sentences.
177
+ # This saves the overheard of just iterating through ``sentences`` to
178
+ # get the list by ``sentences = list(sentences)``.
179
+
180
+ self._sentences = list() # to be populated by self._make_tagdict...
172
181
  self._make_tagdict(sentences)
173
182
  self.model.classes = self.classes
174
183
  for iter_ in range(nr_iter):
175
184
  c = 0
176
185
  n = 0
177
- for sentence in sentences:
178
- words = [word for word,tag in sentence]
179
- tags = [tag for word,tag in sentence]
186
+ for sentence in self._sentences:
187
+ words, tags = zip(*sentence)
180
188
 
181
189
  prev, prev2 = self.START
182
190
  context = self.START + [self.normalize(w) for w in words] \
@@ -191,13 +199,19 @@ class PerceptronTagger(TaggerI):
191
199
  prev = guess
192
200
  c += guess == tags[i]
193
201
  n += 1
194
- random.shuffle(sentences)
202
+ random.shuffle(self._sentences)
195
203
  logging.info("Iter {0}: {1}/{2}={3}".format(iter_, c, n, _pc(c, n)))
204
+
205
+ # We don't need the training sentences anymore, and we don't want to
206
+ # waste space on them when we pickle the trained tagger.
207
+ self._sentences = None
208
+
196
209
  self.model.average_weights()
197
210
  # Pickle as a binary file
198
211
  if save_loc is not None:
199
212
  with open(save_loc, 'wb') as fout:
200
- pickle.dump((self.model.weights, self.tagdict, self.classes), fout, -1)
213
+ # changed protocol from -1 to 2 to make pickling Python 2 compatible
214
+ pickle.dump((self.model.weights, self.tagdict, self.classes), fout, 2)
201
215
 
202
216
 
203
217
  def load(self, loc):
@@ -214,7 +228,7 @@ class PerceptronTagger(TaggerI):
214
228
  '''
215
229
  Normalization used in pre-processing.
216
230
  - All words are lower cased
217
- - Digits in the range 1800-2100 are represented as !YEAR;
231
+ - Groups of digits of length 4 are represented as !YEAR;
218
232
  - Other digits are represented as !DIGITS
219
233
 
220
234
  :rtype: str
@@ -230,7 +244,7 @@ class PerceptronTagger(TaggerI):
230
244
 
231
245
  def _get_features(self, i, word, context, prev, prev2):
232
246
  '''Map tokens into a feature representation, implemented as a
233
- {hashable: float} dict. If the features change, a new model must be
247
+ {hashable: int} dict. If the features change, a new model must be
234
248
  trained.
235
249
  '''
236
250
  def add(name, *args):
@@ -262,6 +276,7 @@ class PerceptronTagger(TaggerI):
262
276
  '''
263
277
  counts = defaultdict(lambda: defaultdict(int))
264
278
  for sentence in sentences:
279
+ self._sentences.append(sentence)
265
280
  for word, tag in sentence:
266
281
  counts[word][tag] += 1
267
282
  self.classes.add(tag)
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  # Natural Language Toolkit: Senna POS Tagger
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Rami Al-Rfou' <ralrfou@cs.stonybrook.edu>
6
6
  # URL: <http://nltk.org/>
7
7
  # For license information, see LICENSE.TXT
@@ -10,29 +10,31 @@
10
10
  Senna POS tagger, NER Tagger, Chunk Tagger
11
11
 
12
12
  The input is:
13
- - path to the directory that contains SENNA executables. If the path is incorrect,
14
- SennaTagger will automatically search for executable file specified in SENNA environment variable
13
+ - path to the directory that contains SENNA executables. If the path is incorrect,
14
+ SennaTagger will automatically search for executable file specified in SENNA environment variable
15
15
  - (optionally) the encoding of the input data (default:utf-8)
16
16
 
17
+ Note: Unit tests for this module can be found in test/unit/test_senna.py
18
+
17
19
  >>> from nltk.tag import SennaTagger
18
- >>> tagger = SennaTagger('/usr/share/senna-v2.0')
19
- >>> tagger.tag('What is the airspeed of an unladen swallow ?'.split())
20
+ >>> tagger = SennaTagger('/usr/share/senna-v3.0')
21
+ >>> tagger.tag('What is the airspeed of an unladen swallow ?'.split()) # doctest: +SKIP
20
22
  [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'),
21
23
  ('of', 'IN'), ('an', 'DT'), ('unladen', 'NN'), ('swallow', 'NN'), ('?', '.')]
22
24
 
23
25
  >>> from nltk.tag import SennaChunkTagger
24
- >>> chktagger = SennaChunkTagger('/usr/share/senna-v2.0')
25
- >>> chktagger.tag('What is the airspeed of an unladen swallow ?'.split())
26
+ >>> chktagger = SennaChunkTagger('/usr/share/senna-v3.0')
27
+ >>> chktagger.tag('What is the airspeed of an unladen swallow ?'.split()) # doctest: +SKIP
26
28
  [('What', 'B-NP'), ('is', 'B-VP'), ('the', 'B-NP'), ('airspeed', 'I-NP'),
27
29
  ('of', 'B-PP'), ('an', 'B-NP'), ('unladen', 'I-NP'), ('swallow', 'I-NP'),
28
30
  ('?', 'O')]
29
31
 
30
32
  >>> from nltk.tag import SennaNERTagger
31
- >>> nertagger = SennaNERTagger('/usr/share/senna-v2.0')
32
- >>> nertagger.tag('Shakespeare theatre was in London .'.split())
33
+ >>> nertagger = SennaNERTagger('/usr/share/senna-v3.0')
34
+ >>> nertagger.tag('Shakespeare theatre was in London .'.split()) # doctest: +SKIP
33
35
  [('Shakespeare', 'B-PER'), ('theatre', 'O'), ('was', 'O'), ('in', 'O'),
34
36
  ('London', 'B-LOC'), ('.', 'O')]
35
- >>> nertagger.tag('UN headquarters are in NY , USA .'.split())
37
+ >>> nertagger.tag('UN headquarters are in NY , USA .'.split()) # doctest: +SKIP
36
38
  [('UN', 'B-ORG'), ('headquarters', 'O'), ('are', 'O'), ('in', 'O'),
37
39
  ('NY', 'B-LOC'), (',', 'O'), ('USA', 'B-LOC'), ('.', 'O')]
38
40
  """
@@ -73,29 +75,29 @@ class SennaChunkTagger(Senna):
73
75
  annotations = tagged_sents[i][j]
74
76
  tagged_sents[i][j] = (annotations['word'], annotations['chk'])
75
77
  return tagged_sents
76
-
78
+
77
79
  def bio_to_chunks(self, tagged_sent, chunk_type):
78
80
  """
79
81
  Extracts the chunks in a BIO chunk-tagged sentence.
80
-
82
+
81
83
  >>> from nltk.tag import SennaChunkTagger
82
- >>> chktagger = SennaChunkTagger('/usr/share/senna-v2.0')
84
+ >>> chktagger = SennaChunkTagger('/usr/share/senna-v3.0')
83
85
  >>> sent = 'What is the airspeed of an unladen swallow ?'.split()
84
- >>> tagged_sent = chktagger.tag(sent)
85
- >>> tagged_sent
86
+ >>> tagged_sent = chktagger.tag(sent) # doctest: +SKIP
87
+ >>> tagged_sent # doctest: +SKIP
86
88
  [('What', 'B-NP'), ('is', 'B-VP'), ('the', 'B-NP'), ('airspeed', 'I-NP'),
87
89
  ('of', 'B-PP'), ('an', 'B-NP'), ('unladen', 'I-NP'), ('swallow', 'I-NP'),
88
90
  ('?', 'O')]
89
- >>> list(chktagger.bio_to_chunks(tagged_sent, chunk_type='NP'))
91
+ >>> list(chktagger.bio_to_chunks(tagged_sent, chunk_type='NP')) # doctest: +SKIP
90
92
  [('What', '0'), ('the airspeed', '2-3'), ('an unladen swallow', '5-6-7')]
91
-
93
+
92
94
  :param tagged_sent: A list of tuples of word and BIO chunk tag.
93
95
  :type tagged_sent: list(tuple)
94
96
  :param tagged_sent: The chunk tag that users want to extract, e.g. 'NP' or 'VP'
95
97
  :type tagged_sent: str
96
-
98
+
97
99
  :return: An iterable of tuples of chunks that users want to extract
98
- and their corresponding indices.
100
+ and their corresponding indices.
99
101
  :rtype: iter(tuple(str))
100
102
  """
101
103
  current_chunk = []
@@ -107,14 +109,14 @@ class SennaChunkTagger(Senna):
107
109
  current_chunk_position.append((idx))
108
110
  else:
109
111
  if current_chunk: # Flush the full chunk when out of an NP.
110
- _chunk_str = ' '.join(current_chunk)
112
+ _chunk_str = ' '.join(current_chunk)
111
113
  _chunk_pos_str = '-'.join(map(str, current_chunk_position))
112
- yield _chunk_str, _chunk_pos_str
114
+ yield _chunk_str, _chunk_pos_str
113
115
  current_chunk = []
114
116
  current_chunk_position = []
115
117
  if current_chunk: # Flush the last chunk.
116
118
  yield ' '.join(current_chunk), '-'.join(map(str, current_chunk_position))
117
-
119
+
118
120
 
119
121
  @python_2_unicode_compatible
120
122
  class SennaNERTagger(Senna):
@@ -139,7 +141,7 @@ class SennaNERTagger(Senna):
139
141
  def setup_module(module):
140
142
  from nose import SkipTest
141
143
  try:
142
- tagger = Senna('/usr/share/senna-v2.0', ['pos', 'chk', 'ner'])
144
+ tagger = Senna('/usr/share/senna-v3.0', ['pos', 'chk', 'ner'])
143
145
  except OSError:
144
146
  raise SkipTest("Senna executable not found")
145
147
 
@@ -1,6 +1,6 @@
1
1
  # Natural Language Toolkit: Sequential Backoff Taggers
2
2
  #
3
- # Copyright (C) 2001-2016 NLTK Project
3
+ # Copyright (C) 2001-2018 NLTK Project
4
4
  # Author: Edward Loper <edloper@gmail.com>
5
5
  # Steven Bird <stevenbird1@gmail.com> (minor additions)
6
6
  # Tiago Tresoldi <tresoldi@users.sf.net> (original affix tagger)
@@ -18,6 +18,7 @@ consulted instead. Any SequentialBackoffTagger may serve as a
18
18
  backoff tagger for any other SequentialBackoffTagger.
19
19
  """
20
20
  from __future__ import print_function, unicode_literals
21
+ from abc import abstractmethod
21
22
 
22
23
  import re
23
24
 
@@ -29,8 +30,9 @@ from nltk.tag.api import TaggerI, FeaturesetTaggerI
29
30
 
30
31
  from nltk import jsontags
31
32
 
33
+
32
34
  ######################################################################
33
- #{ Abstract Base Classes
35
+ # Abstract Base Classes
34
36
  ######################################################################
35
37
  class SequentialBackoffTagger(TaggerI):
36
38
  """
@@ -79,9 +81,11 @@ class SequentialBackoffTagger(TaggerI):
79
81
  tag = None
80
82
  for tagger in self._taggers:
81
83
  tag = tagger.choose_tag(tokens, index, history)
82
- if tag is not None: break
84
+ if tag is not None:
85
+ break
83
86
  return tag
84
87
 
88
+ @abstractmethod
85
89
  def choose_tag(self, tokens, index, history):
86
90
  """
87
91
  Decide which tag should be used for the specified token, and
@@ -99,7 +103,6 @@ class SequentialBackoffTagger(TaggerI):
99
103
  :type history: list(str)
100
104
  :param history: A list of the tags for all words before *index*.
101
105
  """
102
- raise NotImplementedError()
103
106
 
104
107
 
105
108
  @python_2_unicode_compatible
@@ -125,6 +128,7 @@ class ContextTagger(SequentialBackoffTagger):
125
128
  SequentialBackoffTagger.__init__(self, backoff)
126
129
  self._context_to_tag = (context_to_tag if context_to_tag else {})
127
130
 
131
+ @abstractmethod
128
132
  def context(self, tokens, index, history):
129
133
  """
130
134
  :return: the context that should be used to look up the tag
@@ -132,7 +136,6 @@ class ContextTagger(SequentialBackoffTagger):
132
136
  should not be handled by this tagger.
133
137
  :rtype: (hashable)
134
138
  """
135
- raise NotImplementedError()
136
139
 
137
140
  def choose_tag(self, tokens, index, history):
138
141
  context = self.context(tokens, index, history)
@@ -180,11 +183,13 @@ class ContextTagger(SequentialBackoffTagger):
180
183
  # Record the event.
181
184
  token_count += 1
182
185
  context = self.context(tokens, index, tags[:index])
183
- if context is None: continue
186
+ if context is None:
187
+ continue
184
188
  fd[context][tag] += 1
185
189
  # If the backoff got it wrong, this context is useful:
186
190
  if (self.backoff is None or
187
- tag != self.backoff.tag_one(tokens, index, tags[:index])):
191
+ tag != self.backoff.tag_one(
192
+ tokens, index, tags[:index])):
188
193
  useful_contexts.add(context)
189
194
 
190
195
  # Build the context_to_tag table -- for each context, figure
@@ -200,16 +205,16 @@ class ContextTagger(SequentialBackoffTagger):
200
205
  # Display some stats, if requested.
201
206
  if verbose:
202
207
  size = len(self._context_to_tag)
203
- backoff = 100 - (hit_count * 100.0)/ token_count
208
+ backoff = 100 - (hit_count * 100.0) / token_count
204
209
  pruning = 100 - (size * 100.0) / len(fd.conditions())
205
210
  print("[Trained Unigram tagger:", end=' ')
206
211
  print("size=%d, backoff=%.2f%%, pruning=%.2f%%]" % (
207
212
  size, backoff, pruning))
208
213
 
214
+
209
215
  ######################################################################
210
- #{ Tagger Classes
216
+ # Tagger Classes
211
217
  ######################################################################
212
-
213
218
  @python_2_unicode_compatible
214
219
  @jsontags.register_tag
215
220
  class DefaultTagger(SequentialBackoffTagger):
@@ -295,7 +300,7 @@ class NgramTagger(ContextTagger):
295
300
  return cls(_n, model=_context_to_tag, backoff=backoff)
296
301
 
297
302
  def context(self, tokens, index, history):
298
- tag_context = tuple(history[max(0,index-self._n+1):index])
303
+ tag_context = tuple(history[max(0, index-self._n+1):index])
299
304
  return tag_context, tokens[index]
300
305
 
301
306
 
@@ -651,8 +656,8 @@ class ClassifierBasedTagger(SequentialBackoffTagger, FeaturesetTaggerI):
651
656
  untagged_sentence, tags = zip(*sentence)
652
657
  for index in range(len(sentence)):
653
658
  featureset = self.feature_detector(untagged_sentence,
654
- index, history)
655
- classifier_corpus.append( (featureset, tags[index]) )
659
+ index, history)
660
+ classifier_corpus.append((featureset, tags[index]))
656
661
  history.append(tags[index])
657
662
 
658
663
  if verbose:
@@ -683,6 +688,7 @@ class ClassifierBasedTagger(SequentialBackoffTagger, FeaturesetTaggerI):
683
688
  """
684
689
  return self._classifier
685
690
 
691
+
686
692
  class ClassifierBasedPOSTagger(ClassifierBasedTagger):
687
693
  """
688
694
  A classifier based part of speech tagger.
@@ -732,5 +738,3 @@ class ClassifierBasedPOSTagger(ClassifierBasedTagger):
732
738
  'shape': shape,
733
739
  }
734
740
  return features
735
-
736
-