nltk 3.2__zip → 3.3__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. {nltk-3.2 → nltk-3.3}/INSTALL.txt +6 -6
  2. {nltk-3.2 → nltk-3.3}/LICENSE.txt +13 -13
  3. {nltk-3.2 → nltk-3.3}/MANIFEST.in +6 -6
  4. {nltk-3.2/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
  5. nltk-3.2/README.txt → nltk-3.3/README.md +49 -48
  6. nltk-3.3/nltk/VERSION +1 -0
  7. {nltk-3.2 → nltk-3.3}/nltk/__init__.py +185 -185
  8. {nltk-3.2 → nltk-3.3}/nltk/app/__init__.py +52 -53
  9. {nltk-3.2 → nltk-3.3}/nltk/app/chartparser_app.py +2276 -2276
  10. {nltk-3.2 → nltk-3.3}/nltk/app/chunkparser_app.py +1262 -1264
  11. {nltk-3.2 → nltk-3.3}/nltk/app/collocations_app.py +347 -350
  12. {nltk-3.2 → nltk-3.3}/nltk/app/concordance_app.py +568 -570
  13. {nltk-3.2 → nltk-3.3}/nltk/app/nemo_app.py +156 -155
  14. {nltk-3.2 → nltk-3.3}/nltk/app/rdparser_app.py +892 -894
  15. {nltk-3.2 → nltk-3.3}/nltk/app/srparser_app.py +809 -809
  16. {nltk-3.2 → nltk-3.3}/nltk/app/wordfreq_app.py +32 -32
  17. {nltk-3.2 → nltk-3.3}/nltk/app/wordnet_app.py +968 -968
  18. {nltk-3.2 → nltk-3.3}/nltk/book.py +91 -90
  19. {nltk-3.2 → nltk-3.3}/nltk/ccg/__init__.py +22 -22
  20. {nltk-3.2 → nltk-3.3}/nltk/ccg/api.py +359 -335
  21. {nltk-3.2 → nltk-3.3}/nltk/ccg/chart.py +394 -361
  22. {nltk-3.2 → nltk-3.3}/nltk/ccg/combinator.py +343 -312
  23. {nltk-3.2 → nltk-3.3}/nltk/ccg/lexicon.py +328 -290
  24. nltk-3.3/nltk/ccg/logic.py +46 -0
  25. {nltk-3.2 → nltk-3.3}/nltk/chat/__init__.py +49 -49
  26. {nltk-3.2 → nltk-3.3}/nltk/chat/eliza.py +244 -244
  27. {nltk-3.2 → nltk-3.3}/nltk/chat/iesha.py +140 -140
  28. {nltk-3.2 → nltk-3.3}/nltk/chat/rude.py +92 -92
  29. {nltk-3.2 → nltk-3.3}/nltk/chat/suntsu.py +117 -117
  30. {nltk-3.2 → nltk-3.3}/nltk/chat/util.py +122 -120
  31. {nltk-3.2 → nltk-3.3}/nltk/chat/zen.py +282 -282
  32. {nltk-3.2 → nltk-3.3}/nltk/chunk/__init__.py +190 -190
  33. {nltk-3.2 → nltk-3.3}/nltk/chunk/api.py +51 -51
  34. {nltk-3.2 → nltk-3.3}/nltk/chunk/named_entity.py +331 -331
  35. {nltk-3.2 → nltk-3.3}/nltk/chunk/regexp.py +1390 -1384
  36. {nltk-3.2 → nltk-3.3}/nltk/chunk/util.py +600 -600
  37. {nltk-3.2 → nltk-3.3}/nltk/classify/__init__.py +98 -98
  38. {nltk-3.2 → nltk-3.3}/nltk/classify/api.py +193 -193
  39. {nltk-3.2 → nltk-3.3}/nltk/classify/decisiontree.py +295 -295
  40. {nltk-3.2 → nltk-3.3}/nltk/classify/maxent.py +1510 -1492
  41. {nltk-3.2 → nltk-3.3}/nltk/classify/megam.py +179 -178
  42. {nltk-3.2 → nltk-3.3}/nltk/classify/naivebayes.py +245 -242
  43. {nltk-3.2 → nltk-3.3}/nltk/classify/positivenaivebayes.py +170 -170
  44. {nltk-3.2 → nltk-3.3}/nltk/classify/rte_classify.py +160 -191
  45. {nltk-3.2 → nltk-3.3}/nltk/classify/scikitlearn.py +153 -151
  46. {nltk-3.2 → nltk-3.3}/nltk/classify/senna.py +183 -181
  47. {nltk-3.2 → nltk-3.3}/nltk/classify/svm.py +15 -15
  48. {nltk-3.2 → nltk-3.3}/nltk/classify/tadm.py +113 -112
  49. {nltk-3.2 → nltk-3.3}/nltk/classify/textcat.py +193 -193
  50. {nltk-3.2 → nltk-3.3}/nltk/classify/util.py +324 -312
  51. {nltk-3.2 → nltk-3.3}/nltk/classify/weka.py +346 -345
  52. {nltk-3.2 → nltk-3.3}/nltk/cluster/__init__.py +86 -86
  53. {nltk-3.2 → nltk-3.3}/nltk/cluster/api.py +74 -70
  54. {nltk-3.2 → nltk-3.3}/nltk/cluster/em.py +247 -247
  55. {nltk-3.2 → nltk-3.3}/nltk/cluster/gaac.py +168 -168
  56. {nltk-3.2 → nltk-3.3}/nltk/cluster/kmeans.py +221 -221
  57. {nltk-3.2 → nltk-3.3}/nltk/cluster/util.py +304 -289
  58. nltk-3.3/nltk/collections.py +640 -0
  59. {nltk-3.2 → nltk-3.3}/nltk/collocations.py +388 -388
  60. nltk-3.3/nltk/compat.py +365 -0
  61. {nltk-3.2 → nltk-3.3}/nltk/corpus/__init__.py +341 -320
  62. {nltk-3.2 → nltk-3.3}/nltk/corpus/europarl_raw.py +44 -44
  63. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/__init__.py +147 -145
  64. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/aligned.py +115 -114
  65. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/api.py +448 -446
  66. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bnc.py +252 -252
  67. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +227 -227
  68. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +179 -178
  69. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chasen.py +140 -139
  70. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/childes.py +522 -494
  71. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chunked.py +212 -212
  72. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/cmudict.py +97 -95
  73. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +280 -278
  74. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/conll.py +528 -521
  75. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/crubadan.py +116 -116
  76. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/dependency.py +101 -101
  77. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/framenet.py +3059 -2093
  78. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ieer.py +112 -111
  79. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/indian.py +85 -86
  80. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ipipan.py +332 -331
  81. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/knbc.py +187 -187
  82. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/lin.py +156 -156
  83. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/mte.py +311 -310
  84. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nkjp.py +429 -428
  85. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nombank.py +421 -421
  86. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +73 -73
  87. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +115 -115
  88. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +165 -165
  89. nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
  90. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/plaintext.py +232 -233
  91. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ppattach.py +96 -95
  92. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/propbank.py +479 -481
  93. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +128 -126
  94. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/reviews.py +330 -328
  95. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/rte.py +144 -146
  96. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/semcor.py +256 -256
  97. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/senseval.py +203 -201
  98. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +137 -137
  99. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +75 -75
  100. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/string_category.py +60 -59
  101. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/switchboard.py +119 -119
  102. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/tagged.py +295 -294
  103. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/timit.py +452 -450
  104. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/toolbox.py +68 -68
  105. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/twitter.py +155 -157
  106. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/udhr.py +80 -80
  107. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/util.py +804 -800
  108. nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
  109. nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
  110. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/wordnet.py +2108 -2036
  111. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +392 -387
  112. {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ycoe.py +243 -242
  113. {nltk-3.2 → nltk-3.3}/nltk/corpus/util.py +144 -127
  114. {nltk-3.2 → nltk-3.3}/nltk/data.py +1487 -1451
  115. {nltk-3.2 → nltk-3.3}/nltk/decorators.py +219 -215
  116. {nltk-3.2 → nltk-3.3}/nltk/downloader.py +2278 -2274
  117. {nltk-3.2 → nltk-3.3}/nltk/draw/__init__.py +27 -27
  118. {nltk-3.2 → nltk-3.3}/nltk/draw/cfg.py +774 -777
  119. {nltk-3.2 → nltk-3.3}/nltk/draw/dispersion.py +58 -58
  120. {nltk-3.2 → nltk-3.3}/nltk/draw/table.py +1098 -1098
  121. {nltk-3.2 → nltk-3.3}/nltk/draw/tree.py +963 -966
  122. {nltk-3.2 → nltk-3.3}/nltk/draw/util.py +2356 -2356
  123. {nltk-3.2 → nltk-3.3}/nltk/featstruct.py +2617 -2500
  124. {nltk-3.2 → nltk-3.3}/nltk/grammar.py +1559 -1516
  125. {nltk-3.2 → nltk-3.3}/nltk/help.py +56 -56
  126. {nltk-3.2 → nltk-3.3}/nltk/inference/__init__.py +20 -20
  127. {nltk-3.2 → nltk-3.3}/nltk/inference/api.py +597 -589
  128. {nltk-3.2 → nltk-3.3}/nltk/inference/discourse.py +612 -608
  129. {nltk-3.2 → nltk-3.3}/nltk/inference/mace.py +311 -311
  130. {nltk-3.2 → nltk-3.3}/nltk/inference/nonmonotonic.py +509 -509
  131. {nltk-3.2 → nltk-3.3}/nltk/inference/prover9.py +431 -431
  132. {nltk-3.2 → nltk-3.3}/nltk/inference/resolution.py +687 -687
  133. {nltk-3.2 → nltk-3.3}/nltk/inference/tableau.py +607 -607
  134. {nltk-3.2 → nltk-3.3}/nltk/internals.py +982 -982
  135. {nltk-3.2 → nltk-3.3}/nltk/jsontags.py +63 -63
  136. {nltk-3.2 → nltk-3.3}/nltk/lazyimport.py +142 -142
  137. {nltk-3.2 → nltk-3.3}/nltk/metrics/__init__.py +30 -29
  138. {nltk-3.2 → nltk-3.3}/nltk/metrics/agreement.py +421 -401
  139. nltk-3.3/nltk/metrics/aline.py +607 -0
  140. {nltk-3.2 → nltk-3.3}/nltk/metrics/association.py +414 -410
  141. {nltk-3.2 → nltk-3.3}/nltk/metrics/confusionmatrix.py +206 -206
  142. {nltk-3.2 → nltk-3.3}/nltk/metrics/distance.py +207 -202
  143. {nltk-3.2 → nltk-3.3}/nltk/metrics/paice.py +381 -381
  144. {nltk-3.2 → nltk-3.3}/nltk/metrics/scores.py +228 -228
  145. {nltk-3.2 → nltk-3.3}/nltk/metrics/segmentation.py +231 -232
  146. {nltk-3.2 → nltk-3.3}/nltk/metrics/spearman.py +69 -69
  147. {nltk-3.2 → nltk-3.3}/nltk/misc/__init__.py +11 -11
  148. {nltk-3.2 → nltk-3.3}/nltk/misc/babelfish.py +10 -10
  149. {nltk-3.2 → nltk-3.3}/nltk/misc/chomsky.py +135 -133
  150. {nltk-3.2 → nltk-3.3}/nltk/misc/minimalset.py +83 -83
  151. {nltk-3.2 → nltk-3.3}/nltk/misc/sort.py +157 -157
  152. {nltk-3.2 → nltk-3.3}/nltk/misc/wordfinder.py +129 -129
  153. {nltk-3.2 → nltk-3.3}/nltk/parse/__init__.py +81 -80
  154. {nltk-3.2 → nltk-3.3}/nltk/parse/api.py +66 -66
  155. {nltk-3.2 → nltk-3.3}/nltk/parse/bllip.py +282 -282
  156. {nltk-3.2 → nltk-3.3}/nltk/parse/chart.py +1682 -1681
  157. nltk-3.3/nltk/parse/corenlp.py +780 -0
  158. {nltk-3.2 → nltk-3.3}/nltk/parse/dependencygraph.py +760 -758
  159. {nltk-3.2 → nltk-3.3}/nltk/parse/earleychart.py +452 -451
  160. {nltk-3.2 → nltk-3.3}/nltk/parse/evaluate.py +129 -129
  161. {nltk-3.2 → nltk-3.3}/nltk/parse/featurechart.py +580 -578
  162. {nltk-3.2 → nltk-3.3}/nltk/parse/generate.py +87 -76
  163. {nltk-3.2 → nltk-3.3}/nltk/parse/malt.py +356 -356
  164. {nltk-3.2 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +783 -783
  165. {nltk-3.2 → nltk-3.3}/nltk/parse/pchart.py +522 -522
  166. {nltk-3.2 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +579 -578
  167. {nltk-3.2 → nltk-3.3}/nltk/parse/recursivedescent.py +655 -656
  168. {nltk-3.2 → nltk-3.3}/nltk/parse/shiftreduce.py +458 -459
  169. {nltk-3.2 → nltk-3.3}/nltk/parse/stanford.py +431 -406
  170. {nltk-3.2 → nltk-3.3}/nltk/parse/transitionparser.py +774 -772
  171. {nltk-3.2 → nltk-3.3}/nltk/parse/util.py +231 -231
  172. {nltk-3.2 → nltk-3.3}/nltk/parse/viterbi.py +401 -401
  173. {nltk-3.2 → nltk-3.3}/nltk/probability.py +2410 -2355
  174. {nltk-3.2 → nltk-3.3}/nltk/sem/__init__.py +61 -61
  175. {nltk-3.2 → nltk-3.3}/nltk/sem/boxer.py +1261 -1261
  176. {nltk-3.2 → nltk-3.3}/nltk/sem/chat80.py +782 -782
  177. {nltk-3.2 → nltk-3.3}/nltk/sem/cooper_storage.py +118 -118
  178. {nltk-3.2 → nltk-3.3}/nltk/sem/drt.py +1258 -1257
  179. {nltk-3.2 → nltk-3.3}/nltk/sem/drt_glue_demo.py +485 -489
  180. {nltk-3.2 → nltk-3.3}/nltk/sem/evaluate.py +790 -784
  181. {nltk-3.2 → nltk-3.3}/nltk/sem/glue.py +696 -694
  182. {nltk-3.2 → nltk-3.3}/nltk/sem/hole.py +386 -384
  183. {nltk-3.2 → nltk-3.3}/nltk/sem/lfg.py +210 -208
  184. {nltk-3.2 → nltk-3.3}/nltk/sem/linearlogic.py +451 -449
  185. {nltk-3.2 → nltk-3.3}/nltk/sem/logic.py +1910 -1910
  186. {nltk-3.2 → nltk-3.3}/nltk/sem/relextract.py +476 -483
  187. {nltk-3.2 → nltk-3.3}/nltk/sem/skolemize.py +101 -101
  188. {nltk-3.2 → nltk-3.3}/nltk/sem/util.py +249 -249
  189. {nltk-3.2 → nltk-3.3}/nltk/sentiment/__init__.py +14 -14
  190. {nltk-3.2 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +229 -229
  191. {nltk-3.2 → nltk-3.3}/nltk/sentiment/util.py +762 -752
  192. {nltk-3.2 → nltk-3.3}/nltk/sentiment/vader.py +443 -445
  193. {nltk-3.2 → nltk-3.3}/nltk/stem/__init__.py +31 -33
  194. {nltk-3.2 → nltk-3.3}/nltk/stem/api.py +28 -25
  195. nltk-3.3/nltk/stem/arlstem.py +369 -0
  196. {nltk-3.2 → nltk-3.3}/nltk/stem/isri.py +345 -345
  197. {nltk-3.2 → nltk-3.3}/nltk/stem/lancaster.py +337 -310
  198. nltk-3.3/nltk/stem/porter.py +710 -0
  199. {nltk-3.2 → nltk-3.3}/nltk/stem/regexp.py +61 -61
  200. {nltk-3.2 → nltk-3.3}/nltk/stem/rslp.py +142 -142
  201. {nltk-3.2 → nltk-3.3}/nltk/stem/snowball.py +4236 -3712
  202. {nltk-3.2 → nltk-3.3}/nltk/stem/util.py +22 -12
  203. {nltk-3.2 → nltk-3.3}/nltk/stem/wordnet.py +51 -51
  204. {nltk-3.2 → nltk-3.3}/nltk/tag/__init__.py +152 -127
  205. {nltk-3.2 → nltk-3.3}/nltk/tag/api.py +86 -81
  206. {nltk-3.2 → nltk-3.3}/nltk/tag/brill.py +424 -426
  207. {nltk-3.2 → nltk-3.3}/nltk/tag/brill_trainer.py +608 -608
  208. {nltk-3.2 → nltk-3.3}/nltk/tag/crf.py +204 -200
  209. {nltk-3.2 → nltk-3.3}/nltk/tag/hmm.py +1277 -1277
  210. {nltk-3.2 → nltk-3.3}/nltk/tag/hunpos.py +132 -132
  211. {nltk-3.2 → nltk-3.3}/nltk/tag/mapping.py +101 -101
  212. {nltk-3.2 → nltk-3.3}/nltk/tag/perceptron.py +329 -314
  213. {nltk-3.2 → nltk-3.3}/nltk/tag/senna.py +147 -145
  214. {nltk-3.2 → nltk-3.3}/nltk/tag/sequential.py +740 -736
  215. {nltk-3.2 → nltk-3.3}/nltk/tag/stanford.py +219 -196
  216. {nltk-3.2 → nltk-3.3}/nltk/tag/tnt.py +595 -604
  217. {nltk-3.2 → nltk-3.3}/nltk/tag/util.py +72 -72
  218. {nltk-3.2 → nltk-3.3}/nltk/tbl/__init__.py +28 -28
  219. {nltk-3.2 → nltk-3.3}/nltk/tbl/api.py +1 -1
  220. {nltk-3.2 → nltk-3.3}/nltk/tbl/demo.py +366 -366
  221. {nltk-3.2 → nltk-3.3}/nltk/tbl/erroranalysis.py +39 -39
  222. {nltk-3.2 → nltk-3.3}/nltk/tbl/feature.py +259 -261
  223. {nltk-3.2 → nltk-3.3}/nltk/tbl/rule.py +321 -321
  224. {nltk-3.2 → nltk-3.3}/nltk/tbl/template.py +303 -308
  225. {nltk-3.2 → nltk-3.3}/nltk/test/__init__.py +18 -18
  226. {nltk-3.2 → nltk-3.3}/nltk/test/all.py +24 -23
  227. {nltk-3.2 → nltk-3.3}/nltk/test/bleu.doctest +14 -14
  228. {nltk-3.2 → nltk-3.3}/nltk/test/bnc.doctest +60 -60
  229. {nltk-3.2 → nltk-3.3}/nltk/test/ccg.doctest +376 -395
  230. nltk-3.3/nltk/test/ccg_semantics.doctest +553 -0
  231. {nltk-3.2 → nltk-3.3}/nltk/test/chat80.doctest +234 -234
  232. {nltk-3.2 → nltk-3.3}/nltk/test/childes.doctest +184 -184
  233. {nltk-3.2 → nltk-3.3}/nltk/test/childes_fixt.py +14 -13
  234. {nltk-3.2 → nltk-3.3}/nltk/test/chunk.doctest +373 -373
  235. {nltk-3.2 → nltk-3.3}/nltk/test/classify.doctest +185 -185
  236. {nltk-3.2 → nltk-3.3}/nltk/test/classify_fixt.py +11 -10
  237. nltk-3.3/nltk/test/collections.doctest +20 -0
  238. {nltk-3.2 → nltk-3.3}/nltk/test/collocations.doctest +276 -276
  239. {nltk-3.2 → nltk-3.3}/nltk/test/compat.doctest +134 -138
  240. {nltk-3.2 → nltk-3.3}/nltk/test/compat_fixt.py +9 -8
  241. nltk-3.3/nltk/test/concordance.doctest +55 -0
  242. {nltk-3.2 → nltk-3.3}/nltk/test/corpus.doctest +2200 -2212
  243. {nltk-3.2 → nltk-3.3}/nltk/test/corpus_fixt.py +3 -3
  244. {nltk-3.2 → nltk-3.3}/nltk/test/crubadan.doctest +65 -65
  245. {nltk-3.2 → nltk-3.3}/nltk/test/data.doctest +379 -379
  246. {nltk-3.2 → nltk-3.3}/nltk/test/dependency.doctest +241 -241
  247. {nltk-3.2 → nltk-3.3}/nltk/test/discourse.doctest +546 -546
  248. {nltk-3.2 → nltk-3.3}/nltk/test/discourse_fixt.py +14 -13
  249. {nltk-3.2 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +159 -156
  250. {nltk-3.2 → nltk-3.3}/nltk/test/drt.doctest +517 -517
  251. {nltk-3.2 → nltk-3.3}/nltk/test/featgram.doctest +607 -607
  252. {nltk-3.2 → nltk-3.3}/nltk/test/featstruct.doctest +1229 -1230
  253. {nltk-3.2 → nltk-3.3}/nltk/test/framenet.doctest +288 -239
  254. {nltk-3.2 → nltk-3.3}/nltk/test/generate.doctest +67 -67
  255. {nltk-3.2 → nltk-3.3}/nltk/test/gensim.doctest +140 -141
  256. {nltk-3.2 → nltk-3.3}/nltk/test/gensim_fixt.py +10 -9
  257. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics.doctest +384 -386
  258. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +68 -68
  259. {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +12 -11
  260. {nltk-3.2 → nltk-3.3}/nltk/test/grammar.doctest +48 -48
  261. {nltk-3.2 → nltk-3.3}/nltk/test/grammartestsuites.doctest +109 -109
  262. {nltk-3.2 → nltk-3.3}/nltk/test/index.doctest +100 -100
  263. {nltk-3.2 → nltk-3.3}/nltk/test/inference.doctest +534 -534
  264. {nltk-3.2 → nltk-3.3}/nltk/test/inference_fixt.py +12 -11
  265. {nltk-3.2 → nltk-3.3}/nltk/test/internals.doctest +140 -140
  266. {nltk-3.2 → nltk-3.3}/nltk/test/japanese.doctest +48 -48
  267. {nltk-3.2 → nltk-3.3}/nltk/test/logic.doctest +1098 -1098
  268. {nltk-3.2 → nltk-3.3}/nltk/test/metrics.doctest +270 -270
  269. {nltk-3.2 → nltk-3.3}/nltk/test/misc.doctest +118 -118
  270. {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic.doctest +286 -286
  271. {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +12 -11
  272. {nltk-3.2 → nltk-3.3}/nltk/test/paice.doctest +35 -35
  273. {nltk-3.2 → nltk-3.3}/nltk/test/parse.doctest +884 -884
  274. {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en.doctest +565 -565
  275. {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +16 -16
  276. {nltk-3.2 → nltk-3.3}/nltk/test/probability.doctest +304 -304
  277. {nltk-3.2 → nltk-3.3}/nltk/test/probability_fixt.py +13 -12
  278. {nltk-3.2 → nltk-3.3}/nltk/test/propbank.doctest +176 -176
  279. {nltk-3.2 → nltk-3.3}/nltk/test/relextract.doctest +263 -263
  280. {nltk-3.2 → nltk-3.3}/nltk/test/resolution.doctest +221 -221
  281. {nltk-3.2 → nltk-3.3}/nltk/test/runtests.py +86 -64
  282. {nltk-3.2 → nltk-3.3}/nltk/test/segmentation_fixt.py +10 -10
  283. {nltk-3.2 → nltk-3.3}/nltk/test/semantics.doctest +665 -665
  284. {nltk-3.2 → nltk-3.3}/nltk/test/semantics_fixt.py +7 -7
  285. {nltk-3.2 → nltk-3.3}/nltk/test/sentiment.doctest +233 -233
  286. {nltk-3.2 → nltk-3.3}/nltk/test/sentiwordnet.doctest +41 -41
  287. {nltk-3.2 → nltk-3.3}/nltk/test/simple.doctest +85 -85
  288. {nltk-3.2 → nltk-3.3}/nltk/test/stem.doctest +78 -78
  289. {nltk-3.2 → nltk-3.3}/nltk/test/tag.doctest +33 -33
  290. {nltk-3.2 → nltk-3.3}/nltk/test/tokenize.doctest +273 -166
  291. {nltk-3.2 → nltk-3.3}/nltk/test/toolbox.doctest +307 -307
  292. {nltk-3.2 → nltk-3.3}/nltk/test/translate.doctest +242 -242
  293. {nltk-3.2 → nltk-3.3}/nltk/test/translate_fixt.py +3 -3
  294. {nltk-3.2 → nltk-3.3}/nltk/test/tree.doctest +1101 -1101
  295. {nltk-3.2 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +127 -127
  296. {nltk-3.2 → nltk-3.3}/nltk/test/treetransforms.doctest +156 -156
  297. nltk-3.3/nltk/test/unit/test_2x_compat.py +63 -0
  298. nltk-3.3/nltk/test/unit/test_aline.py +52 -0
  299. nltk-3.3/nltk/test/unit/test_chunk.py +56 -0
  300. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_classify.py +55 -53
  301. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_collocations.py +88 -79
  302. nltk-3.3/nltk/test/unit/test_concordance.py +98 -0
  303. nltk-3.3/nltk/test/unit/test_corenlp.py +1000 -0
  304. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpora.py +200 -183
  305. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +45 -45
  306. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_hmm.py +88 -88
  307. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +188 -187
  308. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +26 -26
  309. nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
  310. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +124 -124
  311. nltk-3.3/nltk/test/unit/test_senna.py +74 -0
  312. nltk-3.3/nltk/test/unit/test_stem.py +121 -0
  313. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tag.py +20 -20
  314. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tgrep.py +628 -626
  315. nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
  316. {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +185 -185
  317. nltk-3.3/nltk/test/unit/test_wordnet.py +134 -0
  318. nltk-3.3/nltk/test/unit/translate/test_bleu.py +244 -0
  319. nltk-3.3/nltk/test/unit/translate/test_gdfa.py +57 -0
  320. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +75 -75
  321. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +87 -87
  322. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +105 -105
  323. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +126 -126
  324. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +166 -166
  325. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +270 -270
  326. nltk-3.3/nltk/test/unit/translate/test_nist.py +37 -0
  327. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +300 -300
  328. {nltk-3.2 → nltk-3.3}/nltk/test/unit/utils.py +41 -41
  329. {nltk-3.2 → nltk-3.3}/nltk/test/util.doctest +48 -48
  330. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet.doctest +595 -581
  331. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_fixt.py +7 -6
  332. {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_lch.doctest +53 -53
  333. {nltk-3.2 → nltk-3.3}/nltk/test/wsd.doctest +68 -68
  334. {nltk-3.2 → nltk-3.3}/nltk/text.py +663 -610
  335. {nltk-3.2 → nltk-3.3}/nltk/tgrep.py +938 -937
  336. {nltk-3.2 → nltk-3.3}/nltk/tokenize/__init__.py +130 -107
  337. {nltk-3.2 → nltk-3.3}/nltk/tokenize/api.py +77 -78
  338. {nltk-3.2 → nltk-3.3}/nltk/tokenize/casual.py +343 -342
  339. {nltk-3.2 → nltk-3.3}/nltk/tokenize/mwe.py +120 -120
  340. nltk-3.3/nltk/tokenize/nist.py +173 -0
  341. {nltk-3.2 → nltk-3.3}/nltk/tokenize/punkt.py +1620 -1601
  342. {nltk-3.2 → nltk-3.3}/nltk/tokenize/regexp.py +208 -202
  343. nltk-3.3/nltk/tokenize/repp.py +151 -0
  344. {nltk-3.2 → nltk-3.3}/nltk/tokenize/sexpr.py +140 -142
  345. {nltk-3.2 → nltk-3.3}/nltk/tokenize/simple.py +138 -136
  346. {nltk-3.2 → nltk-3.3}/nltk/tokenize/stanford.py +117 -113
  347. nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
  348. {nltk-3.2 → nltk-3.3}/nltk/tokenize/texttiling.py +458 -460
  349. nltk-3.3/nltk/tokenize/toktok.py +155 -0
  350. nltk-3.3/nltk/tokenize/treebank.py +363 -0
  351. nltk-3.3/nltk/tokenize/util.py +261 -0
  352. {nltk-3.2 → nltk-3.3}/nltk/toolbox.py +499 -497
  353. {nltk-3.2 → nltk-3.3}/nltk/translate/__init__.py +24 -24
  354. {nltk-3.2 → nltk-3.3}/nltk/translate/api.py +331 -321
  355. {nltk-3.2 → nltk-3.3}/nltk/translate/bleu_score.py +615 -556
  356. nltk-3.3/nltk/translate/chrf_score.py +137 -0
  357. {nltk-3.2 → nltk-3.3}/nltk/translate/gale_church.py +248 -235
  358. {nltk-3.2 → nltk-3.3}/nltk/translate/gdfa.py +135 -131
  359. nltk-3.3/nltk/translate/gleu_score.py +193 -0
  360. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm1.py +250 -241
  361. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm2.py +308 -308
  362. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm3.py +337 -337
  363. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm4.py +467 -467
  364. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm5.py +639 -639
  365. {nltk-3.2 → nltk-3.3}/nltk/translate/ibm_model.py +536 -533
  366. {nltk-3.2 → nltk-3.3}/nltk/translate/metrics.py +40 -40
  367. nltk-3.3/nltk/translate/nist_score.py +178 -0
  368. {nltk-3.2 → nltk-3.3}/nltk/translate/phrase_based.py +175 -175
  369. {nltk-3.2 → nltk-3.3}/nltk/translate/ribes_score.py +325 -325
  370. {nltk-3.2 → nltk-3.3}/nltk/translate/stack_decoder.py +499 -495
  371. {nltk-3.2 → nltk-3.3}/nltk/tree.py +1605 -1603
  372. {nltk-3.2 → nltk-3.3}/nltk/treeprettyprinter.py +564 -564
  373. {nltk-3.2 → nltk-3.3}/nltk/treetransforms.py +309 -309
  374. {nltk-3.2 → nltk-3.3}/nltk/twitter/__init__.py +28 -28
  375. {nltk-3.2 → nltk-3.3}/nltk/twitter/api.py +141 -136
  376. {nltk-3.2 → nltk-3.3}/nltk/twitter/common.py +264 -258
  377. {nltk-3.2 → nltk-3.3}/nltk/twitter/twitter_demo.py +288 -288
  378. {nltk-3.2 → nltk-3.3}/nltk/twitter/twitterclient.py +530 -530
  379. {nltk-3.2 → nltk-3.3}/nltk/twitter/util.py +147 -146
  380. nltk-3.3/nltk/util.py +751 -0
  381. {nltk-3.2 → nltk-3.3}/nltk/wsd.py +53 -53
  382. {nltk-3.2 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
  383. {nltk-3.2 → nltk-3.3}/nltk.egg-info/SOURCES.txt +26 -3
  384. nltk-3.3/nltk.egg-info/requires.txt +31 -0
  385. {nltk-3.2 → nltk-3.3}/setup.cfg +0 -1
  386. {nltk-3.2 → nltk-3.3}/setup.py +102 -75
  387. nltk-3.2/nltk/VERSION +0 -1
  388. nltk-3.2/nltk/compat.py +0 -680
  389. nltk-3.2/nltk/corpus/reader/pl196x.py +0 -278
  390. nltk-3.2/nltk/corpus/reader/verbnet.py +0 -408
  391. nltk-3.2/nltk/corpus/reader/wordlist.py +0 -37
  392. nltk-3.2/nltk/sentiment/vader_lexicon.txt +0 -7517
  393. nltk-3.2/nltk/six.py +0 -868
  394. nltk-3.2/nltk/stem/porter.py +0 -692
  395. nltk-3.2/nltk/test/unit/test_2x_compat.py +0 -26
  396. nltk-3.2/nltk/test/unit/test_stem.py +0 -36
  397. nltk-3.2/nltk/test/unit/test_tokenize.py +0 -23
  398. nltk-3.2/nltk/test/unit/translate/test_bleu.py +0 -84
  399. nltk-3.2/nltk/tokenize/treebank.py +0 -124
  400. nltk-3.2/nltk/tokenize/util.py +0 -90
  401. nltk-3.2/nltk/util.py +0 -1364
  402. {nltk-3.2 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
  403. {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
  404. {nltk-3.2 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
  405. {nltk-3.2 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
  406. {nltk-3.2 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
@@ -1,450 +1,452 @@
1
- # Natural Language Toolkit: TIMIT Corpus Reader
2
- #
3
- # Copyright (C) 2001-2007 NLTK Project
4
- # Author: Haejoong Lee <haejoong@ldc.upenn.edu>
5
- # Steven Bird <stevenbird1@gmail.com>
6
- # Jacob Perkins <japerk@gmail.com>
7
- # URL: <http://nltk.org/>
8
- # For license information, see LICENSE.TXT
9
-
10
- # [xx] this docstring is out-of-date:
11
- """
12
- Read tokens, phonemes and audio data from the NLTK TIMIT Corpus.
13
-
14
- This corpus contains selected portion of the TIMIT corpus.
15
-
16
- - 16 speakers from 8 dialect regions
17
- - 1 male and 1 female from each dialect region
18
- - total 130 sentences (10 sentences per speaker. Note that some
19
- sentences are shared among other speakers, especially sa1 and sa2
20
- are spoken by all speakers.)
21
- - total 160 recording of sentences (10 recordings per speaker)
22
- - audio format: NIST Sphere, single channel, 16kHz sampling,
23
- 16 bit sample, PCM encoding
24
-
25
-
26
- Module contents
27
- ===============
28
-
29
- The timit corpus reader provides 4 functions and 4 data items.
30
-
31
- - utterances
32
-
33
- List of utterances in the corpus. There are total 160 utterances,
34
- each of which corresponds to a unique utterance of a speaker.
35
- Here's an example of an utterance identifier in the list::
36
-
37
- dr1-fvmh0/sx206
38
- - _---- _---
39
- | | | | |
40
- | | | | |
41
- | | | | `--- sentence number
42
- | | | `----- sentence type (a:all, i:shared, x:exclusive)
43
- | | `--------- speaker ID
44
- | `------------ sex (m:male, f:female)
45
- `-------------- dialect region (1..8)
46
-
47
- - speakers
48
-
49
- List of speaker IDs. An example of speaker ID::
50
-
51
- dr1-fvmh0
52
-
53
- Note that if you split an item ID with colon and take the first element of
54
- the result, you will get a speaker ID.
55
-
56
- >>> itemid = 'dr1-fvmh0/sx206'
57
- >>> spkrid , sentid = itemid.split('/')
58
- >>> spkrid
59
- 'dr1-fvmh0'
60
-
61
- The second element of the result is a sentence ID.
62
-
63
- - dictionary()
64
-
65
- Phonetic dictionary of words contained in this corpus. This is a Python
66
- dictionary from words to phoneme lists.
67
-
68
- - spkrinfo()
69
-
70
- Speaker information table. It's a Python dictionary from speaker IDs to
71
- records of 10 fields. Speaker IDs the same as the ones in timie.speakers.
72
- Each record is a dictionary from field names to values, and the fields are
73
- as follows::
74
-
75
- id speaker ID as defined in the original TIMIT speaker info table
76
- sex speaker gender (M:male, F:female)
77
- dr speaker dialect region (1:new england, 2:northern,
78
- 3:north midland, 4:south midland, 5:southern, 6:new york city,
79
- 7:western, 8:army brat (moved around))
80
- use corpus type (TRN:training, TST:test)
81
- in this sample corpus only TRN is available
82
- recdate recording date
83
- birthdate speaker birth date
84
- ht speaker height
85
- race speaker race (WHT:white, BLK:black, AMR:american indian,
86
- SPN:spanish-american, ORN:oriental,???:unknown)
87
- edu speaker education level (HS:high school, AS:associate degree,
88
- BS:bachelor's degree (BS or BA), MS:master's degree (MS or MA),
89
- PHD:doctorate degree (PhD,JD,MD), ??:unknown)
90
- comments comments by the recorder
91
-
92
- The 4 functions are as follows.
93
-
94
- - tokenized(sentences=items, offset=False)
95
-
96
- Given a list of items, returns an iterator of a list of word lists,
97
- each of which corresponds to an item (sentence). If offset is set to True,
98
- each element of the word list is a tuple of word(string), start offset and
99
- end offset, where offset is represented as a number of 16kHz samples.
100
-
101
- - phonetic(sentences=items, offset=False)
102
-
103
- Given a list of items, returns an iterator of a list of phoneme lists,
104
- each of which corresponds to an item (sentence). If offset is set to True,
105
- each element of the phoneme list is a tuple of word(string), start offset
106
- and end offset, where offset is represented as a number of 16kHz samples.
107
-
108
- - audiodata(item, start=0, end=None)
109
-
110
- Given an item, returns a chunk of audio samples formatted into a string.
111
- When the fuction is called, if start and end are omitted, the entire
112
- samples of the recording will be returned. If only end is omitted,
113
- samples from the start offset to the end of the recording will be returned.
114
-
115
- - play(data)
116
-
117
- Play the given audio samples. The audio samples can be obtained from the
118
- timit.audiodata function.
119
-
120
- """
121
- from __future__ import print_function, unicode_literals
122
-
123
- import sys
124
- import os
125
- import re
126
- import tempfile
127
- import time
128
-
129
- from nltk import compat
130
- from nltk.tree import Tree
131
- from nltk.internals import import_from_stdlib
132
-
133
- from nltk.corpus.reader.util import *
134
- from nltk.corpus.reader.api import *
135
-
136
- class TimitCorpusReader(CorpusReader):
137
- """
138
- Reader for the TIMIT corpus (or any other corpus with the same
139
- file layout and use of file formats). The corpus root directory
140
- should contain the following files:
141
-
142
- - timitdic.txt: dictionary of standard transcriptions
143
- - spkrinfo.txt: table of speaker information
144
-
145
- In addition, the root directory should contain one subdirectory
146
- for each speaker, containing three files for each utterance:
147
-
148
- - <utterance-id>.txt: text content of utterances
149
- - <utterance-id>.wrd: tokenized text content of utterances
150
- - <utterance-id>.phn: phonetic transcription of utterances
151
- - <utterance-id>.wav: utterance sound file
152
- """
153
-
154
- _FILE_RE = (r'(\w+-\w+/\w+\.(phn|txt|wav|wrd))|' +
155
- r'timitdic\.txt|spkrinfo\.txt')
156
- """A regexp matching fileids that are used by this corpus reader."""
157
- _UTTERANCE_RE = r'\w+-\w+/\w+\.txt'
158
-
159
- def __init__(self, root, encoding='utf8'):
160
- """
161
- Construct a new TIMIT corpus reader in the given directory.
162
- :param root: The root directory for this corpus.
163
- """
164
- # Ensure that wave files don't get treated as unicode data:
165
- if isinstance(encoding, compat.string_types):
166
- encoding = [('.*\.wav', None), ('.*', encoding)]
167
-
168
- CorpusReader.__init__(self, root,
169
- find_corpus_fileids(root, self._FILE_RE),
170
- encoding=encoding)
171
-
172
- self._utterances = [name[:-4] for name in
173
- find_corpus_fileids(root, self._UTTERANCE_RE)]
174
- """A list of the utterance identifiers for all utterances in
175
- this corpus."""
176
-
177
- self._speakerinfo = None
178
- self._root = root
179
- self.speakers = sorted(set(u.split('/')[0] for u in self._utterances))
180
-
181
- def fileids(self, filetype=None):
182
- """
183
- Return a list of file identifiers for the files that make up
184
- this corpus.
185
-
186
- :param filetype: If specified, then ``filetype`` indicates that
187
- only the files that have the given type should be
188
- returned. Accepted values are: ``txt``, ``wrd``, ``phn``,
189
- ``wav``, or ``metadata``,
190
- """
191
- if filetype is None:
192
- return CorpusReader.fileids(self)
193
- elif filetype in ('txt', 'wrd', 'phn', 'wav'):
194
- return ['%s.%s' % (u, filetype) for u in self._utterances]
195
- elif filetype == 'metadata':
196
- return ['timitdic.txt', 'spkrinfo.txt']
197
- else:
198
- raise ValueError('Bad value for filetype: %r' % filetype)
199
-
200
- def utteranceids(self, dialect=None, sex=None, spkrid=None,
201
- sent_type=None, sentid=None):
202
- """
203
- :return: A list of the utterance identifiers for all
204
- utterances in this corpus, or for the given speaker, dialect
205
- region, gender, sentence type, or sentence number, if
206
- specified.
207
- """
208
- if isinstance(dialect, compat.string_types): dialect = [dialect]
209
- if isinstance(sex, compat.string_types): sex = [sex]
210
- if isinstance(spkrid, compat.string_types): spkrid = [spkrid]
211
- if isinstance(sent_type, compat.string_types): sent_type = [sent_type]
212
- if isinstance(sentid, compat.string_types): sentid = [sentid]
213
-
214
- utterances = self._utterances[:]
215
- if dialect is not None:
216
- utterances = [u for u in utterances if u[2] in dialect]
217
- if sex is not None:
218
- utterances = [u for u in utterances if u[4] in sex]
219
- if spkrid is not None:
220
- utterances = [u for u in utterances if u[:9] in spkrid]
221
- if sent_type is not None:
222
- utterances = [u for u in utterances if u[11] in sent_type]
223
- if sentid is not None:
224
- utterances = [u for u in utterances if u[10:] in spkrid]
225
- return utterances
226
-
227
- def transcription_dict(self):
228
- """
229
- :return: A dictionary giving the 'standard' transcription for
230
- each word.
231
- """
232
- _transcriptions = {}
233
- for line in self.open('timitdic.txt'):
234
- if not line.strip() or line[0] == ';': continue
235
- m = re.match(r'\s*(\S+)\s+/(.*)/\s*$', line)
236
- if not m: raise ValueError('Bad line: %r' % line)
237
- _transcriptions[m.group(1)] = m.group(2).split()
238
- return _transcriptions
239
-
240
- def spkrid(self, utterance):
241
- return utterance.split('/')[0]
242
-
243
- def sentid(self, utterance):
244
- return utterance.split('/')[1]
245
-
246
- def utterance(self, spkrid, sentid):
247
- return '%s/%s' % (spkrid, sentid)
248
-
249
- def spkrutteranceids(self, speaker):
250
- """
251
- :return: A list of all utterances associated with a given
252
- speaker.
253
- """
254
- return [utterance for utterance in self._utterances
255
- if utterance.startswith(speaker+'/')]
256
-
257
- def spkrinfo(self, speaker):
258
- """
259
- :return: A dictionary mapping .. something.
260
- """
261
- if speaker in self._utterances:
262
- speaker = self.spkrid(speaker)
263
-
264
- if self._speakerinfo is None:
265
- self._speakerinfo = {}
266
- for line in self.open('spkrinfo.txt'):
267
- if not line.strip() or line[0] == ';': continue
268
- rec = line.strip().split(None, 9)
269
- key = "dr%s-%s%s" % (rec[2],rec[1].lower(),rec[0].lower())
270
- self._speakerinfo[key] = SpeakerInfo(*rec)
271
-
272
- return self._speakerinfo[speaker]
273
-
274
- def phones(self, utterances=None):
275
- return [line.split()[-1]
276
- for fileid in self._utterance_fileids(utterances, '.phn')
277
- for line in self.open(fileid) if line.strip()]
278
-
279
- def phone_times(self, utterances=None):
280
- """
281
- offset is represented as a number of 16kHz samples!
282
- """
283
- return [(line.split()[2], int(line.split()[0]), int(line.split()[1]))
284
- for fileid in self._utterance_fileids(utterances, '.phn')
285
- for line in self.open(fileid) if line.strip()]
286
-
287
- def words(self, utterances=None):
288
- return [line.split()[-1]
289
- for fileid in self._utterance_fileids(utterances, '.wrd')
290
- for line in self.open(fileid) if line.strip()]
291
-
292
- def word_times(self, utterances=None):
293
- return [(line.split()[2], int(line.split()[0]), int(line.split()[1]))
294
- for fileid in self._utterance_fileids(utterances, '.wrd')
295
- for line in self.open(fileid) if line.strip()]
296
-
297
- def sents(self, utterances=None):
298
- return [[line.split()[-1]
299
- for line in self.open(fileid) if line.strip()]
300
- for fileid in self._utterance_fileids(utterances, '.wrd')]
301
-
302
- def sent_times(self, utterances=None):
303
- return [(line.split(None,2)[-1].strip(),
304
- int(line.split()[0]), int(line.split()[1]))
305
- for fileid in self._utterance_fileids(utterances, '.txt')
306
- for line in self.open(fileid) if line.strip()]
307
-
308
- def phone_trees(self, utterances=None):
309
- if utterances is None: utterances = self._utterances
310
- if isinstance(utterances, compat.string_types): utterances = [utterances]
311
-
312
- trees = []
313
- for utterance in utterances:
314
- word_times = self.word_times(utterance)
315
- phone_times = self.phone_times(utterance)
316
- sent_times = self.sent_times(utterance)
317
-
318
- while sent_times:
319
- (sent, sent_start, sent_end) = sent_times.pop(0)
320
- trees.append(Tree('S', []))
321
- while (word_times and phone_times and
322
- phone_times[0][2] <= word_times[0][1]):
323
- trees[-1].append(phone_times.pop(0)[0])
324
- while word_times and word_times[0][2] <= sent_end:
325
- (word, word_start, word_end) = word_times.pop(0)
326
- trees[-1].append(Tree(word, []))
327
- while phone_times and phone_times[0][2] <= word_end:
328
- trees[-1][-1].append(phone_times.pop(0)[0])
329
- while phone_times and phone_times[0][2] <= sent_end:
330
- trees[-1].append(phone_times.pop(0)[0])
331
- return trees
332
-
333
- # [xx] NOTE: This is currently broken -- we're assuming that the
334
- # fileids are WAV fileids (aka RIFF), but they're actually NIST SPHERE
335
- # fileids.
336
- def wav(self, utterance, start=0, end=None):
337
- # nltk.chunk conflicts with the stdlib module 'chunk'
338
- wave = import_from_stdlib('wave')
339
-
340
- w = wave.open(self.open(utterance+'.wav'), 'rb')
341
-
342
- if end is None:
343
- end = w.getnframes()
344
-
345
- # Skip past frames before start, then read the frames we want
346
- w.readframes(start)
347
- frames = w.readframes(end-start)
348
-
349
- # Open a new temporary file -- the wave module requires
350
- # an actual file, and won't work w/ stringio. :(
351
- tf = tempfile.TemporaryFile()
352
- out = wave.open(tf, 'w')
353
-
354
- # Write the parameters & data to the new file.
355
- out.setparams(w.getparams())
356
- out.writeframes(frames)
357
- out.close()
358
-
359
- # Read the data back from the file, and return it. The
360
- # file will automatically be deleted when we return.
361
- tf.seek(0)
362
- return tf.read()
363
-
364
- def audiodata(self, utterance, start=0, end=None):
365
- assert(end is None or end > start)
366
- headersize = 44
367
- if end is None:
368
- data = self.open(utterance+'.wav').read()
369
- else:
370
- data = self.open(utterance+'.wav').read(headersize+end*2)
371
- return data[headersize+start*2:]
372
-
373
- def _utterance_fileids(self, utterances, extension):
374
- if utterances is None: utterances = self._utterances
375
- if isinstance(utterances, compat.string_types): utterances = [utterances]
376
- return ['%s%s' % (u, extension) for u in utterances]
377
-
378
- def play(self, utterance, start=0, end=None):
379
- """
380
- Play the given audio sample.
381
-
382
- :param utterance: The utterance id of the sample to play
383
- """
384
- # Method 1: os audio dev.
385
- try:
386
- import ossaudiodev
387
- try:
388
- dsp = ossaudiodev.open('w')
389
- dsp.setfmt(ossaudiodev.AFMT_S16_LE)
390
- dsp.channels(1)
391
- dsp.speed(16000)
392
- dsp.write(self.audiodata(utterance, start, end))
393
- dsp.close()
394
- except IOError as e:
395
- print(("can't acquire the audio device; please "
396
- "activate your audio device."), file=sys.stderr)
397
- print("system error message:", str(e), file=sys.stderr)
398
- return
399
- except ImportError:
400
- pass
401
-
402
- # Method 2: pygame
403
- try:
404
- # FIXME: this won't work under python 3
405
- import pygame.mixer, StringIO
406
- pygame.mixer.init(16000)
407
- f = StringIO.StringIO(self.wav(utterance, start, end))
408
- pygame.mixer.Sound(f).play()
409
- while pygame.mixer.get_busy():
410
- time.sleep(0.01)
411
- return
412
- except ImportError:
413
- pass
414
-
415
- # Method 3: complain. :)
416
- print(("you must install pygame or ossaudiodev "
417
- "for audio playback."), file=sys.stderr)
418
-
419
-
420
- @compat.python_2_unicode_compatible
421
- class SpeakerInfo(object):
422
- def __init__(self, id, sex, dr, use, recdate, birthdate,
423
- ht, race, edu, comments=None):
424
- self.id = id
425
- self.sex = sex
426
- self.dr = dr
427
- self.use = use
428
- self.recdate = recdate
429
- self.birthdate = birthdate
430
- self.ht = ht
431
- self.race = race
432
- self.edu = edu
433
- self.comments = comments
434
-
435
- def __repr__(self):
436
- attribs = 'id sex dr use recdate birthdate ht race edu comments'
437
- args = ['%s=%r' % (attr, getattr(self, attr))
438
- for attr in attribs.split()]
439
- return 'SpeakerInfo(%s)' % (', '.join(args))
440
-
441
-
442
- def read_timit_block(stream):
443
- """
444
- Block reader for timit tagged sentences, which are preceded by a sentence
445
- number that will be ignored.
446
- """
447
- line = stream.readline()
448
- if not line: return []
449
- n, sent = line.split(' ', 1)
450
- return [sent]
1
+ # Natural Language Toolkit: TIMIT Corpus Reader
2
+ #
3
+ # Copyright (C) 2001-2007 NLTK Project
4
+ # Author: Haejoong Lee <haejoong@ldc.upenn.edu>
5
+ # Steven Bird <stevenbird1@gmail.com>
6
+ # Jacob Perkins <japerk@gmail.com>
7
+ # URL: <http://nltk.org/>
8
+ # For license information, see LICENSE.TXT
9
+
10
+ # [xx] this docstring is out-of-date:
11
+ """
12
+ Read tokens, phonemes and audio data from the NLTK TIMIT Corpus.
13
+
14
+ This corpus contains selected portion of the TIMIT corpus.
15
+
16
+ - 16 speakers from 8 dialect regions
17
+ - 1 male and 1 female from each dialect region
18
+ - total 130 sentences (10 sentences per speaker. Note that some
19
+ sentences are shared among other speakers, especially sa1 and sa2
20
+ are spoken by all speakers.)
21
+ - total 160 recording of sentences (10 recordings per speaker)
22
+ - audio format: NIST Sphere, single channel, 16kHz sampling,
23
+ 16 bit sample, PCM encoding
24
+
25
+
26
+ Module contents
27
+ ===============
28
+
29
+ The timit corpus reader provides 4 functions and 4 data items.
30
+
31
+ - utterances
32
+
33
+ List of utterances in the corpus. There are total 160 utterances,
34
+ each of which corresponds to a unique utterance of a speaker.
35
+ Here's an example of an utterance identifier in the list::
36
+
37
+ dr1-fvmh0/sx206
38
+ - _---- _---
39
+ | | | | |
40
+ | | | | |
41
+ | | | | `--- sentence number
42
+ | | | `----- sentence type (a:all, i:shared, x:exclusive)
43
+ | | `--------- speaker ID
44
+ | `------------ sex (m:male, f:female)
45
+ `-------------- dialect region (1..8)
46
+
47
+ - speakers
48
+
49
+ List of speaker IDs. An example of speaker ID::
50
+
51
+ dr1-fvmh0
52
+
53
+ Note that if you split an item ID with colon and take the first element of
54
+ the result, you will get a speaker ID.
55
+
56
+ >>> itemid = 'dr1-fvmh0/sx206'
57
+ >>> spkrid , sentid = itemid.split('/')
58
+ >>> spkrid
59
+ 'dr1-fvmh0'
60
+
61
+ The second element of the result is a sentence ID.
62
+
63
+ - dictionary()
64
+
65
+ Phonetic dictionary of words contained in this corpus. This is a Python
66
+ dictionary from words to phoneme lists.
67
+
68
+ - spkrinfo()
69
+
70
+ Speaker information table. It's a Python dictionary from speaker IDs to
71
+ records of 10 fields. Speaker IDs the same as the ones in timie.speakers.
72
+ Each record is a dictionary from field names to values, and the fields are
73
+ as follows::
74
+
75
+ id speaker ID as defined in the original TIMIT speaker info table
76
+ sex speaker gender (M:male, F:female)
77
+ dr speaker dialect region (1:new england, 2:northern,
78
+ 3:north midland, 4:south midland, 5:southern, 6:new york city,
79
+ 7:western, 8:army brat (moved around))
80
+ use corpus type (TRN:training, TST:test)
81
+ in this sample corpus only TRN is available
82
+ recdate recording date
83
+ birthdate speaker birth date
84
+ ht speaker height
85
+ race speaker race (WHT:white, BLK:black, AMR:american indian,
86
+ SPN:spanish-american, ORN:oriental,???:unknown)
87
+ edu speaker education level (HS:high school, AS:associate degree,
88
+ BS:bachelor's degree (BS or BA), MS:master's degree (MS or MA),
89
+ PHD:doctorate degree (PhD,JD,MD), ??:unknown)
90
+ comments comments by the recorder
91
+
92
+ The 4 functions are as follows.
93
+
94
+ - tokenized(sentences=items, offset=False)
95
+
96
+ Given a list of items, returns an iterator of a list of word lists,
97
+ each of which corresponds to an item (sentence). If offset is set to True,
98
+ each element of the word list is a tuple of word(string), start offset and
99
+ end offset, where offset is represented as a number of 16kHz samples.
100
+
101
+ - phonetic(sentences=items, offset=False)
102
+
103
+ Given a list of items, returns an iterator of a list of phoneme lists,
104
+ each of which corresponds to an item (sentence). If offset is set to True,
105
+ each element of the phoneme list is a tuple of word(string), start offset
106
+ and end offset, where offset is represented as a number of 16kHz samples.
107
+
108
+ - audiodata(item, start=0, end=None)
109
+
110
+ Given an item, returns a chunk of audio samples formatted into a string.
111
+ When the fuction is called, if start and end are omitted, the entire
112
+ samples of the recording will be returned. If only end is omitted,
113
+ samples from the start offset to the end of the recording will be returned.
114
+
115
+ - play(data)
116
+
117
+ Play the given audio samples. The audio samples can be obtained from the
118
+ timit.audiodata function.
119
+
120
+ """
121
+ from __future__ import print_function, unicode_literals
122
+
123
+ import sys
124
+ import os
125
+ import re
126
+ import tempfile
127
+ import time
128
+
129
+ from six import string_types
130
+
131
+ from nltk import compat
132
+ from nltk.tree import Tree
133
+ from nltk.internals import import_from_stdlib
134
+
135
+ from nltk.corpus.reader.util import *
136
+ from nltk.corpus.reader.api import *
137
+
138
+ class TimitCorpusReader(CorpusReader):
139
+ """
140
+ Reader for the TIMIT corpus (or any other corpus with the same
141
+ file layout and use of file formats). The corpus root directory
142
+ should contain the following files:
143
+
144
+ - timitdic.txt: dictionary of standard transcriptions
145
+ - spkrinfo.txt: table of speaker information
146
+
147
+ In addition, the root directory should contain one subdirectory
148
+ for each speaker, containing three files for each utterance:
149
+
150
+ - <utterance-id>.txt: text content of utterances
151
+ - <utterance-id>.wrd: tokenized text content of utterances
152
+ - <utterance-id>.phn: phonetic transcription of utterances
153
+ - <utterance-id>.wav: utterance sound file
154
+ """
155
+
156
+ _FILE_RE = (r'(\w+-\w+/\w+\.(phn|txt|wav|wrd))|' +
157
+ r'timitdic\.txt|spkrinfo\.txt')
158
+ """A regexp matching fileids that are used by this corpus reader."""
159
+ _UTTERANCE_RE = r'\w+-\w+/\w+\.txt'
160
+
161
+ def __init__(self, root, encoding='utf8'):
162
+ """
163
+ Construct a new TIMIT corpus reader in the given directory.
164
+ :param root: The root directory for this corpus.
165
+ """
166
+ # Ensure that wave files don't get treated as unicode data:
167
+ if isinstance(encoding, string_types):
168
+ encoding = [('.*\.wav', None), ('.*', encoding)]
169
+
170
+ CorpusReader.__init__(self, root,
171
+ find_corpus_fileids(root, self._FILE_RE),
172
+ encoding=encoding)
173
+
174
+ self._utterances = [name[:-4] for name in
175
+ find_corpus_fileids(root, self._UTTERANCE_RE)]
176
+ """A list of the utterance identifiers for all utterances in
177
+ this corpus."""
178
+
179
+ self._speakerinfo = None
180
+ self._root = root
181
+ self.speakers = sorted(set(u.split('/')[0] for u in self._utterances))
182
+
183
+ def fileids(self, filetype=None):
184
+ """
185
+ Return a list of file identifiers for the files that make up
186
+ this corpus.
187
+
188
+ :param filetype: If specified, then ``filetype`` indicates that
189
+ only the files that have the given type should be
190
+ returned. Accepted values are: ``txt``, ``wrd``, ``phn``,
191
+ ``wav``, or ``metadata``,
192
+ """
193
+ if filetype is None:
194
+ return CorpusReader.fileids(self)
195
+ elif filetype in ('txt', 'wrd', 'phn', 'wav'):
196
+ return ['%s.%s' % (u, filetype) for u in self._utterances]
197
+ elif filetype == 'metadata':
198
+ return ['timitdic.txt', 'spkrinfo.txt']
199
+ else:
200
+ raise ValueError('Bad value for filetype: %r' % filetype)
201
+
202
+ def utteranceids(self, dialect=None, sex=None, spkrid=None,
203
+ sent_type=None, sentid=None):
204
+ """
205
+ :return: A list of the utterance identifiers for all
206
+ utterances in this corpus, or for the given speaker, dialect
207
+ region, gender, sentence type, or sentence number, if
208
+ specified.
209
+ """
210
+ if isinstance(dialect, string_types): dialect = [dialect]
211
+ if isinstance(sex, string_types): sex = [sex]
212
+ if isinstance(spkrid, string_types): spkrid = [spkrid]
213
+ if isinstance(sent_type, string_types): sent_type = [sent_type]
214
+ if isinstance(sentid, string_types): sentid = [sentid]
215
+
216
+ utterances = self._utterances[:]
217
+ if dialect is not None:
218
+ utterances = [u for u in utterances if u[2] in dialect]
219
+ if sex is not None:
220
+ utterances = [u for u in utterances if u[4] in sex]
221
+ if spkrid is not None:
222
+ utterances = [u for u in utterances if u[:9] in spkrid]
223
+ if sent_type is not None:
224
+ utterances = [u for u in utterances if u[11] in sent_type]
225
+ if sentid is not None:
226
+ utterances = [u for u in utterances if u[10:] in spkrid]
227
+ return utterances
228
+
229
+ def transcription_dict(self):
230
+ """
231
+ :return: A dictionary giving the 'standard' transcription for
232
+ each word.
233
+ """
234
+ _transcriptions = {}
235
+ for line in self.open('timitdic.txt'):
236
+ if not line.strip() or line[0] == ';': continue
237
+ m = re.match(r'\s*(\S+)\s+/(.*)/\s*$', line)
238
+ if not m: raise ValueError('Bad line: %r' % line)
239
+ _transcriptions[m.group(1)] = m.group(2).split()
240
+ return _transcriptions
241
+
242
+ def spkrid(self, utterance):
243
+ return utterance.split('/')[0]
244
+
245
+ def sentid(self, utterance):
246
+ return utterance.split('/')[1]
247
+
248
+ def utterance(self, spkrid, sentid):
249
+ return '%s/%s' % (spkrid, sentid)
250
+
251
+ def spkrutteranceids(self, speaker):
252
+ """
253
+ :return: A list of all utterances associated with a given
254
+ speaker.
255
+ """
256
+ return [utterance for utterance in self._utterances
257
+ if utterance.startswith(speaker+'/')]
258
+
259
+ def spkrinfo(self, speaker):
260
+ """
261
+ :return: A dictionary mapping .. something.
262
+ """
263
+ if speaker in self._utterances:
264
+ speaker = self.spkrid(speaker)
265
+
266
+ if self._speakerinfo is None:
267
+ self._speakerinfo = {}
268
+ for line in self.open('spkrinfo.txt'):
269
+ if not line.strip() or line[0] == ';': continue
270
+ rec = line.strip().split(None, 9)
271
+ key = "dr%s-%s%s" % (rec[2],rec[1].lower(),rec[0].lower())
272
+ self._speakerinfo[key] = SpeakerInfo(*rec)
273
+
274
+ return self._speakerinfo[speaker]
275
+
276
+ def phones(self, utterances=None):
277
+ return [line.split()[-1]
278
+ for fileid in self._utterance_fileids(utterances, '.phn')
279
+ for line in self.open(fileid) if line.strip()]
280
+
281
+ def phone_times(self, utterances=None):
282
+ """
283
+ offset is represented as a number of 16kHz samples!
284
+ """
285
+ return [(line.split()[2], int(line.split()[0]), int(line.split()[1]))
286
+ for fileid in self._utterance_fileids(utterances, '.phn')
287
+ for line in self.open(fileid) if line.strip()]
288
+
289
+ def words(self, utterances=None):
290
+ return [line.split()[-1]
291
+ for fileid in self._utterance_fileids(utterances, '.wrd')
292
+ for line in self.open(fileid) if line.strip()]
293
+
294
+ def word_times(self, utterances=None):
295
+ return [(line.split()[2], int(line.split()[0]), int(line.split()[1]))
296
+ for fileid in self._utterance_fileids(utterances, '.wrd')
297
+ for line in self.open(fileid) if line.strip()]
298
+
299
+ def sents(self, utterances=None):
300
+ return [[line.split()[-1]
301
+ for line in self.open(fileid) if line.strip()]
302
+ for fileid in self._utterance_fileids(utterances, '.wrd')]
303
+
304
+ def sent_times(self, utterances=None):
305
+ return [(line.split(None,2)[-1].strip(),
306
+ int(line.split()[0]), int(line.split()[1]))
307
+ for fileid in self._utterance_fileids(utterances, '.txt')
308
+ for line in self.open(fileid) if line.strip()]
309
+
310
+ def phone_trees(self, utterances=None):
311
+ if utterances is None: utterances = self._utterances
312
+ if isinstance(utterances, string_types): utterances = [utterances]
313
+
314
+ trees = []
315
+ for utterance in utterances:
316
+ word_times = self.word_times(utterance)
317
+ phone_times = self.phone_times(utterance)
318
+ sent_times = self.sent_times(utterance)
319
+
320
+ while sent_times:
321
+ (sent, sent_start, sent_end) = sent_times.pop(0)
322
+ trees.append(Tree('S', []))
323
+ while (word_times and phone_times and
324
+ phone_times[0][2] <= word_times[0][1]):
325
+ trees[-1].append(phone_times.pop(0)[0])
326
+ while word_times and word_times[0][2] <= sent_end:
327
+ (word, word_start, word_end) = word_times.pop(0)
328
+ trees[-1].append(Tree(word, []))
329
+ while phone_times and phone_times[0][2] <= word_end:
330
+ trees[-1][-1].append(phone_times.pop(0)[0])
331
+ while phone_times and phone_times[0][2] <= sent_end:
332
+ trees[-1].append(phone_times.pop(0)[0])
333
+ return trees
334
+
335
+ # [xx] NOTE: This is currently broken -- we're assuming that the
336
+ # fileids are WAV fileids (aka RIFF), but they're actually NIST SPHERE
337
+ # fileids.
338
+ def wav(self, utterance, start=0, end=None):
339
+ # nltk.chunk conflicts with the stdlib module 'chunk'
340
+ wave = import_from_stdlib('wave')
341
+
342
+ w = wave.open(self.open(utterance+'.wav'), 'rb')
343
+
344
+ if end is None:
345
+ end = w.getnframes()
346
+
347
+ # Skip past frames before start, then read the frames we want
348
+ w.readframes(start)
349
+ frames = w.readframes(end-start)
350
+
351
+ # Open a new temporary file -- the wave module requires
352
+ # an actual file, and won't work w/ stringio. :(
353
+ tf = tempfile.TemporaryFile()
354
+ out = wave.open(tf, 'w')
355
+
356
+ # Write the parameters & data to the new file.
357
+ out.setparams(w.getparams())
358
+ out.writeframes(frames)
359
+ out.close()
360
+
361
+ # Read the data back from the file, and return it. The
362
+ # file will automatically be deleted when we return.
363
+ tf.seek(0)
364
+ return tf.read()
365
+
366
+ def audiodata(self, utterance, start=0, end=None):
367
+ assert(end is None or end > start)
368
+ headersize = 44
369
+ if end is None:
370
+ data = self.open(utterance+'.wav').read()
371
+ else:
372
+ data = self.open(utterance+'.wav').read(headersize+end*2)
373
+ return data[headersize+start*2:]
374
+
375
+ def _utterance_fileids(self, utterances, extension):
376
+ if utterances is None: utterances = self._utterances
377
+ if isinstance(utterances, string_types): utterances = [utterances]
378
+ return ['%s%s' % (u, extension) for u in utterances]
379
+
380
+ def play(self, utterance, start=0, end=None):
381
+ """
382
+ Play the given audio sample.
383
+
384
+ :param utterance: The utterance id of the sample to play
385
+ """
386
+ # Method 1: os audio dev.
387
+ try:
388
+ import ossaudiodev
389
+ try:
390
+ dsp = ossaudiodev.open('w')
391
+ dsp.setfmt(ossaudiodev.AFMT_S16_LE)
392
+ dsp.channels(1)
393
+ dsp.speed(16000)
394
+ dsp.write(self.audiodata(utterance, start, end))
395
+ dsp.close()
396
+ except IOError as e:
397
+ print(("can't acquire the audio device; please "
398
+ "activate your audio device."), file=sys.stderr)
399
+ print("system error message:", str(e), file=sys.stderr)
400
+ return
401
+ except ImportError:
402
+ pass
403
+
404
+ # Method 2: pygame
405
+ try:
406
+ # FIXME: this won't work under python 3
407
+ import pygame.mixer, StringIO
408
+ pygame.mixer.init(16000)
409
+ f = StringIO.StringIO(self.wav(utterance, start, end))
410
+ pygame.mixer.Sound(f).play()
411
+ while pygame.mixer.get_busy():
412
+ time.sleep(0.01)
413
+ return
414
+ except ImportError:
415
+ pass
416
+
417
+ # Method 3: complain. :)
418
+ print(("you must install pygame or ossaudiodev "
419
+ "for audio playback."), file=sys.stderr)
420
+
421
+
422
+ @compat.python_2_unicode_compatible
423
+ class SpeakerInfo(object):
424
+ def __init__(self, id, sex, dr, use, recdate, birthdate,
425
+ ht, race, edu, comments=None):
426
+ self.id = id
427
+ self.sex = sex
428
+ self.dr = dr
429
+ self.use = use
430
+ self.recdate = recdate
431
+ self.birthdate = birthdate
432
+ self.ht = ht
433
+ self.race = race
434
+ self.edu = edu
435
+ self.comments = comments
436
+
437
+ def __repr__(self):
438
+ attribs = 'id sex dr use recdate birthdate ht race edu comments'
439
+ args = ['%s=%r' % (attr, getattr(self, attr))
440
+ for attr in attribs.split()]
441
+ return 'SpeakerInfo(%s)' % (', '.join(args))
442
+
443
+
444
+ def read_timit_block(stream):
445
+ """
446
+ Block reader for timit tagged sentences, which are preceded by a sentence
447
+ number that will be ignored.
448
+ """
449
+ line = stream.readline()
450
+ if not line: return []
451
+ n, sent = line.split(' ', 1)
452
+ return [sent]