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,8 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  from __future__ import absolute_import, unicode_literals
3
3
  import unittest
4
+
4
5
  from nltk.corpus import (sinica_treebank, conll2007, indian, cess_cat, cess_esp,
5
- floresta, ptb, udhr)
6
+ floresta, ptb, udhr) # mwa_ppdb
7
+
8
+ from nltk.compat import python_2_unicode_compatible
6
9
  from nltk.tree import Tree
7
10
  from nltk.test.unit.utils import skipIf
8
11
 
@@ -179,5 +182,19 @@ class TestPTB(unittest.TestCase):
179
182
  ['Thirty-three', 'Scotty', 'did', 'not', 'go', 'back']
180
183
  )
181
184
 
185
+ @unittest.skip("Skipping test for mwa_ppdb.")
186
+ class TestMWAPPDB(unittest.TestCase):
187
+ def test_fileids(self):
188
+ self.assertEqual(mwa_ppdb.fileids(),
189
+ ['ppdb-1.0-xxxl-lexical.extended.synonyms.uniquepairs'])
190
+
191
+ def test_entries(self):
192
+ self.assertEqual(mwa_ppdb.entries()[:10],
193
+ [('10/17/01', '17/10/2001'), ('102,70', '102.70'),
194
+ ('13,53', '13.53'), ('3.2.5.3.2.1', '3.2.5.3.2.1.'),
195
+ ('53,76', '53.76'), ('6.9.5', '6.9.5.'),
196
+ ('7.7.6.3', '7.7.6.3.'), ('76,20', '76.20'),
197
+ ('79,85', '79.85'), ('93,65', '93.65')] )
198
+
182
199
  # unload corpora
183
200
  from nltk.corpus import teardown_module
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Natural Language Toolkit: Twitter client
3
3
  #
4
- # Copyright (C) 2001-2016 NLTK Project
4
+ # Copyright (C) 2001-2018 NLTK Project
5
5
  # Author: Lorenzo Rubio <lrnzcig@gmail.com>
6
6
  # URL: <http://nltk.org/>
7
7
  # For license information, see LICENSE.TXT
@@ -16,9 +16,10 @@ import os
16
16
  from nltk.compat import TemporaryDirectory
17
17
  import unittest
18
18
 
19
+ from six.moves import zip
20
+
19
21
  from nltk.corpus import twitter_samples
20
22
  from nltk.twitter.common import json2csv, json2csv_entities
21
- from nltk.compat import izip
22
23
 
23
24
 
24
25
  def are_files_identical(filename1, filename2, debug=False):
@@ -28,7 +29,7 @@ def are_files_identical(filename1, filename2, debug=False):
28
29
  with open(filename1, "rb") as fileA:
29
30
  with open(filename2, "rb") as fileB:
30
31
  result = True
