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.
- {nltk-3.2 → nltk-3.3}/INSTALL.txt +6 -6
- {nltk-3.2 → nltk-3.3}/LICENSE.txt +13 -13
- {nltk-3.2 → nltk-3.3}/MANIFEST.in +6 -6
- {nltk-3.2/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
- nltk-3.2/README.txt → nltk-3.3/README.md +49 -48
- nltk-3.3/nltk/VERSION +1 -0
- {nltk-3.2 → nltk-3.3}/nltk/__init__.py +185 -185
- {nltk-3.2 → nltk-3.3}/nltk/app/__init__.py +52 -53
- {nltk-3.2 → nltk-3.3}/nltk/app/chartparser_app.py +2276 -2276
- {nltk-3.2 → nltk-3.3}/nltk/app/chunkparser_app.py +1262 -1264
- {nltk-3.2 → nltk-3.3}/nltk/app/collocations_app.py +347 -350
- {nltk-3.2 → nltk-3.3}/nltk/app/concordance_app.py +568 -570
- {nltk-3.2 → nltk-3.3}/nltk/app/nemo_app.py +156 -155
- {nltk-3.2 → nltk-3.3}/nltk/app/rdparser_app.py +892 -894
- {nltk-3.2 → nltk-3.3}/nltk/app/srparser_app.py +809 -809
- {nltk-3.2 → nltk-3.3}/nltk/app/wordfreq_app.py +32 -32
- {nltk-3.2 → nltk-3.3}/nltk/app/wordnet_app.py +968 -968
- {nltk-3.2 → nltk-3.3}/nltk/book.py +91 -90
- {nltk-3.2 → nltk-3.3}/nltk/ccg/__init__.py +22 -22
- {nltk-3.2 → nltk-3.3}/nltk/ccg/api.py +359 -335
- {nltk-3.2 → nltk-3.3}/nltk/ccg/chart.py +394 -361
- {nltk-3.2 → nltk-3.3}/nltk/ccg/combinator.py +343 -312
- {nltk-3.2 → nltk-3.3}/nltk/ccg/lexicon.py +328 -290
- nltk-3.3/nltk/ccg/logic.py +46 -0
- {nltk-3.2 → nltk-3.3}/nltk/chat/__init__.py +49 -49
- {nltk-3.2 → nltk-3.3}/nltk/chat/eliza.py +244 -244
- {nltk-3.2 → nltk-3.3}/nltk/chat/iesha.py +140 -140
- {nltk-3.2 → nltk-3.3}/nltk/chat/rude.py +92 -92
- {nltk-3.2 → nltk-3.3}/nltk/chat/suntsu.py +117 -117
- {nltk-3.2 → nltk-3.3}/nltk/chat/util.py +122 -120
- {nltk-3.2 → nltk-3.3}/nltk/chat/zen.py +282 -282
- {nltk-3.2 → nltk-3.3}/nltk/chunk/__init__.py +190 -190
- {nltk-3.2 → nltk-3.3}/nltk/chunk/api.py +51 -51
- {nltk-3.2 → nltk-3.3}/nltk/chunk/named_entity.py +331 -331
- {nltk-3.2 → nltk-3.3}/nltk/chunk/regexp.py +1390 -1384
- {nltk-3.2 → nltk-3.3}/nltk/chunk/util.py +600 -600
- {nltk-3.2 → nltk-3.3}/nltk/classify/__init__.py +98 -98
- {nltk-3.2 → nltk-3.3}/nltk/classify/api.py +193 -193
- {nltk-3.2 → nltk-3.3}/nltk/classify/decisiontree.py +295 -295
- {nltk-3.2 → nltk-3.3}/nltk/classify/maxent.py +1510 -1492
- {nltk-3.2 → nltk-3.3}/nltk/classify/megam.py +179 -178
- {nltk-3.2 → nltk-3.3}/nltk/classify/naivebayes.py +245 -242
- {nltk-3.2 → nltk-3.3}/nltk/classify/positivenaivebayes.py +170 -170
- {nltk-3.2 → nltk-3.3}/nltk/classify/rte_classify.py +160 -191
- {nltk-3.2 → nltk-3.3}/nltk/classify/scikitlearn.py +153 -151
- {nltk-3.2 → nltk-3.3}/nltk/classify/senna.py +183 -181
- {nltk-3.2 → nltk-3.3}/nltk/classify/svm.py +15 -15
- {nltk-3.2 → nltk-3.3}/nltk/classify/tadm.py +113 -112
- {nltk-3.2 → nltk-3.3}/nltk/classify/textcat.py +193 -193
- {nltk-3.2 → nltk-3.3}/nltk/classify/util.py +324 -312
- {nltk-3.2 → nltk-3.3}/nltk/classify/weka.py +346 -345
- {nltk-3.2 → nltk-3.3}/nltk/cluster/__init__.py +86 -86
- {nltk-3.2 → nltk-3.3}/nltk/cluster/api.py +74 -70
- {nltk-3.2 → nltk-3.3}/nltk/cluster/em.py +247 -247
- {nltk-3.2 → nltk-3.3}/nltk/cluster/gaac.py +168 -168
- {nltk-3.2 → nltk-3.3}/nltk/cluster/kmeans.py +221 -221
- {nltk-3.2 → nltk-3.3}/nltk/cluster/util.py +304 -289
- nltk-3.3/nltk/collections.py +640 -0
- {nltk-3.2 → nltk-3.3}/nltk/collocations.py +388 -388
- nltk-3.3/nltk/compat.py +365 -0
- {nltk-3.2 → nltk-3.3}/nltk/corpus/__init__.py +341 -320
- {nltk-3.2 → nltk-3.3}/nltk/corpus/europarl_raw.py +44 -44
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/__init__.py +147 -145
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/aligned.py +115 -114
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/api.py +448 -446
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bnc.py +252 -252
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +227 -227
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +179 -178
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chasen.py +140 -139
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/childes.py +522 -494
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/chunked.py +212 -212
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/cmudict.py +97 -95
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +280 -278
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/conll.py +528 -521
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/crubadan.py +116 -116
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/dependency.py +101 -101
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/framenet.py +3059 -2093
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ieer.py +112 -111
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/indian.py +85 -86
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ipipan.py +332 -331
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/knbc.py +187 -187
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/lin.py +156 -156
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/mte.py +311 -310
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nkjp.py +429 -428
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nombank.py +421 -421
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +73 -73
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +115 -115
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +165 -165
- nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/plaintext.py +232 -233
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ppattach.py +96 -95
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/propbank.py +479 -481
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +128 -126
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/reviews.py +330 -328
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/rte.py +144 -146
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/semcor.py +256 -256
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/senseval.py +203 -201
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +137 -137
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +75 -75
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/string_category.py +60 -59
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/switchboard.py +119 -119
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/tagged.py +295 -294
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/timit.py +452 -450
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/toolbox.py +68 -68
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/twitter.py +155 -157
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/udhr.py +80 -80
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/util.py +804 -800
- nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
- nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/wordnet.py +2108 -2036
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +392 -387
- {nltk-3.2 → nltk-3.3}/nltk/corpus/reader/ycoe.py +243 -242
- {nltk-3.2 → nltk-3.3}/nltk/corpus/util.py +144 -127
- {nltk-3.2 → nltk-3.3}/nltk/data.py +1487 -1451
- {nltk-3.2 → nltk-3.3}/nltk/decorators.py +219 -215
- {nltk-3.2 → nltk-3.3}/nltk/downloader.py +2278 -2274
- {nltk-3.2 → nltk-3.3}/nltk/draw/__init__.py +27 -27
- {nltk-3.2 → nltk-3.3}/nltk/draw/cfg.py +774 -777
- {nltk-3.2 → nltk-3.3}/nltk/draw/dispersion.py +58 -58
- {nltk-3.2 → nltk-3.3}/nltk/draw/table.py +1098 -1098
- {nltk-3.2 → nltk-3.3}/nltk/draw/tree.py +963 -966
- {nltk-3.2 → nltk-3.3}/nltk/draw/util.py +2356 -2356
- {nltk-3.2 → nltk-3.3}/nltk/featstruct.py +2617 -2500
- {nltk-3.2 → nltk-3.3}/nltk/grammar.py +1559 -1516
- {nltk-3.2 → nltk-3.3}/nltk/help.py +56 -56
- {nltk-3.2 → nltk-3.3}/nltk/inference/__init__.py +20 -20
- {nltk-3.2 → nltk-3.3}/nltk/inference/api.py +597 -589
- {nltk-3.2 → nltk-3.3}/nltk/inference/discourse.py +612 -608
- {nltk-3.2 → nltk-3.3}/nltk/inference/mace.py +311 -311
- {nltk-3.2 → nltk-3.3}/nltk/inference/nonmonotonic.py +509 -509
- {nltk-3.2 → nltk-3.3}/nltk/inference/prover9.py +431 -431
- {nltk-3.2 → nltk-3.3}/nltk/inference/resolution.py +687 -687
- {nltk-3.2 → nltk-3.3}/nltk/inference/tableau.py +607 -607
- {nltk-3.2 → nltk-3.3}/nltk/internals.py +982 -982
- {nltk-3.2 → nltk-3.3}/nltk/jsontags.py +63 -63
- {nltk-3.2 → nltk-3.3}/nltk/lazyimport.py +142 -142
- {nltk-3.2 → nltk-3.3}/nltk/metrics/__init__.py +30 -29
- {nltk-3.2 → nltk-3.3}/nltk/metrics/agreement.py +421 -401
- nltk-3.3/nltk/metrics/aline.py +607 -0
- {nltk-3.2 → nltk-3.3}/nltk/metrics/association.py +414 -410
- {nltk-3.2 → nltk-3.3}/nltk/metrics/confusionmatrix.py +206 -206
- {nltk-3.2 → nltk-3.3}/nltk/metrics/distance.py +207 -202
- {nltk-3.2 → nltk-3.3}/nltk/metrics/paice.py +381 -381
- {nltk-3.2 → nltk-3.3}/nltk/metrics/scores.py +228 -228
- {nltk-3.2 → nltk-3.3}/nltk/metrics/segmentation.py +231 -232
- {nltk-3.2 → nltk-3.3}/nltk/metrics/spearman.py +69 -69
- {nltk-3.2 → nltk-3.3}/nltk/misc/__init__.py +11 -11
- {nltk-3.2 → nltk-3.3}/nltk/misc/babelfish.py +10 -10
- {nltk-3.2 → nltk-3.3}/nltk/misc/chomsky.py +135 -133
- {nltk-3.2 → nltk-3.3}/nltk/misc/minimalset.py +83 -83
- {nltk-3.2 → nltk-3.3}/nltk/misc/sort.py +157 -157
- {nltk-3.2 → nltk-3.3}/nltk/misc/wordfinder.py +129 -129
- {nltk-3.2 → nltk-3.3}/nltk/parse/__init__.py +81 -80
- {nltk-3.2 → nltk-3.3}/nltk/parse/api.py +66 -66
- {nltk-3.2 → nltk-3.3}/nltk/parse/bllip.py +282 -282
- {nltk-3.2 → nltk-3.3}/nltk/parse/chart.py +1682 -1681
- nltk-3.3/nltk/parse/corenlp.py +780 -0
- {nltk-3.2 → nltk-3.3}/nltk/parse/dependencygraph.py +760 -758
- {nltk-3.2 → nltk-3.3}/nltk/parse/earleychart.py +452 -451
- {nltk-3.2 → nltk-3.3}/nltk/parse/evaluate.py +129 -129
- {nltk-3.2 → nltk-3.3}/nltk/parse/featurechart.py +580 -578
- {nltk-3.2 → nltk-3.3}/nltk/parse/generate.py +87 -76
- {nltk-3.2 → nltk-3.3}/nltk/parse/malt.py +356 -356
- {nltk-3.2 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +783 -783
- {nltk-3.2 → nltk-3.3}/nltk/parse/pchart.py +522 -522
- {nltk-3.2 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +579 -578
- {nltk-3.2 → nltk-3.3}/nltk/parse/recursivedescent.py +655 -656
- {nltk-3.2 → nltk-3.3}/nltk/parse/shiftreduce.py +458 -459
- {nltk-3.2 → nltk-3.3}/nltk/parse/stanford.py +431 -406
- {nltk-3.2 → nltk-3.3}/nltk/parse/transitionparser.py +774 -772
- {nltk-3.2 → nltk-3.3}/nltk/parse/util.py +231 -231
- {nltk-3.2 → nltk-3.3}/nltk/parse/viterbi.py +401 -401
- {nltk-3.2 → nltk-3.3}/nltk/probability.py +2410 -2355
- {nltk-3.2 → nltk-3.3}/nltk/sem/__init__.py +61 -61
- {nltk-3.2 → nltk-3.3}/nltk/sem/boxer.py +1261 -1261
- {nltk-3.2 → nltk-3.3}/nltk/sem/chat80.py +782 -782
- {nltk-3.2 → nltk-3.3}/nltk/sem/cooper_storage.py +118 -118
- {nltk-3.2 → nltk-3.3}/nltk/sem/drt.py +1258 -1257
- {nltk-3.2 → nltk-3.3}/nltk/sem/drt_glue_demo.py +485 -489
- {nltk-3.2 → nltk-3.3}/nltk/sem/evaluate.py +790 -784
- {nltk-3.2 → nltk-3.3}/nltk/sem/glue.py +696 -694
- {nltk-3.2 → nltk-3.3}/nltk/sem/hole.py +386 -384
- {nltk-3.2 → nltk-3.3}/nltk/sem/lfg.py +210 -208
- {nltk-3.2 → nltk-3.3}/nltk/sem/linearlogic.py +451 -449
- {nltk-3.2 → nltk-3.3}/nltk/sem/logic.py +1910 -1910
- {nltk-3.2 → nltk-3.3}/nltk/sem/relextract.py +476 -483
- {nltk-3.2 → nltk-3.3}/nltk/sem/skolemize.py +101 -101
- {nltk-3.2 → nltk-3.3}/nltk/sem/util.py +249 -249
- {nltk-3.2 → nltk-3.3}/nltk/sentiment/__init__.py +14 -14
- {nltk-3.2 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +229 -229
- {nltk-3.2 → nltk-3.3}/nltk/sentiment/util.py +762 -752
- {nltk-3.2 → nltk-3.3}/nltk/sentiment/vader.py +443 -445
- {nltk-3.2 → nltk-3.3}/nltk/stem/__init__.py +31 -33
- {nltk-3.2 → nltk-3.3}/nltk/stem/api.py +28 -25
- nltk-3.3/nltk/stem/arlstem.py +369 -0
- {nltk-3.2 → nltk-3.3}/nltk/stem/isri.py +345 -345
- {nltk-3.2 → nltk-3.3}/nltk/stem/lancaster.py +337 -310
- nltk-3.3/nltk/stem/porter.py +710 -0
- {nltk-3.2 → nltk-3.3}/nltk/stem/regexp.py +61 -61
- {nltk-3.2 → nltk-3.3}/nltk/stem/rslp.py +142 -142
- {nltk-3.2 → nltk-3.3}/nltk/stem/snowball.py +4236 -3712
- {nltk-3.2 → nltk-3.3}/nltk/stem/util.py +22 -12
- {nltk-3.2 → nltk-3.3}/nltk/stem/wordnet.py +51 -51
- {nltk-3.2 → nltk-3.3}/nltk/tag/__init__.py +152 -127
- {nltk-3.2 → nltk-3.3}/nltk/tag/api.py +86 -81
- {nltk-3.2 → nltk-3.3}/nltk/tag/brill.py +424 -426
- {nltk-3.2 → nltk-3.3}/nltk/tag/brill_trainer.py +608 -608
- {nltk-3.2 → nltk-3.3}/nltk/tag/crf.py +204 -200
- {nltk-3.2 → nltk-3.3}/nltk/tag/hmm.py +1277 -1277
- {nltk-3.2 → nltk-3.3}/nltk/tag/hunpos.py +132 -132
- {nltk-3.2 → nltk-3.3}/nltk/tag/mapping.py +101 -101
- {nltk-3.2 → nltk-3.3}/nltk/tag/perceptron.py +329 -314
- {nltk-3.2 → nltk-3.3}/nltk/tag/senna.py +147 -145
- {nltk-3.2 → nltk-3.3}/nltk/tag/sequential.py +740 -736
- {nltk-3.2 → nltk-3.3}/nltk/tag/stanford.py +219 -196
- {nltk-3.2 → nltk-3.3}/nltk/tag/tnt.py +595 -604
- {nltk-3.2 → nltk-3.3}/nltk/tag/util.py +72 -72
- {nltk-3.2 → nltk-3.3}/nltk/tbl/__init__.py +28 -28
- {nltk-3.2 → nltk-3.3}/nltk/tbl/api.py +1 -1
- {nltk-3.2 → nltk-3.3}/nltk/tbl/demo.py +366 -366
- {nltk-3.2 → nltk-3.3}/nltk/tbl/erroranalysis.py +39 -39
- {nltk-3.2 → nltk-3.3}/nltk/tbl/feature.py +259 -261
- {nltk-3.2 → nltk-3.3}/nltk/tbl/rule.py +321 -321
- {nltk-3.2 → nltk-3.3}/nltk/tbl/template.py +303 -308
- {nltk-3.2 → nltk-3.3}/nltk/test/__init__.py +18 -18
- {nltk-3.2 → nltk-3.3}/nltk/test/all.py +24 -23
- {nltk-3.2 → nltk-3.3}/nltk/test/bleu.doctest +14 -14
- {nltk-3.2 → nltk-3.3}/nltk/test/bnc.doctest +60 -60
- {nltk-3.2 → nltk-3.3}/nltk/test/ccg.doctest +376 -395
- nltk-3.3/nltk/test/ccg_semantics.doctest +553 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/chat80.doctest +234 -234
- {nltk-3.2 → nltk-3.3}/nltk/test/childes.doctest +184 -184
- {nltk-3.2 → nltk-3.3}/nltk/test/childes_fixt.py +14 -13
- {nltk-3.2 → nltk-3.3}/nltk/test/chunk.doctest +373 -373
- {nltk-3.2 → nltk-3.3}/nltk/test/classify.doctest +185 -185
- {nltk-3.2 → nltk-3.3}/nltk/test/classify_fixt.py +11 -10
- nltk-3.3/nltk/test/collections.doctest +20 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/collocations.doctest +276 -276
- {nltk-3.2 → nltk-3.3}/nltk/test/compat.doctest +134 -138
- {nltk-3.2 → nltk-3.3}/nltk/test/compat_fixt.py +9 -8
- nltk-3.3/nltk/test/concordance.doctest +55 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/corpus.doctest +2200 -2212
- {nltk-3.2 → nltk-3.3}/nltk/test/corpus_fixt.py +3 -3
- {nltk-3.2 → nltk-3.3}/nltk/test/crubadan.doctest +65 -65
- {nltk-3.2 → nltk-3.3}/nltk/test/data.doctest +379 -379
- {nltk-3.2 → nltk-3.3}/nltk/test/dependency.doctest +241 -241
- {nltk-3.2 → nltk-3.3}/nltk/test/discourse.doctest +546 -546
- {nltk-3.2 → nltk-3.3}/nltk/test/discourse_fixt.py +14 -13
- {nltk-3.2 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +159 -156
- {nltk-3.2 → nltk-3.3}/nltk/test/drt.doctest +517 -517
- {nltk-3.2 → nltk-3.3}/nltk/test/featgram.doctest +607 -607
- {nltk-3.2 → nltk-3.3}/nltk/test/featstruct.doctest +1229 -1230
- {nltk-3.2 → nltk-3.3}/nltk/test/framenet.doctest +288 -239
- {nltk-3.2 → nltk-3.3}/nltk/test/generate.doctest +67 -67
- {nltk-3.2 → nltk-3.3}/nltk/test/gensim.doctest +140 -141
- {nltk-3.2 → nltk-3.3}/nltk/test/gensim_fixt.py +10 -9
- {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics.doctest +384 -386
- {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +68 -68
- {nltk-3.2 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +12 -11
- {nltk-3.2 → nltk-3.3}/nltk/test/grammar.doctest +48 -48
- {nltk-3.2 → nltk-3.3}/nltk/test/grammartestsuites.doctest +109 -109
- {nltk-3.2 → nltk-3.3}/nltk/test/index.doctest +100 -100
- {nltk-3.2 → nltk-3.3}/nltk/test/inference.doctest +534 -534
- {nltk-3.2 → nltk-3.3}/nltk/test/inference_fixt.py +12 -11
- {nltk-3.2 → nltk-3.3}/nltk/test/internals.doctest +140 -140
- {nltk-3.2 → nltk-3.3}/nltk/test/japanese.doctest +48 -48
- {nltk-3.2 → nltk-3.3}/nltk/test/logic.doctest +1098 -1098
- {nltk-3.2 → nltk-3.3}/nltk/test/metrics.doctest +270 -270
- {nltk-3.2 → nltk-3.3}/nltk/test/misc.doctest +118 -118
- {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic.doctest +286 -286
- {nltk-3.2 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +12 -11
- {nltk-3.2 → nltk-3.3}/nltk/test/paice.doctest +35 -35
- {nltk-3.2 → nltk-3.3}/nltk/test/parse.doctest +884 -884
- {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en.doctest +565 -565
- {nltk-3.2 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +16 -16
- {nltk-3.2 → nltk-3.3}/nltk/test/probability.doctest +304 -304
- {nltk-3.2 → nltk-3.3}/nltk/test/probability_fixt.py +13 -12
- {nltk-3.2 → nltk-3.3}/nltk/test/propbank.doctest +176 -176
- {nltk-3.2 → nltk-3.3}/nltk/test/relextract.doctest +263 -263
- {nltk-3.2 → nltk-3.3}/nltk/test/resolution.doctest +221 -221
- {nltk-3.2 → nltk-3.3}/nltk/test/runtests.py +86 -64
- {nltk-3.2 → nltk-3.3}/nltk/test/segmentation_fixt.py +10 -10
- {nltk-3.2 → nltk-3.3}/nltk/test/semantics.doctest +665 -665
- {nltk-3.2 → nltk-3.3}/nltk/test/semantics_fixt.py +7 -7
- {nltk-3.2 → nltk-3.3}/nltk/test/sentiment.doctest +233 -233
- {nltk-3.2 → nltk-3.3}/nltk/test/sentiwordnet.doctest +41 -41
- {nltk-3.2 → nltk-3.3}/nltk/test/simple.doctest +85 -85
- {nltk-3.2 → nltk-3.3}/nltk/test/stem.doctest +78 -78
- {nltk-3.2 → nltk-3.3}/nltk/test/tag.doctest +33 -33
- {nltk-3.2 → nltk-3.3}/nltk/test/tokenize.doctest +273 -166
- {nltk-3.2 → nltk-3.3}/nltk/test/toolbox.doctest +307 -307
- {nltk-3.2 → nltk-3.3}/nltk/test/translate.doctest +242 -242
- {nltk-3.2 → nltk-3.3}/nltk/test/translate_fixt.py +3 -3
- {nltk-3.2 → nltk-3.3}/nltk/test/tree.doctest +1101 -1101
- {nltk-3.2 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +127 -127
- {nltk-3.2 → nltk-3.3}/nltk/test/treetransforms.doctest +156 -156
- nltk-3.3/nltk/test/unit/test_2x_compat.py +63 -0
- nltk-3.3/nltk/test/unit/test_aline.py +52 -0
- nltk-3.3/nltk/test/unit/test_chunk.py +56 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_classify.py +55 -53
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_collocations.py +88 -79
- nltk-3.3/nltk/test/unit/test_concordance.py +98 -0
- nltk-3.3/nltk/test/unit/test_corenlp.py +1000 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpora.py +200 -183
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +45 -45
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_hmm.py +88 -88
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +188 -187
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +26 -26
- nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +124 -124
- nltk-3.3/nltk/test/unit/test_senna.py +74 -0
- nltk-3.3/nltk/test/unit/test_stem.py +121 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tag.py +20 -20
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_tgrep.py +628 -626
- nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +185 -185
- nltk-3.3/nltk/test/unit/test_wordnet.py +134 -0
- nltk-3.3/nltk/test/unit/translate/test_bleu.py +244 -0
- nltk-3.3/nltk/test/unit/translate/test_gdfa.py +57 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +75 -75
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +87 -87
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +105 -105
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +126 -126
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +166 -166
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +270 -270
- nltk-3.3/nltk/test/unit/translate/test_nist.py +37 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +300 -300
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/utils.py +41 -41
- {nltk-3.2 → nltk-3.3}/nltk/test/util.doctest +48 -48
- {nltk-3.2 → nltk-3.3}/nltk/test/wordnet.doctest +595 -581
- {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_fixt.py +7 -6
- {nltk-3.2 → nltk-3.3}/nltk/test/wordnet_lch.doctest +53 -53
- {nltk-3.2 → nltk-3.3}/nltk/test/wsd.doctest +68 -68
- {nltk-3.2 → nltk-3.3}/nltk/text.py +663 -610
- {nltk-3.2 → nltk-3.3}/nltk/tgrep.py +938 -937
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/__init__.py +130 -107
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/api.py +77 -78
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/casual.py +343 -342
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/mwe.py +120 -120
- nltk-3.3/nltk/tokenize/nist.py +173 -0
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/punkt.py +1620 -1601
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/regexp.py +208 -202
- nltk-3.3/nltk/tokenize/repp.py +151 -0
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/sexpr.py +140 -142
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/simple.py +138 -136
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/stanford.py +117 -113
- nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
- {nltk-3.2 → nltk-3.3}/nltk/tokenize/texttiling.py +458 -460
- nltk-3.3/nltk/tokenize/toktok.py +155 -0
- nltk-3.3/nltk/tokenize/treebank.py +363 -0
- nltk-3.3/nltk/tokenize/util.py +261 -0
- {nltk-3.2 → nltk-3.3}/nltk/toolbox.py +499 -497
- {nltk-3.2 → nltk-3.3}/nltk/translate/__init__.py +24 -24
- {nltk-3.2 → nltk-3.3}/nltk/translate/api.py +331 -321
- {nltk-3.2 → nltk-3.3}/nltk/translate/bleu_score.py +615 -556
- nltk-3.3/nltk/translate/chrf_score.py +137 -0
- {nltk-3.2 → nltk-3.3}/nltk/translate/gale_church.py +248 -235
- {nltk-3.2 → nltk-3.3}/nltk/translate/gdfa.py +135 -131
- nltk-3.3/nltk/translate/gleu_score.py +193 -0
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm1.py +250 -241
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm2.py +308 -308
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm3.py +337 -337
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm4.py +467 -467
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm5.py +639 -639
- {nltk-3.2 → nltk-3.3}/nltk/translate/ibm_model.py +536 -533
- {nltk-3.2 → nltk-3.3}/nltk/translate/metrics.py +40 -40
- nltk-3.3/nltk/translate/nist_score.py +178 -0
- {nltk-3.2 → nltk-3.3}/nltk/translate/phrase_based.py +175 -175
- {nltk-3.2 → nltk-3.3}/nltk/translate/ribes_score.py +325 -325
- {nltk-3.2 → nltk-3.3}/nltk/translate/stack_decoder.py +499 -495
- {nltk-3.2 → nltk-3.3}/nltk/tree.py +1605 -1603
- {nltk-3.2 → nltk-3.3}/nltk/treeprettyprinter.py +564 -564
- {nltk-3.2 → nltk-3.3}/nltk/treetransforms.py +309 -309
- {nltk-3.2 → nltk-3.3}/nltk/twitter/__init__.py +28 -28
- {nltk-3.2 → nltk-3.3}/nltk/twitter/api.py +141 -136
- {nltk-3.2 → nltk-3.3}/nltk/twitter/common.py +264 -258
- {nltk-3.2 → nltk-3.3}/nltk/twitter/twitter_demo.py +288 -288
- {nltk-3.2 → nltk-3.3}/nltk/twitter/twitterclient.py +530 -530
- {nltk-3.2 → nltk-3.3}/nltk/twitter/util.py +147 -146
- nltk-3.3/nltk/util.py +751 -0
- {nltk-3.2 → nltk-3.3}/nltk/wsd.py +53 -53
- {nltk-3.2 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
- {nltk-3.2 → nltk-3.3}/nltk.egg-info/SOURCES.txt +26 -3
- nltk-3.3/nltk.egg-info/requires.txt +31 -0
- {nltk-3.2 → nltk-3.3}/setup.cfg +0 -1
- {nltk-3.2 → nltk-3.3}/setup.py +102 -75
- nltk-3.2/nltk/VERSION +0 -1
- nltk-3.2/nltk/compat.py +0 -680
- nltk-3.2/nltk/corpus/reader/pl196x.py +0 -278
- nltk-3.2/nltk/corpus/reader/verbnet.py +0 -408
- nltk-3.2/nltk/corpus/reader/wordlist.py +0 -37
- nltk-3.2/nltk/sentiment/vader_lexicon.txt +0 -7517
- nltk-3.2/nltk/six.py +0 -868
- nltk-3.2/nltk/stem/porter.py +0 -692
- nltk-3.2/nltk/test/unit/test_2x_compat.py +0 -26
- nltk-3.2/nltk/test/unit/test_stem.py +0 -36
- nltk-3.2/nltk/test/unit/test_tokenize.py +0 -23
- nltk-3.2/nltk/test/unit/translate/test_bleu.py +0 -84
- nltk-3.2/nltk/tokenize/treebank.py +0 -124
- nltk-3.2/nltk/tokenize/util.py +0 -90
- nltk-3.2/nltk/util.py +0 -1364
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
- {nltk-3.2 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
- {nltk-3.2 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
- {nltk-3.2 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
- {nltk-3.2 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
|
@@ -1,233 +1,232 @@
|
|
|
1
|
-
# Natural Language Toolkit: Plaintext Corpus Reader
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
-
# Edward Loper <edloper@gmail.com>
|
|
6
|
-
# Nitin Madnani <nmadnani@umiacs.umd.edu>
|
|
7
|
-
# URL: <http://nltk.org/>
|
|
8
|
-
# For license information, see LICENSE.TXT
|
|
9
|
-
|
|
10
|
-
"""
|
|
11
|
-
A reader for corpora that consist of plaintext documents.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
from nltk.tokenize import *
|
|
19
|
-
|
|
20
|
-
from nltk.corpus.reader.util import *
|
|
21
|
-
from nltk.corpus.reader.api import *
|
|
22
|
-
|
|
23
|
-
class PlaintextCorpusReader(CorpusReader):
|
|
24
|
-
"""
|
|
25
|
-
Reader for corpora that consist of plaintext documents. Paragraphs
|
|
26
|
-
are assumed to be split using blank lines. Sentences and words can
|
|
27
|
-
be tokenized using the default tokenizers, or by custom tokenizers
|
|
28
|
-
specificed as parameters to the constructor.
|
|
29
|
-
|
|
30
|
-
This corpus reader can be customized (e.g., to skip preface
|
|
31
|
-
sections of specific document formats) by creating a subclass and
|
|
32
|
-
overriding the ``CorpusView`` class variable.
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
CorpusView = StreamBackedCorpusView
|
|
36
|
-
"""The corpus view class used by this reader. Subclasses of
|
|
37
|
-
``PlaintextCorpusReader`` may specify alternative corpus view
|
|
38
|
-
classes (e.g., to skip the preface sections of documents.)"""
|
|
39
|
-
|
|
40
|
-
def __init__(self, root, fileids,
|
|
41
|
-
word_tokenizer=WordPunctTokenizer(),
|
|
42
|
-
sent_tokenizer=nltk.data.LazyLoader(
|
|
43
|
-
'tokenizers/punkt/english.pickle'),
|
|
44
|
-
para_block_reader=read_blankline_block,
|
|
45
|
-
encoding='utf8'):
|
|
46
|
-
"""
|
|
47
|
-
Construct a new plaintext corpus reader for a set of documents
|
|
48
|
-
located at the given root directory. Example usage:
|
|
49
|
-
|
|
50
|
-
>>> root = '/usr/local/share/nltk_data/corpora/webtext/'
|
|
51
|
-
>>> reader = PlaintextCorpusReader(root, '.*\.txt') # doctest: +SKIP
|
|
52
|
-
|
|
53
|
-
:param root: The root directory for this corpus.
|
|
54
|
-
:param fileids: A list or regexp specifying the fileids in this corpus.
|
|
55
|
-
:param word_tokenizer: Tokenizer for breaking sentences or
|
|
56
|
-
paragraphs into words.
|
|
57
|
-
:param sent_tokenizer: Tokenizer for breaking paragraphs
|
|
58
|
-
into words.
|
|
59
|
-
:param para_block_reader: The block reader used to divide the
|
|
60
|
-
corpus into paragraph blocks.
|
|
61
|
-
"""
|
|
62
|
-
CorpusReader.__init__(self, root, fileids, encoding)
|
|
63
|
-
self._word_tokenizer = word_tokenizer
|
|
64
|
-
self._sent_tokenizer = sent_tokenizer
|
|
65
|
-
self._para_block_reader = para_block_reader
|
|
66
|
-
|
|
67
|
-
def raw(self, fileids=None):
|
|
68
|
-
"""
|
|
69
|
-
:return: the given file(s) as a single string.
|
|
70
|
-
:rtype: str
|
|
71
|
-
"""
|
|
72
|
-
if fileids is None: fileids = self._fileids
|
|
73
|
-
elif isinstance(fileids, string_types): fileids = [fileids]
|
|
74
|
-
raw_texts = []
|
|
75
|
-
for f in fileids:
|
|
76
|
-
_fin = self.open(f)
|
|
77
|
-
raw_texts.append(_fin.read())
|
|
78
|
-
_fin.close()
|
|
79
|
-
return concat(raw_texts)
|
|
80
|
-
|
|
81
|
-
def words(self, fileids=None):
|
|
82
|
-
"""
|
|
83
|
-
:return: the given file(s) as a list of words
|
|
84
|
-
and punctuation symbols.
|
|
85
|
-
:rtype: list(str)
|
|
86
|
-
"""
|
|
87
|
-
return concat([self.CorpusView(path, self._read_word_block, encoding=enc)
|
|
88
|
-
for (path, enc, fileid)
|
|
89
|
-
in self.abspaths(fileids, True, True)])
|
|
90
|
-
|
|
91
|
-
def sents(self, fileids=None):
|
|
92
|
-
"""
|
|
93
|
-
:return: the given file(s) as a list of
|
|
94
|
-
sentences or utterances, each encoded as a list of word
|
|
95
|
-
strings.
|
|
96
|
-
:rtype: list(list(str))
|
|
97
|
-
"""
|
|
98
|
-
if self._sent_tokenizer is None:
|
|
99
|
-
raise ValueError('No sentence tokenizer for this corpus')
|
|
100
|
-
|
|
101
|
-
return concat([self.CorpusView(path, self._read_sent_block, encoding=enc)
|
|
102
|
-
for (path, enc, fileid)
|
|
103
|
-
in self.abspaths(fileids, True, True)])
|
|
104
|
-
|
|
105
|
-
def paras(self, fileids=None):
|
|
106
|
-
"""
|
|
107
|
-
:return: the given file(s) as a list of
|
|
108
|
-
paragraphs, each encoded as a list of sentences, which are
|
|
109
|
-
in turn encoded as lists of word strings.
|
|
110
|
-
:rtype: list(list(list(str)))
|
|
111
|
-
"""
|
|
112
|
-
if self._sent_tokenizer is None:
|
|
113
|
-
raise ValueError('No sentence tokenizer for this corpus')
|
|
114
|
-
|
|
115
|
-
return concat([self.CorpusView(path, self._read_para_block, encoding=enc)
|
|
116
|
-
for (path, enc, fileid)
|
|
117
|
-
in self.abspaths(fileids, True, True)])
|
|
118
|
-
|
|
119
|
-
def _read_word_block(self, stream):
|
|
120
|
-
words = []
|
|
121
|
-
for i in range(20): # Read 20 lines at a time.
|
|
122
|
-
words.extend(self._word_tokenizer.tokenize(stream.readline()))
|
|
123
|
-
return words
|
|
124
|
-
|
|
125
|
-
def _read_sent_block(self, stream):
|
|
126
|
-
sents = []
|
|
127
|
-
for para in self._para_block_reader(stream):
|
|
128
|
-
sents.extend([self._word_tokenizer.tokenize(sent)
|
|
129
|
-
for sent in self._sent_tokenizer.tokenize(para)])
|
|
130
|
-
return sents
|
|
131
|
-
|
|
132
|
-
def _read_para_block(self, stream):
|
|
133
|
-
paras = []
|
|
134
|
-
for para in self._para_block_reader(stream):
|
|
135
|
-
paras.append([self._word_tokenizer.tokenize(sent)
|
|
136
|
-
for sent in self._sent_tokenizer.tokenize(para)])
|
|
137
|
-
return paras
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
class CategorizedPlaintextCorpusReader(CategorizedCorpusReader,
|
|
141
|
-
PlaintextCorpusReader):
|
|
142
|
-
"""
|
|
143
|
-
A reader for plaintext corpora whose documents are divided into
|
|
144
|
-
categories based on their file identifiers.
|
|
145
|
-
"""
|
|
146
|
-
def __init__(self, *args, **kwargs):
|
|
147
|
-
"""
|
|
148
|
-
Initialize the corpus reader. Categorization arguments
|
|
149
|
-
(``cat_pattern``, ``cat_map``, and ``cat_file``) are passed to
|
|
150
|
-
the ``CategorizedCorpusReader`` constructor. The remaining arguments
|
|
151
|
-
are passed to the ``PlaintextCorpusReader`` constructor.
|
|
152
|
-
"""
|
|
153
|
-
CategorizedCorpusReader.__init__(self, kwargs)
|
|
154
|
-
PlaintextCorpusReader.__init__(self, *args, **kwargs)
|
|
155
|
-
|
|
156
|
-
def _resolve(self, fileids, categories):
|
|
157
|
-
if fileids is not None and categories is not None:
|
|
158
|
-
raise ValueError('Specify fileids or categories, not both')
|
|
159
|
-
if categories is not None:
|
|
160
|
-
return self.fileids(categories)
|
|
161
|
-
else:
|
|
162
|
-
return fileids
|
|
163
|
-
def raw(self, fileids=None, categories=None):
|
|
164
|
-
return PlaintextCorpusReader.raw(
|
|
165
|
-
self, self._resolve(fileids, categories))
|
|
166
|
-
def words(self, fileids=None, categories=None):
|
|
167
|
-
return PlaintextCorpusReader.words(
|
|
168
|
-
self, self._resolve(fileids, categories))
|
|
169
|
-
def sents(self, fileids=None, categories=None):
|
|
170
|
-
return PlaintextCorpusReader.sents(
|
|
171
|
-
self, self._resolve(fileids, categories))
|
|
172
|
-
def paras(self, fileids=None, categories=None):
|
|
173
|
-
return PlaintextCorpusReader.paras(
|
|
174
|
-
self, self._resolve(fileids, categories))
|
|
175
|
-
|
|
176
|
-
# is there a better way?
|
|
177
|
-
class PortugueseCategorizedPlaintextCorpusReader(CategorizedPlaintextCorpusReader):
|
|
178
|
-
def __init__(self, *args, **kwargs):
|
|
179
|
-
CategorizedCorpusReader.__init__(self, kwargs)
|
|
180
|
-
kwargs['sent_tokenizer'] = nltk.data.LazyLoader('tokenizers/punkt/portuguese.pickle')
|
|
181
|
-
PlaintextCorpusReader.__init__(self, *args, **kwargs)
|
|
182
|
-
|
|
183
|
-
class EuroparlCorpusReader(PlaintextCorpusReader):
|
|
184
|
-
|
|
185
|
-
"""
|
|
186
|
-
Reader for Europarl corpora that consist of plaintext documents.
|
|
187
|
-
Documents are divided into chapters instead of paragraphs as
|
|
188
|
-
for regular plaintext documents. Chapters are separated using blank
|
|
189
|
-
lines. Everything is inherited from ``PlaintextCorpusReader`` except
|
|
190
|
-
that:
|
|
191
|
-
- Since the corpus is pre-processed and pre-tokenized, the
|
|
192
|
-
word tokenizer should just split the line at whitespaces.
|
|
193
|
-
- For the same reason, the sentence tokenizer should just
|
|
194
|
-
split the paragraph at line breaks.
|
|
195
|
-
- There is a new 'chapters()' method that returns chapters instead
|
|
196
|
-
instead of paragraphs.
|
|
197
|
-
- The 'paras()' method inherited from PlaintextCorpusReader is
|
|
198
|
-
made non-functional to remove any confusion between chapters
|
|
199
|
-
and paragraphs for Europarl.
|
|
200
|
-
"""
|
|
201
|
-
|
|
202
|
-
def _read_word_block(self, stream):
|
|
203
|
-
words = []
|
|
204
|
-
for i in range(20): # Read 20 lines at a time.
|
|
205
|
-
words.extend(stream.readline().split())
|
|
206
|
-
return words
|
|
207
|
-
|
|
208
|
-
def _read_sent_block(self, stream):
|
|
209
|
-
sents = []
|
|
210
|
-
for para in self._para_block_reader(stream):
|
|
211
|
-
sents.extend([sent.split() for sent in para.splitlines()])
|
|
212
|
-
return sents
|
|
213
|
-
|
|
214
|
-
def _read_para_block(self, stream):
|
|
215
|
-
paras = []
|
|
216
|
-
for para in self._para_block_reader(stream):
|
|
217
|
-
paras.append([sent.split() for sent in para.splitlines()])
|
|
218
|
-
return paras
|
|
219
|
-
|
|
220
|
-
def chapters(self, fileids=None):
|
|
221
|
-
"""
|
|
222
|
-
:return: the given file(s) as a list of
|
|
223
|
-
chapters, each encoded as a list of sentences, which are
|
|
224
|
-
in turn encoded as lists of word strings.
|
|
225
|
-
:rtype: list(list(list(str)))
|
|
226
|
-
"""
|
|
227
|
-
return concat([self.CorpusView(fileid, self._read_para_block,
|
|
228
|
-
encoding=enc)
|
|
229
|
-
for (fileid, enc) in self.abspaths(fileids, True)])
|
|
230
|
-
|
|
231
|
-
def paras(self, fileids=None):
|
|
232
|
-
raise NotImplementedError('The Europarl corpus reader does not support paragraphs. Please use chapters() instead.')
|
|
233
|
-
|
|
1
|
+
# Natural Language Toolkit: Plaintext Corpus Reader
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
+
# Edward Loper <edloper@gmail.com>
|
|
6
|
+
# Nitin Madnani <nmadnani@umiacs.umd.edu>
|
|
7
|
+
# URL: <http://nltk.org/>
|
|
8
|
+
# For license information, see LICENSE.TXT
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
A reader for corpora that consist of plaintext documents.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from six import string_types
|
|
15
|
+
import codecs
|
|
16
|
+
|
|
17
|
+
import nltk.data
|
|
18
|
+
from nltk.tokenize import *
|
|
19
|
+
|
|
20
|
+
from nltk.corpus.reader.util import *
|
|
21
|
+
from nltk.corpus.reader.api import *
|
|
22
|
+
|
|
23
|
+
class PlaintextCorpusReader(CorpusReader):
|
|
24
|
+
"""
|
|
25
|
+
Reader for corpora that consist of plaintext documents. Paragraphs
|
|
26
|
+
are assumed to be split using blank lines. Sentences and words can
|
|
27
|
+
be tokenized using the default tokenizers, or by custom tokenizers
|
|
28
|
+
specificed as parameters to the constructor.
|
|
29
|
+
|
|
30
|
+
This corpus reader can be customized (e.g., to skip preface
|
|
31
|
+
sections of specific document formats) by creating a subclass and
|
|
32
|
+
overriding the ``CorpusView`` class variable.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
CorpusView = StreamBackedCorpusView
|
|
36
|
+
"""The corpus view class used by this reader. Subclasses of
|
|
37
|
+
``PlaintextCorpusReader`` may specify alternative corpus view
|
|
38
|
+
classes (e.g., to skip the preface sections of documents.)"""
|
|
39
|
+
|
|
40
|
+
def __init__(self, root, fileids,
|
|
41
|
+
word_tokenizer=WordPunctTokenizer(),
|
|
42
|
+
sent_tokenizer=nltk.data.LazyLoader(
|
|
43
|
+
'tokenizers/punkt/english.pickle'),
|
|
44
|
+
para_block_reader=read_blankline_block,
|
|
45
|
+
encoding='utf8'):
|
|
46
|
+
"""
|
|
47
|
+
Construct a new plaintext corpus reader for a set of documents
|
|
48
|
+
located at the given root directory. Example usage:
|
|
49
|
+
|
|
50
|
+
>>> root = '/usr/local/share/nltk_data/corpora/webtext/'
|
|
51
|
+
>>> reader = PlaintextCorpusReader(root, '.*\.txt') # doctest: +SKIP
|
|
52
|
+
|
|
53
|
+
:param root: The root directory for this corpus.
|
|
54
|
+
:param fileids: A list or regexp specifying the fileids in this corpus.
|
|
55
|
+
:param word_tokenizer: Tokenizer for breaking sentences or
|
|
56
|
+
paragraphs into words.
|
|
57
|
+
:param sent_tokenizer: Tokenizer for breaking paragraphs
|
|
58
|
+
into words.
|
|
59
|
+
:param para_block_reader: The block reader used to divide the
|
|
60
|
+
corpus into paragraph blocks.
|
|
61
|
+
"""
|
|
62
|
+
CorpusReader.__init__(self, root, fileids, encoding)
|
|
63
|
+
self._word_tokenizer = word_tokenizer
|
|
64
|
+
self._sent_tokenizer = sent_tokenizer
|
|
65
|
+
self._para_block_reader = para_block_reader
|
|
66
|
+
|
|
67
|
+
def raw(self, fileids=None):
|
|
68
|
+
"""
|
|
69
|
+
:return: the given file(s) as a single string.
|
|
70
|
+
:rtype: str
|
|
71
|
+
"""
|
|
72
|
+
if fileids is None: fileids = self._fileids
|
|
73
|
+
elif isinstance(fileids, string_types): fileids = [fileids]
|
|
74
|
+
raw_texts = []
|
|
75
|
+
for f in fileids:
|
|
76
|
+
_fin = self.open(f)
|
|
77
|
+
raw_texts.append(_fin.read())
|
|
78
|
+
_fin.close()
|
|
79
|
+
return concat(raw_texts)
|
|
80
|
+
|
|
81
|
+
def words(self, fileids=None):
|
|
82
|
+
"""
|
|
83
|
+
:return: the given file(s) as a list of words
|
|
84
|
+
and punctuation symbols.
|
|
85
|
+
:rtype: list(str)
|
|
86
|
+
"""
|
|
87
|
+
return concat([self.CorpusView(path, self._read_word_block, encoding=enc)
|
|
88
|
+
for (path, enc, fileid)
|
|
89
|
+
in self.abspaths(fileids, True, True)])
|
|
90
|
+
|
|
91
|
+
def sents(self, fileids=None):
|
|
92
|
+
"""
|
|
93
|
+
:return: the given file(s) as a list of
|
|
94
|
+
sentences or utterances, each encoded as a list of word
|
|
95
|
+
strings.
|
|
96
|
+
:rtype: list(list(str))
|
|
97
|
+
"""
|
|
98
|
+
if self._sent_tokenizer is None:
|
|
99
|
+
raise ValueError('No sentence tokenizer for this corpus')
|
|
100
|
+
|
|
101
|
+
return concat([self.CorpusView(path, self._read_sent_block, encoding=enc)
|
|
102
|
+
for (path, enc, fileid)
|
|
103
|
+
in self.abspaths(fileids, True, True)])
|
|
104
|
+
|
|
105
|
+
def paras(self, fileids=None):
|
|
106
|
+
"""
|
|
107
|
+
:return: the given file(s) as a list of
|
|
108
|
+
paragraphs, each encoded as a list of sentences, which are
|
|
109
|
+
in turn encoded as lists of word strings.
|
|
110
|
+
:rtype: list(list(list(str)))
|
|
111
|
+
"""
|
|
112
|
+
if self._sent_tokenizer is None:
|
|
113
|
+
raise ValueError('No sentence tokenizer for this corpus')
|
|
114
|
+
|
|
115
|
+
return concat([self.CorpusView(path, self._read_para_block, encoding=enc)
|
|
116
|
+
for (path, enc, fileid)
|
|
117
|
+
in self.abspaths(fileids, True, True)])
|
|
118
|
+
|
|
119
|
+
def _read_word_block(self, stream):
|
|
120
|
+
words = []
|
|
121
|
+
for i in range(20): # Read 20 lines at a time.
|
|
122
|
+
words.extend(self._word_tokenizer.tokenize(stream.readline()))
|
|
123
|
+
return words
|
|
124
|
+
|
|
125
|
+
def _read_sent_block(self, stream):
|
|
126
|
+
sents = []
|
|
127
|
+
for para in self._para_block_reader(stream):
|
|
128
|
+
sents.extend([self._word_tokenizer.tokenize(sent)
|
|
129
|
+
for sent in self._sent_tokenizer.tokenize(para)])
|
|
130
|
+
return sents
|
|
131
|
+
|
|
132
|
+
def _read_para_block(self, stream):
|
|
133
|
+
paras = []
|
|
134
|
+
for para in self._para_block_reader(stream):
|
|
135
|
+
paras.append([self._word_tokenizer.tokenize(sent)
|
|
136
|
+
for sent in self._sent_tokenizer.tokenize(para)])
|
|
137
|
+
return paras
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class CategorizedPlaintextCorpusReader(CategorizedCorpusReader,
|
|
141
|
+
PlaintextCorpusReader):
|
|
142
|
+
"""
|
|
143
|
+
A reader for plaintext corpora whose documents are divided into
|
|
144
|
+
categories based on their file identifiers.
|
|
145
|
+
"""
|
|
146
|
+
def __init__(self, *args, **kwargs):
|
|
147
|
+
"""
|
|
148
|
+
Initialize the corpus reader. Categorization arguments
|
|
149
|
+
(``cat_pattern``, ``cat_map``, and ``cat_file``) are passed to
|
|
150
|
+
the ``CategorizedCorpusReader`` constructor. The remaining arguments
|
|
151
|
+
are passed to the ``PlaintextCorpusReader`` constructor.
|
|
152
|
+
"""
|
|
153
|
+
CategorizedCorpusReader.__init__(self, kwargs)
|
|
154
|
+
PlaintextCorpusReader.__init__(self, *args, **kwargs)
|
|
155
|
+
|
|
156
|
+
def _resolve(self, fileids, categories):
|
|
157
|
+
if fileids is not None and categories is not None:
|
|
158
|
+
raise ValueError('Specify fileids or categories, not both')
|
|
159
|
+
if categories is not None:
|
|
160
|
+
return self.fileids(categories)
|
|
161
|
+
else:
|
|
162
|
+
return fileids
|
|
163
|
+
def raw(self, fileids=None, categories=None):
|
|
164
|
+
return PlaintextCorpusReader.raw(
|
|
165
|
+
self, self._resolve(fileids, categories))
|
|
166
|
+
def words(self, fileids=None, categories=None):
|
|
167
|
+
return PlaintextCorpusReader.words(
|
|
168
|
+
self, self._resolve(fileids, categories))
|
|
169
|
+
def sents(self, fileids=None, categories=None):
|
|
170
|
+
return PlaintextCorpusReader.sents(
|
|
171
|
+
self, self._resolve(fileids, categories))
|
|
172
|
+
def paras(self, fileids=None, categories=None):
|
|
173
|
+
return PlaintextCorpusReader.paras(
|
|
174
|
+
self, self._resolve(fileids, categories))
|
|
175
|
+
|
|
176
|
+
# is there a better way?
|
|
177
|
+
class PortugueseCategorizedPlaintextCorpusReader(CategorizedPlaintextCorpusReader):
|
|
178
|
+
def __init__(self, *args, **kwargs):
|
|
179
|
+
CategorizedCorpusReader.__init__(self, kwargs)
|
|
180
|
+
kwargs['sent_tokenizer'] = nltk.data.LazyLoader('tokenizers/punkt/portuguese.pickle')
|
|
181
|
+
PlaintextCorpusReader.__init__(self, *args, **kwargs)
|
|
182
|
+
|
|
183
|
+
class EuroparlCorpusReader(PlaintextCorpusReader):
|
|
184
|
+
|
|
185
|
+
"""
|
|
186
|
+
Reader for Europarl corpora that consist of plaintext documents.
|
|
187
|
+
Documents are divided into chapters instead of paragraphs as
|
|
188
|
+
for regular plaintext documents. Chapters are separated using blank
|
|
189
|
+
lines. Everything is inherited from ``PlaintextCorpusReader`` except
|
|
190
|
+
that:
|
|
191
|
+
- Since the corpus is pre-processed and pre-tokenized, the
|
|
192
|
+
word tokenizer should just split the line at whitespaces.
|
|
193
|
+
- For the same reason, the sentence tokenizer should just
|
|
194
|
+
split the paragraph at line breaks.
|
|
195
|
+
- There is a new 'chapters()' method that returns chapters instead
|
|
196
|
+
instead of paragraphs.
|
|
197
|
+
- The 'paras()' method inherited from PlaintextCorpusReader is
|
|
198
|
+
made non-functional to remove any confusion between chapters
|
|
199
|
+
and paragraphs for Europarl.
|
|
200
|
+
"""
|
|
201
|
+
|
|
202
|
+
def _read_word_block(self, stream):
|
|
203
|
+
words = []
|
|
204
|
+
for i in range(20): # Read 20 lines at a time.
|
|
205
|
+
words.extend(stream.readline().split())
|
|
206
|
+
return words
|
|
207
|
+
|
|
208
|
+
def _read_sent_block(self, stream):
|
|
209
|
+
sents = []
|
|
210
|
+
for para in self._para_block_reader(stream):
|
|
211
|
+
sents.extend([sent.split() for sent in para.splitlines()])
|
|
212
|
+
return sents
|
|
213
|
+
|
|
214
|
+
def _read_para_block(self, stream):
|
|
215
|
+
paras = []
|
|
216
|
+
for para in self._para_block_reader(stream):
|
|
217
|
+
paras.append([sent.split() for sent in para.splitlines()])
|
|
218
|
+
return paras
|
|
219
|
+
|
|
220
|
+
def chapters(self, fileids=None):
|
|
221
|
+
"""
|
|
222
|
+
:return: the given file(s) as a list of
|
|
223
|
+
chapters, each encoded as a list of sentences, which are
|
|
224
|
+
in turn encoded as lists of word strings.
|
|
225
|
+
:rtype: list(list(list(str)))
|
|
226
|
+
"""
|
|
227
|
+
return concat([self.CorpusView(fileid, self._read_para_block,
|
|
228
|
+
encoding=enc)
|
|
229
|
+
for (fileid, enc) in self.abspaths(fileids, True)])
|
|
230
|
+
|
|
231
|
+
def paras(self, fileids=None):
|
|
232
|
+
raise NotImplementedError('The Europarl corpus reader does not support paragraphs. Please use chapters() instead.')
|
|
@@ -1,95 +1,96 @@
|
|
|
1
|
-
# Natural Language Toolkit: PP Attachment Corpus Reader
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
-
# Edward Loper <edloper@gmail.com>
|
|
6
|
-
# URL: <http://nltk.org/>
|
|
7
|
-
# For license information, see LICENSE.TXT
|
|
8
|
-
|
|
9
|
-
"""
|
|
10
|
-
Read lines from the Prepositional Phrase Attachment Corpus.
|
|
11
|
-
|
|
12
|
-
The PP Attachment Corpus contains several files having the format:
|
|
13
|
-
|
|
14
|
-
sentence_id verb noun1 preposition noun2 attachment
|
|
15
|
-
|
|
16
|
-
For example:
|
|
17
|
-
|
|
18
|
-
42960 gives authority to administration V
|
|
19
|
-
46742 gives inventors of microchip N
|
|
20
|
-
|
|
21
|
-
The PP attachment is to the verb phrase (V) or noun phrase (N), i.e.:
|
|
22
|
-
|
|
23
|
-
(VP gives (NP authority) (PP to administration))
|
|
24
|
-
(VP gives (NP inventors (PP of microchip)))
|
|
25
|
-
|
|
26
|
-
The corpus contains the following files:
|
|
27
|
-
|
|
28
|
-
training: training set
|
|
29
|
-
devset: development test set, used for algorithm development.
|
|
30
|
-
test: test set, used to report results
|
|
31
|
-
bitstrings: word classes derived from Mutual Information Clustering for the Wall Street Journal.
|
|
32
|
-
|
|
33
|
-
Ratnaparkhi, Adwait (1994). A Maximum Entropy Model for Prepositional
|
|
34
|
-
Phrase Attachment. Proceedings of the ARPA Human Language Technology
|
|
35
|
-
Conference. [http://www.cis.upenn.edu/~adwait/papers/hlt94.ps]
|
|
36
|
-
|
|
37
|
-
The PP Attachment Corpus is distributed with NLTK with the permission
|
|
38
|
-
of the author.
|
|
39
|
-
"""
|
|
40
|
-
from __future__ import unicode_literals
|
|
41
|
-
|
|
42
|
-
from
|
|
43
|
-
|
|
44
|
-
from nltk
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
self.
|
|
53
|
-
self.
|
|
54
|
-
self.
|
|
55
|
-
self.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return []
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return []
|
|
95
|
-
|
|
1
|
+
# Natural Language Toolkit: PP Attachment Corpus Reader
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
+
# Edward Loper <edloper@gmail.com>
|
|
6
|
+
# URL: <http://nltk.org/>
|
|
7
|
+
# For license information, see LICENSE.TXT
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Read lines from the Prepositional Phrase Attachment Corpus.
|
|
11
|
+
|
|
12
|
+
The PP Attachment Corpus contains several files having the format:
|
|
13
|
+
|
|
14
|
+
sentence_id verb noun1 preposition noun2 attachment
|
|
15
|
+
|
|
16
|
+
For example:
|
|
17
|
+
|
|
18
|
+
42960 gives authority to administration V
|
|
19
|
+
46742 gives inventors of microchip N
|
|
20
|
+
|
|
21
|
+
The PP attachment is to the verb phrase (V) or noun phrase (N), i.e.:
|
|
22
|
+
|
|
23
|
+
(VP gives (NP authority) (PP to administration))
|
|
24
|
+
(VP gives (NP inventors (PP of microchip)))
|
|
25
|
+
|
|
26
|
+
The corpus contains the following files:
|
|
27
|
+
|
|
28
|
+
training: training set
|
|
29
|
+
devset: development test set, used for algorithm development.
|
|
30
|
+
test: test set, used to report results
|
|
31
|
+
bitstrings: word classes derived from Mutual Information Clustering for the Wall Street Journal.
|
|
32
|
+
|
|
33
|
+
Ratnaparkhi, Adwait (1994). A Maximum Entropy Model for Prepositional
|
|
34
|
+
Phrase Attachment. Proceedings of the ARPA Human Language Technology
|
|
35
|
+
Conference. [http://www.cis.upenn.edu/~adwait/papers/hlt94.ps]
|
|
36
|
+
|
|
37
|
+
The PP Attachment Corpus is distributed with NLTK with the permission
|
|
38
|
+
of the author.
|
|
39
|
+
"""
|
|
40
|
+
from __future__ import unicode_literals
|
|
41
|
+
|
|
42
|
+
from six import string_types
|
|
43
|
+
|
|
44
|
+
from nltk import compat
|
|
45
|
+
from nltk.corpus.reader.util import *
|
|
46
|
+
from nltk.corpus.reader.api import *
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@compat.python_2_unicode_compatible
|
|
50
|
+
class PPAttachment(object):
|
|
51
|
+
def __init__(self, sent, verb, noun1, prep, noun2, attachment):
|
|
52
|
+
self.sent = sent
|
|
53
|
+
self.verb = verb
|
|
54
|
+
self.noun1 = noun1
|
|
55
|
+
self.prep = prep
|
|
56
|
+
self.noun2 = noun2
|
|
57
|
+
self.attachment = attachment
|
|
58
|
+
|
|
59
|
+
def __repr__(self):
|
|
60
|
+
return ('PPAttachment(sent=%r, verb=%r, noun1=%r, prep=%r, '
|
|
61
|
+
'noun2=%r, attachment=%r)' %
|
|
62
|
+
(self.sent, self.verb, self.noun1, self.prep,
|
|
63
|
+
self.noun2, self.attachment))
|
|
64
|
+
|
|
65
|
+
class PPAttachmentCorpusReader(CorpusReader):
|
|
66
|
+
"""
|
|
67
|
+
sentence_id verb noun1 preposition noun2 attachment
|
|
68
|
+
"""
|
|
69
|
+
def attachments(self, fileids):
|
|
70
|
+
return concat([StreamBackedCorpusView(fileid, self._read_obj_block,
|
|
71
|
+
encoding=enc)
|
|
72
|
+
for (fileid, enc) in self.abspaths(fileids, True)])
|
|
73
|
+
|
|
74
|
+
def tuples(self, fileids):
|
|
75
|
+
return concat([StreamBackedCorpusView(fileid, self._read_tuple_block,
|
|
76
|
+
encoding=enc)
|
|
77
|
+
for (fileid, enc) in self.abspaths(fileids, True)])
|
|
78
|
+
|
|
79
|
+
def raw(self, fileids=None):
|
|
80
|
+
if fileids is None: fileids = self._fileids
|
|
81
|
+
elif isinstance(fileids, string_types): fileids = [fileids]
|
|
82
|
+
return concat([self.open(f).read() for f in fileids])
|
|
83
|
+
|
|
84
|
+
def _read_tuple_block(self, stream):
|
|
85
|
+
line = stream.readline()
|
|
86
|
+
if line:
|
|
87
|
+
return [tuple(line.split())]
|
|
88
|
+
else:
|
|
89
|
+
return []
|
|
90
|
+
|
|
91
|
+
def _read_obj_block(self, stream):
|
|
92
|
+
line = stream.readline()
|
|
93
|
+
if line:
|
|
94
|
+
return [PPAttachment(*line.split())]
|
|
95
|
+
else:
|
|
96
|
+
return []
|