31
- for lineA, lineB in izip(sorted(fileA.readlines()),
32
+ for lineA, lineB in zip(sorted(fileA.readlines()),
32
33
  sorted(fileB.readlines())):
33
34
  if lineA.strip() != lineB.strip():
34
35
  if debug:
@@ -0,0 +1,86 @@
1
+ # -*- coding: utf-8 -*-
2
+ from __future__ import print_function, unicode_literals
3
+
4
+ import unittest
5
+
6
+ from nltk.corpus import rte as rte_corpus
7
+ from nltk.classify.rte_classify import RTEFeatureExtractor, rte_features, rte_classifier
8
+
9
+ expected_from_rte_feature_extration = """
10
+ alwayson => True
11
+ ne_hyp_extra => 0
12
+ ne_overlap => 1
13
+ neg_hyp => 0
14
+ neg_txt => 0
15
+ word_hyp_extra => 3
16
+ word_overlap => 3
17
+
18
+ alwayson => True
19
+ ne_hyp_extra => 0
20
+ ne_overlap => 1
21
+ neg_hyp => 0
22
+ neg_txt => 0
23
+ word_hyp_extra => 2
24
+ word_overlap => 1
25
+
26
+ alwayson => True
27
+ ne_hyp_extra => 1
28
+ ne_overlap => 1
29
+ neg_hyp => 0
30
+ neg_txt => 0
31
+ word_hyp_extra => 1
32
+ word_overlap => 2
33
+
34
+ alwayson => True
35
+ ne_hyp_extra => 1
36
+ ne_overlap => 0
37
+ neg_hyp => 0
38
+ neg_txt => 0
39
+ word_hyp_extra => 6
40
+ word_overlap => 2
41
+
42
+ alwayson => True
43
+ ne_hyp_extra => 1
44
+ ne_overlap => 0
45
+ neg_hyp => 0
46
+ neg_txt => 0
47
+ word_hyp_extra => 4
48
+ word_overlap => 0
49
+
50
+ alwayson => True
51
+ ne_hyp_extra => 1
52
+ ne_overlap => 0
53
+ neg_hyp => 0
54
+ neg_txt => 0
55
+ word_hyp_extra => 3
56
+ word_overlap => 1
57
+ """
58
+
59
+
60
+ class RTEClassifierTest(unittest.TestCase):
61
+ # Test the feature extraction method.
62
+ def test_rte_feature_extraction(self):
63
+ pairs = rte_corpus.pairs(['rte1_dev.xml'])[:6]
64
+ test_output = ["%-15s => %s" % (key, rte_features(pair)[key])
65
+ for pair in pairs for key in sorted(rte_features(pair))]
66
+ expected_output = expected_from_rte_feature_extration.strip().split('\n')
67
+ # Remove null strings.
68
+ expected_output = list(filter(None, expected_output))
69
+ self.assertEqual(test_output, expected_output)
70
+ # Test the RTEFeatureExtractor object.
71
+ def test_feature_extractor_object(self):
72
+ rtepair = rte_corpus.pairs(['rte3_dev.xml'])[33]
73
+ extractor = RTEFeatureExtractor(rtepair)
74
+ self.assertEqual(extractor.hyp_words, {'member', 'China', 'SCO.'})
75
+ self.assertEqual(extractor.overlap('word'), set())
76
+ self.assertEqual(extractor.overlap('ne'), {'China'})
77
+ self.assertEqual(extractor.hyp_extra('word'), {'member'})
78
+ # Test the RTE classifier training.
79
+ def test_rte_classification_without_megam(self):
80
+ clf = rte_classifier('IIS')
81
+ clf = rte_classifier('GIS')
82
+ @unittest.skip("Skipping tests with dependencies on MEGAM")
83
+ def test_rte_classification_with_megam(self):
84
+ nltk.config_megam('/usr/local/bin/megam')
85
+ clf = rte_classifier('megam')
86
+ clf = rte_classifier('BFGS')
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Unit tests for Senna
4
+ """
5
+
6
+ from __future__ import unicode_literals
7
+ from os import environ, path, sep
8
+
9
+ import logging
10
+ import unittest
11
+
12
+ from nltk.classify import Senna
13
+ from nltk.tag import SennaTagger, SennaChunkTagger, SennaNERTagger
14
+
15
+ # Set Senna executable path for tests if it is not specified as an environment variable
16
+ if 'SENNA' in environ:
17
+ SENNA_EXECUTABLE_PATH = path.normpath(environ['SENNA']) + sep
18
+ else:
19
+ SENNA_EXECUTABLE_PATH = '/usr/share/senna-v3.0'
20
+
21
+ senna_is_installed = path.exists(SENNA_EXECUTABLE_PATH)
22
+
23
+ @unittest.skipUnless(senna_is_installed, "Requires Senna executable")
24
+ class TestSennaPipeline(unittest.TestCase):
25
+ """Unittest for nltk.classify.senna"""
26
+
27
+ def test_senna_pipeline(self):
28
+ """Senna pipeline interface"""
29
+
30
+ pipeline = Senna(SENNA_EXECUTABLE_PATH, ['pos', 'chk', 'ner'])
31
+ sent = 'Dusseldorf is an international business center'.split()
32
+ result = [(token['word'], token['chk'], token['ner'], token['pos']) for token in pipeline.tag(sent)]
33
+ expected = [('Dusseldorf', 'B-NP', 'B-LOC', 'NNP'), ('is', 'B-VP',
34
+ 'O', 'VBZ'), ('an', 'B-NP', 'O', 'DT'), ('international', 'I-NP',
35
+ 'O', 'JJ'), ('business', 'I-NP', 'O', 'NN'), ('center', 'I-NP',
36
+ 'O', 'NN')]
37
+ self.assertEqual(result, expected)
38
+
39
+ @unittest.skipUnless(senna_is_installed, "Requires Senna executable")
40
+ class TestSennaTagger(unittest.TestCase):
41
+ """Unittest for nltk.tag.senna"""
42
+
43
+ def test_senna_tagger(self):
44
+ tagger = SennaTagger(SENNA_EXECUTABLE_PATH)
45
+ result = tagger.tag('What is the airspeed of an unladen swallow ?'.split())
46
+ expected = [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed',
47
+ 'NN'),('of', 'IN'), ('an', 'DT'), ('unladen', 'NN'), ('swallow',
48
+ 'NN'), ('?', '.')]
49
+ self.assertEqual(result, expected)
50
+
51
+ def test_senna_chunk_tagger(self):
52
+ chktagger = SennaChunkTagger(SENNA_EXECUTABLE_PATH)
53
+ result_1 = chktagger.tag('What is the airspeed of an unladen swallow ?'.split())
54
+ expected_1 = [('What', 'B-NP'), ('is', 'B-VP'), ('the', 'B-NP'), ('airspeed',
55
+ 'I-NP'), ('of', 'B-PP'), ('an', 'B-NP'), ('unladen', 'I-NP'), ('swallow',
56
+ 'I-NP'), ('?', 'O')]
57
+
58
+ result_2 = list(chktagger.bio_to_chunks(result_1, chunk_type='NP'))
59
+ expected_2 = [('What', '0'), ('the airspeed', '2-3'), ('an unladen swallow',
60
+ '5-6-7')]
61
+ self.assertEqual(result_1, expected_1)
62
+ self.assertEqual(result_2, expected_2)
63
+
64
+ def test_senna_ner_tagger(self):
65
+ nertagger = SennaNERTagger(SENNA_EXECUTABLE_PATH)
66
+ result_1 = nertagger.tag('Shakespeare theatre was in London .'.split())
67
+ expected_1 = [('Shakespeare', 'B-PER'), ('theatre', 'O'), ('was', 'O'),
68
+ ('in', 'O'), ('London', 'B-LOC'), ('.', 'O')]
69
+
70
+ result_2 = nertagger.tag('UN headquarters are in NY , USA .'.split())
71
+ expected_2 = [('UN', 'B-ORG'), ('headquarters', 'O'), ('are', 'O'),
72
+ ('in', 'O'), ('NY', 'B-LOC'), (',', 'O'), ('USA', 'B-LOC'), ('.', 'O')]
73
+ self.assertEqual(result_1, expected_1)
74
+ self.assertEqual(result_2, expected_2)
@@ -0,0 +1,121 @@
1
+ # -*- coding: utf-8 -*-
2
+ from __future__ import print_function, unicode_literals
3
+ import unittest
4
+ from contextlib import closing
5
+ from nltk import data
6
+ from nltk.stem.snowball import SnowballStemmer
7
+ from nltk.stem.porter import PorterStemmer
8
+ import os
9
+
10
+
11
+ class SnowballTest(unittest.TestCase):
12
+
13
+ def test_arabic(self):
14
+ """
15
+ this unit testing for test the snowball arabic light stemmer
16
+ this stemmer deals with prefixes and suffixes
17
+ """
18
+ ar_stemmer = SnowballStemmer("arabic")
19
+ assert ar_stemmer.stem('الْعَرَبِــــــيَّة') == "عرب"
20
+ assert ar_stemmer.stem("العربية") == "عرب"
21
+ assert ar_stemmer.stem("فقالوا") == "قال"
22
+ assert ar_stemmer.stem("الطالبات") == "طالب"
23
+ assert ar_stemmer.stem("فالطالبات") == "طالب"
24
+ assert ar_stemmer.stem("والطالبات") == "طالب"
25
+ assert ar_stemmer.stem("الطالبون") == "طالب"
26
+
27
+ def test_russian(self):
28
+ # Russian words both consisting of Cyrillic
29
+ # and Roman letters can be stemmed.
30
+ stemmer_russian = SnowballStemmer("russian")
31
+ assert stemmer_russian.stem("авантненькая") == "авантненьк"
32
+ assert stemmer_russian.stem("avenantnen'kai^a") == "avenantnen'k"
33
+
34
+ def test_german(self):
35
+ stemmer_german = SnowballStemmer("german")
36
+ stemmer_german2 = SnowballStemmer("german", ignore_stopwords=True)
37
+
38
+ assert stemmer_german.stem("Schr\xe4nke") == 'schrank'
39
+ assert stemmer_german2.stem("Schr\xe4nke") == 'schrank'
40
+
41
+ assert stemmer_german.stem("keinen") == 'kein'
42
+ assert stemmer_german2.stem("keinen") == 'keinen'
43
+
44
+ def test_spanish(self):
45
+ stemmer = SnowballStemmer('spanish')
46
+
47
+ assert stemmer.stem("Visionado") == 'vision'
48
+
49
+ # The word 'algue' was raising an IndexError
50
+ assert stemmer.stem("algue") == 'algu'
51
+
52
+ def test_short_strings_bug(self):
53
+ stemmer = SnowballStemmer('english')
54
+ assert stemmer.stem("y's") == 'y'
55
+
56
+ class PorterTest(unittest.TestCase):
57
+
58
+ def _vocabulary(self):
59
+ with closing(data.find('stemmers/porter_test/porter_vocabulary.txt').open(encoding='utf-8')) as fp:
60
+ return fp.read().splitlines()
61
+
62
+ def _test_against_expected_output(self, stemmer_mode, expected_stems):
63
+ stemmer = PorterStemmer(mode=stemmer_mode)
64
+ for word, true_stem in zip(self._vocabulary(), expected_stems):
65
+ our_stem = stemmer.stem(word)
66
+ assert our_stem == true_stem, (
67
+ "%s should stem to %s in %s mode but got %s" % (
68
+ word, true_stem, stemmer_mode, our_stem
69
+ )
70
+ )
71
+
72
+ def test_vocabulary_martin_mode(self):
73
+ """Tests all words from the test vocabulary provided by M Porter
74
+
75
+ The sample vocabulary and output were sourced from:
76
+ http://tartarus.org/martin/PorterStemmer/voc.txt
77
+ http://tartarus.org/martin/PorterStemmer/output.txt
78
+ and are linked to from the Porter Stemmer algorithm's homepage
79
+ at
80
+ http://tartarus.org/martin/PorterStemmer/
81
+ """
82
+ with closing(data.find('stemmers/porter_test/porter_martin_output.txt').open(encoding='utf-8')) as fp:
83
+ self._test_against_expected_output(
84
+ PorterStemmer.MARTIN_EXTENSIONS,
85
+ fp.read().splitlines()
86
+ )
87
+
88
+ def test_vocabulary_nltk_mode(self):
89
+ with closing(data.find('stemmers/porter_test/porter_nltk_output.txt').open(encoding='utf-8')) as fp:
90
+ self._test_against_expected_output(
91
+ PorterStemmer.NLTK_EXTENSIONS,
92
+ fp.read().splitlines()
93
+ )
94
+
95
+ def test_vocabulary_original_mode(self):
96
+ # The list of stems for this test was generated by taking the
97
+ # Martin-blessed stemmer from
98
+ # http://tartarus.org/martin/PorterStemmer/c.txt
99
+ # and removing all the --DEPARTURE-- sections from it and
100
+ # running it against Martin's test vocabulary.
101
+
102
+ with closing(data.find('stemmers/porter_test/porter_original_output.txt').open(encoding='utf-8')) as fp:
103
+ self._test_against_expected_output(
104
+ PorterStemmer.ORIGINAL_ALGORITHM,
105
+ fp.read().splitlines()
106
+ )
107
+
108
+ self._test_against_expected_output(
109
+ PorterStemmer.ORIGINAL_ALGORITHM,
110
+ data.find('stemmers/porter_test/porter_original_output.txt')
111
+ .open(encoding='utf-8')
112
+ .read()
113
+ .splitlines()
114
+ )
115
+
116
+ def test_oed_bug(self):
117
+ """Test for bug https://github.com/nltk/nltk/issues/1581
118
+
119
+ Ensures that 'oed' can be stemmed without throwing an error.
120
+ """
121
+ assert PorterStemmer().stem('oed') == 'o'
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # Natural Language Toolkit: TGrep search
5
5
  #
6
- # Copyright (C) 2001-2016 NLTK Project
6
+ # Copyright (C) 2001-2018 NLTK Project
7
7
  # Author: Will Roberts <wildwilhelm@gmail.com>
8
8
  # URL: <http://nltk.org/>
9
9
  # For license information, see LICENSE.TXT
@@ -13,7 +13,9 @@ Unit tests for nltk.tgrep.
13
13
  '''
14
14
 
15
15
  from __future__ import absolute_import, print_function, unicode_literals
16
- from nltk.compat import b
16
+
17
+ from six import b
18
+
17
19
  from nltk.tree import ParentedTree
18
20
  from nltk import tgrep
19
21
  import unittest
@@ -0,0 +1,168 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Unit tests for nltk.tokenize.
4
+ See also nltk/test/tokenize.doctest
5
+ """
6
+
7
+ from __future__ import unicode_literals
8
+ from nltk.tokenize import TweetTokenizer, StanfordSegmenter, TreebankWordTokenizer
9
+ from nose import SkipTest
10
+ import unittest
11
+ import os
12
+
13
+
14
+ class TestTokenize(unittest.TestCase):
15
+
16
+ def test_tweet_tokenizer(self):
17
+ """
18
+ Test TweetTokenizer using words with special and accented characters.
19
+ """
20
+
21
+ tokenizer = TweetTokenizer(strip_handles=True, reduce_len=True)
22
+ s9 = "@myke: Let's test these words: resumé España München français"
23
+ tokens = tokenizer.tokenize(s9)
24
+ expected = [':', "Let's", 'test', 'these', 'words', ':', 'resumé',
25
+ 'España', 'München', 'français']
26
+ self.assertEqual(tokens, expected)
27
+
28
+ def test_stanford_segmenter_arabic(self):
29
+ """
30
+ Test the Stanford Word Segmenter for Arabic (default config)
31
+ """
32
+ try:
33
+ seg = StanfordSegmenter()
34
+ seg.default_config('ar')
35
+ sent = u'يبحث علم الحاسوب استخدام الحوسبة بجميع اشكالها لحل المشكلات'
36
+ segmented_sent = seg.segment(sent.split())
37
+ assert segmented_sent.split() == ['يبحث', 'علم', 'الحاسوب', 'استخدام',
38
+ 'الحوسبة', 'ب', 'جميع', 'اشكال',
39
+ 'ها', 'ل', 'حل', 'المشكلات']
40
+ except LookupError as e:
41
+ raise SkipTest(str(e))
42
+
43
+ def test_stanford_segmenter_chinese(self):
44
+ """
45
+ Test the Stanford Word Segmenter for Chinese (default config)
46
+ """
47
+ try:
48
+ seg = StanfordSegmenter()
49
+ seg.default_config('zh')
50
+ sent = u"这是斯坦福中文分词器测试"
51
+ segmented_sent = seg.segment(sent.split())
52
+ assert segmented_sent.split() == ['这', '是', '斯坦福',
53
+ '中文', '分词器', '测试']
54
+ except LookupError as e:
55
+ raise SkipTest(str(e))
56
+
57
+ def test_phone_tokenizer(self):
58
+ """
59
+ Test a string that resembles a phone number but contains a newline
60
+ """
61
+
62
+ # Should be recognized as a phone number, albeit one with multiple spaces
63
+ tokenizer = TweetTokenizer()
64
+ test1 = "(393) 928 -3010"
65
+ expected = ['(393) 928 -3010']
66
+ result = tokenizer.tokenize(test1)
67
+ self.assertEqual(result, expected)
68
+
69
+ # Due to newline, first three elements aren't part of a phone number;
70
+ # fourth is
71
+ test2= "(393)\n928 -3010"
72
+ expected = ['(', '393', ')', "928 -3010"]
73
+ result = tokenizer.tokenize(test2)
74
+ self.assertEqual(result, expected)
75
+
76
+ def test_remove_handle(self):
77
+ """
78
+ Test remove_handle() from casual.py with specially crafted edge cases
79
+ """
80
+
81
+ tokenizer = TweetTokenizer(strip_handles=True)
82
+
83
+ # Simple example. Handles with just numbers should be allowed
84
+ test1 = "@twitter hello @twi_tter_. hi @12345 @123news"
85
+ expected = ['hello', '.', 'hi']
86
+ result = tokenizer.tokenize(test1)
87
+ self.assertEqual(result, expected)
88
+
89
+ # Handles are allowed to follow any of the following characters
90
+ test2 = "@n`@n~@n(@n)@n-@n=@n+@n\\@n|@n[@n]@n{@n}@n;@n:@n'@n\"@n/@n?@n.@n,@n<@n>@n @n\n@n ñ@n.ü@n.ç@n."
91
+ expected = ['`', '~', '(', ')', '-', '=', '+', '\\', '|', '[', ']', '{', '}', ';', ':', "'", '"', '/', '?', '.', ',', '<', '>', 'ñ', '.', 'ü', '.', 'ç', '.']
92
+ result = tokenizer.tokenize(test2)
93
+ self.assertEqual(result, expected)
94
+
95
+
96
+ # Handles are NOT allowed to follow any of the following characters
97
+ test3 = "a@n j@n z@n A@n L@n Z@n 1@n 4@n 7@n 9@n 0@n _@n !@n @@n #@n $@n %@n &@n *@n"
98
+ expected = ['a', '@n', 'j', '@n', 'z', '@n', 'A', '@n', 'L', '@n', 'Z', '@n', '1', '@n', '4', '@n', '7', '@n', '9', '@n', '0', '@n', '_', '@n', '!', '@n', '@', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n']
99
+ result = tokenizer.tokenize(test3)
100
+ self.assertEqual(result, expected)
101
+
102
+
103
+ # Handles are allowed to precede the following characters
104
+ test4 = "@n!a @n#a @n$a @n%a @n&a @n*a"
105
+ expected = ['!', 'a', '#', 'a', '$', 'a', '%', 'a', '&', 'a', '*', 'a']
106
+ result = tokenizer.tokenize(test4)
107
+ self.assertEqual(result, expected)
108
+
109
+
110
+ # Tests interactions with special symbols and multiple @
111
+ test5 = "@n!@n @n#@n @n$@n @n%@n @n&@n @n*@n @n@n @@n @n@@n @n_@n @n7@n @nj@n"
112
+ expected = ['!', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n', '@n', '@n', '@', '@n', '@n', '@', '@n', '@n_', '@n', '@n7', '@n', '@nj', '@n']
113
+ result = tokenizer.tokenize(test5)
114
+ self.assertEqual(result, expected)
115
+
116
+
117
+ # Tests that handles can have a max length of 20
118
+ test6 = "@abcdefghijklmnopqrstuvwxyz @abcdefghijklmnopqrst1234 @abcdefghijklmnopqrst_ @abcdefghijklmnopqrstendofhandle"
119
+ expected = ['uvwxyz', '1234', '_', 'endofhandle']
120
+ result = tokenizer.tokenize(test6)
121
+ self.assertEqual(result, expected)
122
+
123
+
124
+ # Edge case where an @ comes directly after a long handle
125
+ test7 = "@abcdefghijklmnopqrstu@abcde @abcdefghijklmnopqrst@abcde @abcdefghijklmnopqrst_@abcde @abcdefghijklmnopqrst5@abcde"
126
+ expected = ['u', '@abcde', '@abcdefghijklmnopqrst', '@abcde', '_', '@abcde', '5', '@abcde']
127
+ result = tokenizer.tokenize(test7)
128
+ self.assertEqual(result, expected)
129
+
130
+ def test_treebank_span_tokenizer(self):
131
+ """
132
+ Test TreebankWordTokenizer.span_tokenize function
133
+ """
134
+
135
+ tokenizer = TreebankWordTokenizer()
136
+
137
+ # Test case in the docstring
138
+ test1 = "Good muffins cost $3.88\nin New (York). Please (buy) me\ntwo of them.\n(Thanks)."
139
+ expected = [
140
+ (0, 4), (5, 12), (13, 17), (18, 19), (19, 23),
141
+ (24, 26), (27, 30), (31, 32), (32, 36), (36, 37), (37, 38),
142
+ (40, 46), (47, 48), (48, 51), (51, 52), (53, 55), (56, 59),
143
+ (60, 62), (63, 68), (69, 70), (70, 76), (76, 77), (77, 78)
144
+ ]
145
+ result = list(tokenizer.span_tokenize(test1))
146
+ self.assertEqual(result, expected)
147
+
148
+ # Test case with double quotation
149
+ test2 = "The DUP is similar to the \"religious right\" in the United States and takes a hardline stance on social issues"
150
+ expected = [
151
+ (0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
152
+ (27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
153
+ (65, 68), (69, 74), (75, 76), (77, 85), (86, 92), (93, 95), (96, 102),
154
+ (103, 109)
155
+ ]
156
+ result = list(tokenizer.span_tokenize(test2))
157
+ self.assertEqual(result, expected)
158
+
159
+ # Test case with double qoutation as well as converted quotations
160
+ test3 = "The DUP is similar to the \"religious right\" in the United States and takes a ``hardline'' stance on social issues"
161
+ expected = [
162
+ (0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
163
+ (27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
164
+ (65, 68), (69, 74), (75, 76), (77, 79), (79, 87), (87, 89), (90, 96),
165
+ (97, 99), (100, 106), (107, 113)
166
+ ]
167
+ result = list(tokenizer.span_tokenize(test3))
168
+ self.assertEqual(result, expected)
@@ -0,0 +1,134 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Unit tests for nltk.corpus.wordnet
4
+ See also nltk/test/wordnet.doctest
5
+ """
6
+
7
+ from __future__ import unicode_literals
8
+ from nose import SkipTest
9
+ import unittest
10
+ import os
11
+
12
+ from nltk.corpus.reader.wordnet import WordNetCorpusReader
13
+ from nltk.corpus import wordnet as wn
14
+ from nltk.corpus import wordnet_ic as wnic
15
+ from nltk.data import find as find_data
16
+
17
+
18
+ wn.ensure_loaded()
19
+ S = wn.synset
20
+ L = wn.lemma
21
+
22
+ class WordnNetDemo(unittest.TestCase):
23
+
24
+ def test_retrieve_synset(self):
25
+ move_synset = S('go.v.21')
26
+ self.assertEqual(move_synset.name(), "move.v.15")
27
+ self.assertEqual(move_synset.lemma_names(), ['move', 'go'])
28
+ self.assertEqual(move_synset.definition(), "have a turn; make one's move in a game")
29
+ self.assertEqual(move_synset.examples(), ['Can I go now?'])
30
+
31
+
32
+ def test_retrieve_synsets(self):
33
+ self.assertEqual(sorted(wn.synsets('zap', pos='n')),
34
+ [S('zap.n.01')])
35
+ self.assertEqual(sorted(wn.synsets('zap', pos='v')),
36
+ [S('microwave.v.01'), S('nuke.v.01'), S('zap.v.01'), S('zap.v.02')])
37
+
38
+ def test_hyperhyponyms(self):
39
+ # Not every synset as hypernyms()
40
+ self.assertEqual(S('travel.v.01').hypernyms(), [])
41
+ self.assertEqual(S('travel.v.02').hypernyms(),
42
+ [S('travel.v.03')])
43
+ self.assertEqual(S('travel.v.03').hypernyms(), [])
44
+
45
+ # Test hyper-/hyponyms.
46
+ self.assertEqual(S('breakfast.n.1').hypernyms(), [S('meal.n.01')])
47
+ first_five_meal_hypo = [S('banquet.n.02'), S('bite.n.04'), S('breakfast.n.01'), S('brunch.n.01'), S('buffet.n.02')]
48
+ self.assertEqual(sorted(S('meal.n.1').hyponyms()[:5]), first_five_meal_hypo)
49
+ self.assertEqual(S('Austen.n.1').instance_hypernyms(), [S('writer.n.01')])
50
+ first_five_composer_hypo = [S('ambrose.n.01'), S('bach.n.01'), S('barber.n.01'), S('bartok.n.01'), S('beethoven.n.01')]
51
+ self.assertEqual(S('composer.n.1').instance_hyponyms()[:5], first_five_composer_hypo)
52
+
53
+ # Test root hyper-/hyponyms
54
+ self.assertEqual(S('person.n.01').root_hypernyms(), [S('entity.n.01')])
55
+ self.assertEqual(S('sail.v.01').root_hypernyms(), [S('travel.v.01')])
56
+ self.assertEqual(S('fall.v.12').root_hypernyms(), [S('act.v.01'), S('fall.v.17')])
57
+
58
+ def test_derivationally_related_forms(self):
59
+ # Test `derivationally_related_forms()`
60
+ self.assertEqual(L('zap.v.03.nuke').derivationally_related_forms(),
61
+ [L('atomic_warhead.n.01.nuke')])
62
+ self.assertEqual(L('zap.v.03.atomize').derivationally_related_forms(),
63
+ [L('atomization.n.02.atomization')])
64
+ self.assertEqual(L('zap.v.03.atomise').derivationally_related_forms(),
65
+ [L('atomization.n.02.atomisation')])
66
+ self.assertEqual(L('zap.v.03.zap').derivationally_related_forms(),
67
+ [])
68
+
69
+ def test_meronyms_holonyms(self):
70
+ # Test meronyms, holonyms.
71
+ self.assertEqual(S('dog.n.01').member_holonyms(), [S('canis.n.01'), S('pack.n.06')])
72
+ self.assertEqual(S('dog.n.01').part_meronyms(), [S('flag.n.07')])
73
+
74
+ self.assertEqual(S('faculty.n.2').member_meronyms(),
75
+ [S('professor.n.01')])
76
+ self.assertEqual(S('copilot.n.1').member_holonyms(),
77
+ [S('crew.n.01')])
78
+
79
+ self.assertEqual(S('table.n.2').part_meronyms(),
80
+ [S('leg.n.03'), S('tabletop.n.01'), S('tableware.n.01')])
81
+ self.assertEqual(S('course.n.7').part_holonyms(),
82
+ [S('meal.n.01')])
83
+
84
+ self.assertEqual(S('water.n.1').substance_meronyms(),
85
+ [S('hydrogen.n.01'), S('oxygen.n.01')])
86
+ self.assertEqual(S('gin.n.1').substance_holonyms(),
87
+ [S('gin_and_it.n.01'), S('gin_and_tonic.n.01'),
88
+ S('martini.n.01'), S('pink_lady.n.01')])
89
+
90
+ def test_antonyms(self):
91
+ # Test antonyms.
92
+ self.assertEqual(L('leader.n.1.leader').antonyms(), [L('follower.n.01.follower')])
93
+ self.assertEqual(L('increase.v.1.increase').antonyms(), [L('decrease.v.01.decrease')])
94
+
95
+
96
+ def test_misc_relations(self):
97
+ # Test misc relations.
98
+ self.assertEqual(S('snore.v.1').entailments(), [S('sleep.v.01')])
99
+ self.assertEqual(S('heavy.a.1').similar_tos(),
100
+ [S('dense.s.03'), S('doughy.s.01'),
101
+ S('heavier-than-air.s.01'), S('hefty.s.02'),
102
+ S('massive.s.04'), S('non-buoyant.s.01'),
103
+ S('ponderous.s.02')])
104
+ self.assertEqual(S('light.a.1').attributes(), [S('weight.n.01')])
105
+ self.assertEqual(S('heavy.a.1').attributes(), [S('weight.n.01')])
106
+
107
+ # Test pertainyms.
108
+ self.assertEqual(L('English.a.1.English').pertainyms(),
109
+ [L('england.n.01.England')])
110
+
111
+ def test_lch(self):
112
+ # Test LCH.
113
+ self.assertEqual(S('person.n.01').lowest_common_hypernyms(S('dog.n.01')),
114
+ [S('organism.n.01')])
115
+ self.assertEqual(S('woman.n.01').lowest_common_hypernyms(S('girlfriend.n.02')),
116
+ [S('woman.n.01')])
117
+
118
+ def test_domains(self):
119
+ # Test domains.
120
+ self.assertEqual(S('code.n.03').topic_domains(), [S('computer_science.n.01')])
121
+ self.assertEqual(S('pukka.a.01').region_domains(), [S('india.n.01')])
122
+ self.assertEqual(S('freaky.a.01').usage_domains(), [S('slang.n.02')])
123
+
124
+ def test_wordnet_similarities(self):
125
+ # Path based similarities.
126
+ self.assertAlmostEqual(S('cat.n.01').path_similarity(S('cat.n.01')), 1.0)
127
+ self.assertAlmostEqual(S('dog.n.01').path_similarity(S('cat.n.01')), 0.2)
128
+ self.assertAlmostEqual(S('dog.n.01').lch_similarity(S('cat.n.01')), 2.028, places=3)
129
+ self.assertAlmostEqual(S('dog.n.01').wup_similarity(S('cat.n.01')), 0.8571, places=3)
130
+ # Information Content similarities.
131
+ brown_ic = wnic.ic('ic-brown.dat')
132
+ self.assertAlmostEqual(S('dog.n.01').jcn_similarity(S('cat.n.01'), brown_ic), 0.4497, places=3)
133
+ semcor_ic = wnic.ic('ic-semcor.dat')
134
+ self.assertAlmostEqual(S('dog.n.01').lin_similarity(S('cat.n.01'), semcor_ic), 0.8863, places=3)