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,379 +1,379 @@
|
|
|
1
|
-
.. Copyright (C) 2001-
|
|
2
|
-
.. For license information, see LICENSE.TXT
|
|
3
|
-
|
|
4
|
-
=========================================
|
|
5
|
-
Loading Resources From the Data Package
|
|
6
|
-
=========================================
|
|
7
|
-
|
|
8
|
-
>>> import nltk.data
|
|
9
|
-
|
|
10
|
-
Overview
|
|
11
|
-
~~~~~~~~
|
|
12
|
-
The `nltk.data` module contains functions that can be used to load
|
|
13
|
-
NLTK resource files, such as corpora, grammars, and saved processing
|
|
14
|
-
objects.
|
|
15
|
-
|
|
16
|
-
Loading Data Files
|
|
17
|
-
~~~~~~~~~~~~~~~~~~
|
|
18
|
-
Resources are loaded using the function `nltk.data.load()`, which
|
|
19
|
-
takes as its first argument a URL specifying what file should be
|
|
20
|
-
loaded. The ``nltk:`` protocol loads files from the NLTK data
|
|
21
|
-
distribution:
|
|
22
|
-
|
|
23
|
-
>>> from __future__ import print_function
|
|
24
|
-
>>> tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')
|
|
25
|
-
>>> tokenizer.tokenize('Hello. This is a test. It works!')
|
|
26
|
-
['Hello.', 'This is a test.', 'It works!']
|
|
27
|
-
|
|
28
|
-
It is important to note that there should be no space following the
|
|
29
|
-
colon (':') in the URL; 'nltk: tokenizers/punkt/english.pickle' will
|
|
30
|
-
not work!
|
|
31
|
-
|
|
32
|
-
The ``nltk:`` protocol is used by default if no protocol is specified:
|
|
33
|
-
|
|
34
|
-
>>> nltk.data.load('tokenizers/punkt/english.pickle') # doctest: +ELLIPSIS
|
|
35
|
-
<nltk.tokenize.punkt.PunktSentenceTokenizer object at ...>
|
|
36
|
-
|
|
37
|
-
But it is also possible to load resources from ``http:``, ``ftp:``,
|
|
38
|
-
and ``file:`` URLs, e.g. ``cfg = nltk.data.load('http://example.com/path/to/toy.cfg')``
|
|
39
|
-
|
|
40
|
-
>>> # Load a grammar using an absolute path.
|
|
41
|
-
>>> url = 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg')
|
|
42
|
-
>>> url.replace('\\', '/') # doctest: +ELLIPSIS
|
|
43
|
-
'file:...toy.cfg'
|
|
44
|
-
>>> print(nltk.data.load(url)) # doctest: +ELLIPSIS
|
|
45
|
-
Grammar with 14 productions (start state = S)
|
|
46
|
-
S -> NP VP
|
|
47
|
-
PP -> P NP
|
|
48
|
-
...
|
|
49
|
-
P -> 'on'
|
|
50
|
-
P -> 'in'
|
|
51
|
-
|
|
52
|
-
The second argument to the `nltk.data.load()` function specifies the
|
|
53
|
-
file format, which determines how the file's contents are processed
|
|
54
|
-
before they are returned by ``load()``. The formats that are
|
|
55
|
-
currently supported by the data module are described by the dictionary
|
|
56
|
-
`nltk.data.FORMATS`:
|
|
57
|
-
|
|
58
|
-
>>> for format, descr in sorted(nltk.data.FORMATS.items()):
|
|
59
|
-
... print('{0:<7} {1:}'.format(format, descr)) # doctest: +NORMALIZE_WHITESPACE
|
|
60
|
-
cfg A context free grammar.
|
|
61
|
-
fcfg A feature CFG.
|
|
62
|
-
fol A list of first order logic expressions, parsed with
|
|
63
|
-
nltk.sem.logic.Expression.fromstring.
|
|
64
|
-
json A serialized python object, stored using the json module.
|
|
65
|
-
logic A list of first order logic expressions, parsed with
|
|
66
|
-
nltk.sem.logic.LogicParser. Requires an additional logic_parser
|
|
67
|
-
parameter
|
|
68
|
-
pcfg A probabilistic CFG.
|
|
69
|
-
pickle A serialized python object, stored using the pickle
|
|
70
|
-
module.
|
|
71
|
-
raw The raw (byte string) contents of a file.
|
|
72
|
-
text The raw (unicode string) contents of a file.
|
|
73
|
-
val A semantic valuation, parsed by
|
|
74
|
-
nltk.sem.Valuation.fromstring.
|
|
75
|
-
yaml A serialized python object, stored using the yaml module.
|
|
76
|
-
|
|
77
|
-
`nltk.data.load()` will raise a ValueError if a bad format name is
|
|
78
|
-
specified:
|
|
79
|
-
|
|
80
|
-
>>> nltk.data.load('grammars/sample_grammars/toy.cfg', 'bar')
|
|
81
|
-
Traceback (most recent call last):
|
|
82
|
-
. . .
|
|
83
|
-
ValueError: Unknown format type!
|
|
84
|
-
|
|
85
|
-
By default, the ``"auto"`` format is used, which chooses a format
|
|
86
|
-
based on the filename's extension. The mapping from file extensions
|
|
87
|
-
to format names is specified by `nltk.data.AUTO_FORMATS`:
|
|
88
|
-
|
|
89
|
-
>>> for ext, format in sorted(nltk.data.AUTO_FORMATS.items()):
|
|
90
|
-
... print('.%-7s -> %s' % (ext, format))
|
|
91
|
-
.cfg -> cfg
|
|
92
|
-
.fcfg -> fcfg
|
|
93
|
-
.fol -> fol
|
|
94
|
-
.json -> json
|
|
95
|
-
.logic -> logic
|
|
96
|
-
.pcfg -> pcfg
|
|
97
|
-
.pickle -> pickle
|
|
98
|
-
.text -> text
|
|
99
|
-
.txt -> text
|
|
100
|
-
.val -> val
|
|
101
|
-
.yaml -> yaml
|
|
102
|
-
|
|
103
|
-
If `nltk.data.load()` is unable to determine the format based on the
|
|
104
|
-
filename's extension, it will raise a ValueError:
|
|
105
|
-
|
|
106
|
-
>>> nltk.data.load('foo.bar')
|
|
107
|
-
Traceback (most recent call last):
|
|
108
|
-
. . .
|
|
109
|
-
ValueError: Could not determine format for foo.bar based on its file
|
|
110
|
-
extension; use the "format" argument to specify the format explicitly.
|
|
111
|
-
|
|
112
|
-
Note that by explicitly specifying the ``format`` argument, you can
|
|
113
|
-
override the load method's default processing behavior. For example,
|
|
114
|
-
to get the raw contents of any file, simply use ``format="raw"``:
|
|
115
|
-
|
|
116
|
-
>>> s = nltk.data.load('grammars/sample_grammars/toy.cfg', 'text')
|
|
117
|
-
>>> print(s) # doctest: +ELLIPSIS
|
|
118
|
-
S -> NP VP
|
|
119
|
-
PP -> P NP
|
|
120
|
-
NP -> Det N | NP PP
|
|
121
|
-
VP -> V NP | VP PP
|
|
122
|
-
...
|
|
123
|
-
|
|
124
|
-
Making Local Copies
|
|
125
|
-
~~~~~~~~~~~~~~~~~~~
|
|
126
|
-
.. This will not be visible in the html output: create a tempdir to
|
|
127
|
-
play in.
|
|
128
|
-
>>> import tempfile, os
|
|
129
|
-
>>> tempdir = tempfile.mkdtemp()
|
|
130
|
-
>>> old_dir = os.path.abspath('.')
|
|
131
|
-
>>> os.chdir(tempdir)
|
|
132
|
-
|
|
133
|
-
The function `nltk.data.retrieve()` copies a given resource to a local
|
|
134
|
-
file. This can be useful, for example, if you want to edit one of the
|
|
135
|
-
sample grammars.
|
|
136
|
-
|
|
137
|
-
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg')
|
|
138
|
-
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy.cfg'
|
|
139
|
-
|
|
140
|
-
>>> # Simulate editing the grammar.
|
|
141
|
-
>>> with open('toy.cfg') as inp:
|
|
142
|
-
... s = inp.read().replace('NP', 'DP')
|
|
143
|
-
>>> with open('toy.cfg', 'w') as out:
|
|
144
|
-
... _bytes_written = out.write(s)
|
|
145
|
-
|
|
146
|
-
>>> # Load the edited grammar, & display it.
|
|
147
|
-
>>> cfg = nltk.data.load('file:///' + os.path.abspath('toy.cfg'))
|
|
148
|
-
>>> print(cfg) # doctest: +ELLIPSIS
|
|
149
|
-
Grammar with 14 productions (start state = S)
|
|
150
|
-
S -> DP VP
|
|
151
|
-
PP -> P DP
|
|
152
|
-
...
|
|
153
|
-
P -> 'on'
|
|
154
|
-
P -> 'in'
|
|
155
|
-
|
|
156
|
-
The second argument to `nltk.data.retrieve()` specifies the filename
|
|
157
|
-
for the new copy of the file. By default, the source file's filename
|
|
158
|
-
is used.
|
|
159
|
-
|
|
160
|
-
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg', 'mytoy.cfg')
|
|
161
|
-
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'mytoy.cfg'
|
|
162
|
-
>>> os.path.isfile('./mytoy.cfg')
|
|
163
|
-
True
|
|
164
|
-
>>> nltk.data.retrieve('grammars/sample_grammars/np.fcfg')
|
|
165
|
-
Retrieving 'nltk:grammars/sample_grammars/np.fcfg', saving to 'np.fcfg'
|
|
166
|
-
>>> os.path.isfile('./np.fcfg')
|
|
167
|
-
True
|
|
168
|
-
|
|
169
|
-
If a file with the specified (or default) filename already exists in
|
|
170
|
-
the current directory, then `nltk.data.retrieve()` will raise a
|
|
171
|
-
ValueError exception. It will *not* overwrite the file:
|
|
172
|
-
|
|
173
|
-
>>> os.path.isfile('./toy.cfg')
|
|
174
|
-
True
|
|
175
|
-
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg') # doctest: +ELLIPSIS
|
|
176
|
-
Traceback (most recent call last):
|
|
177
|
-
. . .
|
|
178
|
-
ValueError: File '...toy.cfg' already exists!
|
|
179
|
-
|
|
180
|
-
.. This will not be visible in the html output: clean up the tempdir.
|
|
181
|
-
>>> os.chdir(old_dir)
|
|
182
|
-
>>> for f in os.listdir(tempdir):
|
|
183
|
-
... os.remove(os.path.join(tempdir, f))
|
|
184
|
-
>>> os.rmdir(tempdir)
|
|
185
|
-
|
|
186
|
-
Finding Files in the NLTK Data Package
|
|
187
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
188
|
-
The `nltk.data.find()` function searches the NLTK data package for a
|
|
189
|
-
given file, and returns a pointer to that file. This pointer can
|
|
190
|
-
either be a `FileSystemPathPointer` (whose `path` attribute gives the
|
|
191
|
-
absolute path of the file); or a `ZipFilePathPointer`, specifying a
|
|
192
|
-
zipfile and the name of an entry within that zipfile. Both pointer
|
|
193
|
-
types define the `open()` method, which can be used to read the string
|
|
194
|
-
contents of the file.
|
|
195
|
-
|
|
196
|
-
>>> path = nltk.data.find('corpora/abc/rural.txt')
|
|
197
|
-
>>> str(path) # doctest: +ELLIPSIS
|
|
198
|
-
'...rural.txt'
|
|
199
|
-
>>> print(path.open().read(60).decode())
|
|
200
|
-
PM denies knowledge of AWB kickbacks
|
|
201
|
-
The Prime Minister has
|
|
202
|
-
|
|
203
|
-
Alternatively, the `nltk.data.load()` function can be used with the
|
|
204
|
-
keyword argument ``format="raw"``:
|
|
205
|
-
|
|
206
|
-
>>> s = nltk.data.load('corpora/abc/rural.txt', format='raw')[:60]
|
|
207
|
-
>>> print(s.decode())
|
|
208
|
-
PM denies knowledge of AWB kickbacks
|
|
209
|
-
The Prime Minister has
|
|
210
|
-
|
|
211
|
-
Alternatively, you can use the keyword argument ``format="text"``:
|
|
212
|
-
|
|
213
|
-
>>> s = nltk.data.load('corpora/abc/rural.txt', format='text')[:60]
|
|
214
|
-
>>> print(s)
|
|
215
|
-
PM denies knowledge of AWB kickbacks
|
|
216
|
-
The Prime Minister has
|
|
217
|
-
|
|
218
|
-
Resource Caching
|
|
219
|
-
~~~~~~~~~~~~~~~~
|
|
220
|
-
|
|
221
|
-
NLTK uses a weakref dictionary to maintain a cache of resources that
|
|
222
|
-
have been loaded. If you load a resource that is already stored in
|
|
223
|
-
the cache, then the cached copy will be returned. This behavior can
|
|
224
|
-
be seen by the trace output generated when verbose=True:
|
|
225
|
-
|
|
226
|
-
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
|
|
227
|
-
<<Loading nltk:grammars/book_grammars/feat0.fcfg>>
|
|
228
|
-
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
|
|
229
|
-
<<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
|
|
230
|
-
|
|
231
|
-
If you wish to load a resource from its source, bypassing the cache,
|
|
232
|
-
use the ``cache=False`` argument to `nltk.data.load()`. This can be
|
|
233
|
-
useful, for example, if the resource is loaded from a local file, and
|
|
234
|
-
you are actively editing that file:
|
|
235
|
-
|
|
236
|
-
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',cache=False,verbose=True)
|
|
237
|
-
<<Loading nltk:grammars/book_grammars/feat0.fcfg>>
|
|
238
|
-
|
|
239
|
-
The cache *no longer* uses weak references. A resource will not be
|
|
240
|
-
automatically expunged from the cache when no more objects are using
|
|
241
|
-
it. In the following example, when we clear the variable ``feat0``,
|
|
242
|
-
the reference count for the feature grammar object drops to zero.
|
|
243
|
-
However, the object remains cached:
|
|
244
|
-
|
|
245
|
-
>>> del feat0
|
|
246
|
-
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',
|
|
247
|
-
... verbose=True)
|
|
248
|
-
<<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
|
|
249
|
-
|
|
250
|
-
You can clear the entire contents of the cache, using
|
|
251
|
-
`nltk.data.clear_cache()`:
|
|
252
|
-
|
|
253
|
-
>>> nltk.data.clear_cache()
|
|
254
|
-
|
|
255
|
-
Retrieving other Data Sources
|
|
256
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
257
|
-
>>> formulas = nltk.data.load('grammars/book_grammars/background.fol')
|
|
258
|
-
>>> for f in formulas: print(str(f))
|
|
259
|
-
all x.(boxerdog(x) -> dog(x))
|
|
260
|
-
all x.(boxer(x) -> person(x))
|
|
261
|
-
all x.-(dog(x) & person(x))
|
|
262
|
-
all x.(married(x) <-> exists y.marry(x,y))
|
|
263
|
-
all x.(bark(x) -> dog(x))
|
|
264
|
-
all x y.(marry(x,y) -> (person(x) & person(y)))
|
|
265
|
-
-(Vincent = Mia)
|
|
266
|
-
-(Vincent = Fido)
|
|
267
|
-
-(Mia = Fido)
|
|
268
|
-
|
|
269
|
-
Regression Tests
|
|
270
|
-
~~~~~~~~~~~~~~~~
|
|
271
|
-
Create a temp dir for tests that write files:
|
|
272
|
-
|
|
273
|
-
>>> import tempfile, os
|
|
274
|
-
>>> tempdir = tempfile.mkdtemp()
|
|
275
|
-
>>> old_dir = os.path.abspath('.')
|
|
276
|
-
>>> os.chdir(tempdir)
|
|
277
|
-
|
|
278
|
-
The `retrieve()` function accepts all url types:
|
|
279
|
-
|
|
280
|
-
>>> urls = ['https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg',
|
|
281
|
-
... 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg'),
|
|
282
|
-
... 'nltk:grammars/sample_grammars/toy.cfg',
|
|
283
|
-
... 'grammars/sample_grammars/toy.cfg']
|
|
284
|
-
>>> for i, url in enumerate(urls):
|
|
285
|
-
... nltk.data.retrieve(url, 'toy-%d.cfg' % i) # doctest: +ELLIPSIS
|
|
286
|
-
Retrieving 'https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg', saving to 'toy-0.cfg'
|
|
287
|
-
Retrieving 'file:...toy.cfg', saving to 'toy-1.cfg'
|
|
288
|
-
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-2.cfg'
|
|
289
|
-
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-3.cfg'
|
|
290
|
-
|
|
291
|
-
Clean up the temp dir:
|
|
292
|
-
|
|
293
|
-
>>> os.chdir(old_dir)
|
|
294
|
-
>>> for f in os.listdir(tempdir):
|
|
295
|
-
... os.remove(os.path.join(tempdir, f))
|
|
296
|
-
>>> os.rmdir(tempdir)
|
|
297
|
-
|
|
298
|
-
Lazy Loader
|
|
299
|
-
-----------
|
|
300
|
-
A lazy loader is a wrapper object that defers loading a resource until
|
|
301
|
-
it is accessed or used in any way. This is mainly intended for
|
|
302
|
-
internal use by NLTK's corpus readers.
|
|
303
|
-
|
|
304
|
-
>>> # Create a lazy loader for toy.cfg.
|
|
305
|
-
>>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
|
|
306
|
-
|
|
307
|
-
>>> # Show that it's not loaded yet:
|
|
308
|
-
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
309
|
-
'<nltk.data.LazyLoader object at ...>'
|
|
310
|
-
|
|
311
|
-
>>> # printing it is enough to cause it to be loaded:
|
|
312
|
-
>>> print(ll)
|
|
313
|
-
<Grammar with 14 productions>
|
|
314
|
-
|
|
315
|
-
>>> # Show that it's now been loaded:
|
|
316
|
-
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
317
|
-
'<nltk.grammar.CFG object at ...>'
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
>>> # Test that accessing an attribute also loads it:
|
|
321
|
-
>>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
|
|
322
|
-
>>> ll.start()
|
|
323
|
-
S
|
|
324
|
-
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
325
|
-
'<nltk.grammar.CFG object at ...>'
|
|
326
|
-
|
|
327
|
-
Buffered Gzip Reading and Writing
|
|
328
|
-
---------------------------------
|
|
329
|
-
Write performance to gzip-compressed is extremely poor when the files become large.
|
|
330
|
-
File creation can become a bottleneck in those cases.
|
|
331
|
-
|
|
332
|
-
Read performance from large gzipped pickle files was improved in data.py by
|
|
333
|
-
buffering the reads. A similar fix can be applied to writes by buffering
|
|
334
|
-
the writes to a StringIO object first.
|
|
335
|
-
|
|
336
|
-
This is mainly intended for internal use. The test simply tests that reading
|
|
337
|
-
and writing work as intended and does not test how much improvement buffering
|
|
338
|
-
provides.
|
|
339
|
-
|
|
340
|
-
>>> from nltk.compat import StringIO
|
|
341
|
-
>>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'wb', size=2**10)
|
|
342
|
-
>>> ans = []
|
|
343
|
-
>>> for i in range(10000):
|
|
344
|
-
... ans.append(str(i).encode('ascii'))
|
|
345
|
-
... test.write(str(i).encode('ascii'))
|
|
346
|
-
>>> test.close()
|
|
347
|
-
>>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'rb')
|
|
348
|
-
>>> test.read() == b''.join(ans)
|
|
349
|
-
True
|
|
350
|
-
>>> test.close()
|
|
351
|
-
>>> import os
|
|
352
|
-
>>> os.unlink('testbuf.gz')
|
|
353
|
-
|
|
354
|
-
JSON Encoding and Decoding
|
|
355
|
-
--------------------------
|
|
356
|
-
JSON serialization is used instead of pickle for some classes.
|
|
357
|
-
|
|
358
|
-
>>> from nltk import jsontags
|
|
359
|
-
>>> from nltk.jsontags import JSONTaggedEncoder, JSONTaggedDecoder, register_tag
|
|
360
|
-
>>> @jsontags.register_tag
|
|
361
|
-
... class JSONSerializable:
|
|
362
|
-
... json_tag = 'JSONSerializable'
|
|
363
|
-
...
|
|
364
|
-
... def __init__(self, n):
|
|
365
|
-
... self.n = n
|
|
366
|
-
...
|
|
367
|
-
... def encode_json_obj(self):
|
|
368
|
-
... return self.n
|
|
369
|
-
...
|
|
370
|
-
... @classmethod
|
|
371
|
-
... def decode_json_obj(cls, obj):
|
|
372
|
-
... n = obj
|
|
373
|
-
... return cls(n)
|
|
374
|
-
...
|
|
375
|
-
>>> JSONTaggedEncoder().encode(JSONSerializable(1))
|
|
376
|
-
'{"!JSONSerializable": 1}'
|
|
377
|
-
>>> JSONTaggedDecoder().decode('{"!JSONSerializable": 1}').n
|
|
378
|
-
1
|
|
379
|
-
|
|
1
|
+
.. Copyright (C) 2001-2018 NLTK Project
|
|
2
|
+
.. For license information, see LICENSE.TXT
|
|
3
|
+
|
|
4
|
+
=========================================
|
|
5
|
+
Loading Resources From the Data Package
|
|
6
|
+
=========================================
|
|
7
|
+
|
|
8
|
+
>>> import nltk.data
|
|
9
|
+
|
|
10
|
+
Overview
|
|
11
|
+
~~~~~~~~
|
|
12
|
+
The `nltk.data` module contains functions that can be used to load
|
|
13
|
+
NLTK resource files, such as corpora, grammars, and saved processing
|
|
14
|
+
objects.
|
|
15
|
+
|
|
16
|
+
Loading Data Files
|
|
17
|
+
~~~~~~~~~~~~~~~~~~
|
|
18
|
+
Resources are loaded using the function `nltk.data.load()`, which
|
|
19
|
+
takes as its first argument a URL specifying what file should be
|
|
20
|
+
loaded. The ``nltk:`` protocol loads files from the NLTK data
|
|
21
|
+
distribution:
|
|
22
|
+
|
|
23
|
+
>>> from __future__ import print_function
|
|
24
|
+
>>> tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')
|
|
25
|
+
>>> tokenizer.tokenize('Hello. This is a test. It works!')
|
|
26
|
+
['Hello.', 'This is a test.', 'It works!']
|
|
27
|
+
|
|
28
|
+
It is important to note that there should be no space following the
|
|
29
|
+
colon (':') in the URL; 'nltk: tokenizers/punkt/english.pickle' will
|
|
30
|
+
not work!
|
|
31
|
+
|
|
32
|
+
The ``nltk:`` protocol is used by default if no protocol is specified:
|
|
33
|
+
|
|
34
|
+
>>> nltk.data.load('tokenizers/punkt/english.pickle') # doctest: +ELLIPSIS
|
|
35
|
+
<nltk.tokenize.punkt.PunktSentenceTokenizer object at ...>
|
|
36
|
+
|
|
37
|
+
But it is also possible to load resources from ``http:``, ``ftp:``,
|
|
38
|
+
and ``file:`` URLs, e.g. ``cfg = nltk.data.load('http://example.com/path/to/toy.cfg')``
|
|
39
|
+
|
|
40
|
+
>>> # Load a grammar using an absolute path.
|
|
41
|
+
>>> url = 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg')
|
|
42
|
+
>>> url.replace('\\', '/') # doctest: +ELLIPSIS
|
|
43
|
+
'file:...toy.cfg'
|
|
44
|
+
>>> print(nltk.data.load(url)) # doctest: +ELLIPSIS
|
|
45
|
+
Grammar with 14 productions (start state = S)
|
|
46
|
+
S -> NP VP
|
|
47
|
+
PP -> P NP
|
|
48
|
+
...
|
|
49
|
+
P -> 'on'
|
|
50
|
+
P -> 'in'
|
|
51
|
+
|
|
52
|
+
The second argument to the `nltk.data.load()` function specifies the
|
|
53
|
+
file format, which determines how the file's contents are processed
|
|
54
|
+
before they are returned by ``load()``. The formats that are
|
|
55
|
+
currently supported by the data module are described by the dictionary
|
|
56
|
+
`nltk.data.FORMATS`:
|
|
57
|
+
|
|
58
|
+
>>> for format, descr in sorted(nltk.data.FORMATS.items()):
|
|
59
|
+
... print('{0:<7} {1:}'.format(format, descr)) # doctest: +NORMALIZE_WHITESPACE
|
|
60
|
+
cfg A context free grammar.
|
|
61
|
+
fcfg A feature CFG.
|
|
62
|
+
fol A list of first order logic expressions, parsed with
|
|
63
|
+
nltk.sem.logic.Expression.fromstring.
|
|
64
|
+
json A serialized python object, stored using the json module.
|
|
65
|
+
logic A list of first order logic expressions, parsed with
|
|
66
|
+
nltk.sem.logic.LogicParser. Requires an additional logic_parser
|
|
67
|
+
parameter
|
|
68
|
+
pcfg A probabilistic CFG.
|
|
69
|
+
pickle A serialized python object, stored using the pickle
|
|
70
|
+
module.
|
|
71
|
+
raw The raw (byte string) contents of a file.
|
|
72
|
+
text The raw (unicode string) contents of a file.
|
|
73
|
+
val A semantic valuation, parsed by
|
|
74
|
+
nltk.sem.Valuation.fromstring.
|
|
75
|
+
yaml A serialized python object, stored using the yaml module.
|
|
76
|
+
|
|
77
|
+
`nltk.data.load()` will raise a ValueError if a bad format name is
|
|
78
|
+
specified:
|
|
79
|
+
|
|
80
|
+
>>> nltk.data.load('grammars/sample_grammars/toy.cfg', 'bar')
|
|
81
|
+
Traceback (most recent call last):
|
|
82
|
+
. . .
|
|
83
|
+
ValueError: Unknown format type!
|
|
84
|
+
|
|
85
|
+
By default, the ``"auto"`` format is used, which chooses a format
|
|
86
|
+
based on the filename's extension. The mapping from file extensions
|
|
87
|
+
to format names is specified by `nltk.data.AUTO_FORMATS`:
|
|
88
|
+
|
|
89
|
+
>>> for ext, format in sorted(nltk.data.AUTO_FORMATS.items()):
|
|
90
|
+
... print('.%-7s -> %s' % (ext, format))
|
|
91
|
+
.cfg -> cfg
|
|
92
|
+
.fcfg -> fcfg
|
|
93
|
+
.fol -> fol
|
|
94
|
+
.json -> json
|
|
95
|
+
.logic -> logic
|
|
96
|
+
.pcfg -> pcfg
|
|
97
|
+
.pickle -> pickle
|
|
98
|
+
.text -> text
|
|
99
|
+
.txt -> text
|
|
100
|
+
.val -> val
|
|
101
|
+
.yaml -> yaml
|
|
102
|
+
|
|
103
|
+
If `nltk.data.load()` is unable to determine the format based on the
|
|
104
|
+
filename's extension, it will raise a ValueError:
|
|
105
|
+
|
|
106
|
+
>>> nltk.data.load('foo.bar')
|
|
107
|
+
Traceback (most recent call last):
|
|
108
|
+
. . .
|
|
109
|
+
ValueError: Could not determine format for foo.bar based on its file
|
|
110
|
+
extension; use the "format" argument to specify the format explicitly.
|
|
111
|
+
|
|
112
|
+
Note that by explicitly specifying the ``format`` argument, you can
|
|
113
|
+
override the load method's default processing behavior. For example,
|
|
114
|
+
to get the raw contents of any file, simply use ``format="raw"``:
|
|
115
|
+
|
|
116
|
+
>>> s = nltk.data.load('grammars/sample_grammars/toy.cfg', 'text')
|
|
117
|
+
>>> print(s) # doctest: +ELLIPSIS
|
|
118
|
+
S -> NP VP
|
|
119
|
+
PP -> P NP
|
|
120
|
+
NP -> Det N | NP PP
|
|
121
|
+
VP -> V NP | VP PP
|
|
122
|
+
...
|
|
123
|
+
|
|
124
|
+
Making Local Copies
|
|
125
|
+
~~~~~~~~~~~~~~~~~~~
|
|
126
|
+
.. This will not be visible in the html output: create a tempdir to
|
|
127
|
+
play in.
|
|
128
|
+
>>> import tempfile, os
|
|
129
|
+
>>> tempdir = tempfile.mkdtemp()
|
|
130
|
+
>>> old_dir = os.path.abspath('.')
|
|
131
|
+
>>> os.chdir(tempdir)
|
|
132
|
+
|
|
133
|
+
The function `nltk.data.retrieve()` copies a given resource to a local
|
|
134
|
+
file. This can be useful, for example, if you want to edit one of the
|
|
135
|
+
sample grammars.
|
|
136
|
+
|
|
137
|
+
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg')
|
|
138
|
+
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy.cfg'
|
|
139
|
+
|
|
140
|
+
>>> # Simulate editing the grammar.
|
|
141
|
+
>>> with open('toy.cfg') as inp:
|
|
142
|
+
... s = inp.read().replace('NP', 'DP')
|
|
143
|
+
>>> with open('toy.cfg', 'w') as out:
|
|
144
|
+
... _bytes_written = out.write(s)
|
|
145
|
+
|
|
146
|
+
>>> # Load the edited grammar, & display it.
|
|
147
|
+
>>> cfg = nltk.data.load('file:///' + os.path.abspath('toy.cfg'))
|
|
148
|
+
>>> print(cfg) # doctest: +ELLIPSIS
|
|
149
|
+
Grammar with 14 productions (start state = S)
|
|
150
|
+
S -> DP VP
|
|
151
|
+
PP -> P DP
|
|
152
|
+
...
|
|
153
|
+
P -> 'on'
|
|
154
|
+
P -> 'in'
|
|
155
|
+
|
|
156
|
+
The second argument to `nltk.data.retrieve()` specifies the filename
|
|
157
|
+
for the new copy of the file. By default, the source file's filename
|
|
158
|
+
is used.
|
|
159
|
+
|
|
160
|
+
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg', 'mytoy.cfg')
|
|
161
|
+
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'mytoy.cfg'
|
|
162
|
+
>>> os.path.isfile('./mytoy.cfg')
|
|
163
|
+
True
|
|
164
|
+
>>> nltk.data.retrieve('grammars/sample_grammars/np.fcfg')
|
|
165
|
+
Retrieving 'nltk:grammars/sample_grammars/np.fcfg', saving to 'np.fcfg'
|
|
166
|
+
>>> os.path.isfile('./np.fcfg')
|
|
167
|
+
True
|
|
168
|
+
|
|
169
|
+
If a file with the specified (or default) filename already exists in
|
|
170
|
+
the current directory, then `nltk.data.retrieve()` will raise a
|
|
171
|
+
ValueError exception. It will *not* overwrite the file:
|
|
172
|
+
|
|
173
|
+
>>> os.path.isfile('./toy.cfg')
|
|
174
|
+
True
|
|
175
|
+
>>> nltk.data.retrieve('grammars/sample_grammars/toy.cfg') # doctest: +ELLIPSIS
|
|
176
|
+
Traceback (most recent call last):
|
|
177
|
+
. . .
|
|
178
|
+
ValueError: File '...toy.cfg' already exists!
|
|
179
|
+
|
|
180
|
+
.. This will not be visible in the html output: clean up the tempdir.
|
|
181
|
+
>>> os.chdir(old_dir)
|
|
182
|
+
>>> for f in os.listdir(tempdir):
|
|
183
|
+
... os.remove(os.path.join(tempdir, f))
|
|
184
|
+
>>> os.rmdir(tempdir)
|
|
185
|
+
|
|
186
|
+
Finding Files in the NLTK Data Package
|
|
187
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
188
|
+
The `nltk.data.find()` function searches the NLTK data package for a
|
|
189
|
+
given file, and returns a pointer to that file. This pointer can
|
|
190
|
+
either be a `FileSystemPathPointer` (whose `path` attribute gives the
|
|
191
|
+
absolute path of the file); or a `ZipFilePathPointer`, specifying a
|
|
192
|
+
zipfile and the name of an entry within that zipfile. Both pointer
|
|
193
|
+
types define the `open()` method, which can be used to read the string
|
|
194
|
+
contents of the file.
|
|
195
|
+
|
|
196
|
+
>>> path = nltk.data.find('corpora/abc/rural.txt')
|
|
197
|
+
>>> str(path) # doctest: +ELLIPSIS
|
|
198
|
+
'...rural.txt'
|
|
199
|
+
>>> print(path.open().read(60).decode())
|
|
200
|
+
PM denies knowledge of AWB kickbacks
|
|
201
|
+
The Prime Minister has
|
|
202
|
+
|
|
203
|
+
Alternatively, the `nltk.data.load()` function can be used with the
|
|
204
|
+
keyword argument ``format="raw"``:
|
|
205
|
+
|
|
206
|
+
>>> s = nltk.data.load('corpora/abc/rural.txt', format='raw')[:60]
|
|
207
|
+
>>> print(s.decode())
|
|
208
|
+
PM denies knowledge of AWB kickbacks
|
|
209
|
+
The Prime Minister has
|
|
210
|
+
|
|
211
|
+
Alternatively, you can use the keyword argument ``format="text"``:
|
|
212
|
+
|
|
213
|
+
>>> s = nltk.data.load('corpora/abc/rural.txt', format='text')[:60]
|
|
214
|
+
>>> print(s)
|
|
215
|
+
PM denies knowledge of AWB kickbacks
|
|
216
|
+
The Prime Minister has
|
|
217
|
+
|
|
218
|
+
Resource Caching
|
|
219
|
+
~~~~~~~~~~~~~~~~
|
|
220
|
+
|
|
221
|
+
NLTK uses a weakref dictionary to maintain a cache of resources that
|
|
222
|
+
have been loaded. If you load a resource that is already stored in
|
|
223
|
+
the cache, then the cached copy will be returned. This behavior can
|
|
224
|
+
be seen by the trace output generated when verbose=True:
|
|
225
|
+
|
|
226
|
+
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
|
|
227
|
+
<<Loading nltk:grammars/book_grammars/feat0.fcfg>>
|
|
228
|
+
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg', verbose=True)
|
|
229
|
+
<<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
|
|
230
|
+
|
|
231
|
+
If you wish to load a resource from its source, bypassing the cache,
|
|
232
|
+
use the ``cache=False`` argument to `nltk.data.load()`. This can be
|
|
233
|
+
useful, for example, if the resource is loaded from a local file, and
|
|
234
|
+
you are actively editing that file:
|
|
235
|
+
|
|
236
|
+
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',cache=False,verbose=True)
|
|
237
|
+
<<Loading nltk:grammars/book_grammars/feat0.fcfg>>
|
|
238
|
+
|
|
239
|
+
The cache *no longer* uses weak references. A resource will not be
|
|
240
|
+
automatically expunged from the cache when no more objects are using
|
|
241
|
+
it. In the following example, when we clear the variable ``feat0``,
|
|
242
|
+
the reference count for the feature grammar object drops to zero.
|
|
243
|
+
However, the object remains cached:
|
|
244
|
+
|
|
245
|
+
>>> del feat0
|
|
246
|
+
>>> feat0 = nltk.data.load('grammars/book_grammars/feat0.fcfg',
|
|
247
|
+
... verbose=True)
|
|
248
|
+
<<Using cached copy of nltk:grammars/book_grammars/feat0.fcfg>>
|
|
249
|
+
|
|
250
|
+
You can clear the entire contents of the cache, using
|
|
251
|
+
`nltk.data.clear_cache()`:
|
|
252
|
+
|
|
253
|
+
>>> nltk.data.clear_cache()
|
|
254
|
+
|
|
255
|
+
Retrieving other Data Sources
|
|
256
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
257
|
+
>>> formulas = nltk.data.load('grammars/book_grammars/background.fol')
|
|
258
|
+
>>> for f in formulas: print(str(f))
|
|
259
|
+
all x.(boxerdog(x) -> dog(x))
|
|
260
|
+
all x.(boxer(x) -> person(x))
|
|
261
|
+
all x.-(dog(x) & person(x))
|
|
262
|
+
all x.(married(x) <-> exists y.marry(x,y))
|
|
263
|
+
all x.(bark(x) -> dog(x))
|
|
264
|
+
all x y.(marry(x,y) -> (person(x) & person(y)))
|
|
265
|
+
-(Vincent = Mia)
|
|
266
|
+
-(Vincent = Fido)
|
|
267
|
+
-(Mia = Fido)
|
|
268
|
+
|
|
269
|
+
Regression Tests
|
|
270
|
+
~~~~~~~~~~~~~~~~
|
|
271
|
+
Create a temp dir for tests that write files:
|
|
272
|
+
|
|
273
|
+
>>> import tempfile, os
|
|
274
|
+
>>> tempdir = tempfile.mkdtemp()
|
|
275
|
+
>>> old_dir = os.path.abspath('.')
|
|
276
|
+
>>> os.chdir(tempdir)
|
|
277
|
+
|
|
278
|
+
The `retrieve()` function accepts all url types:
|
|
279
|
+
|
|
280
|
+
>>> urls = ['https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg',
|
|
281
|
+
... 'file:%s' % nltk.data.find('grammars/sample_grammars/toy.cfg'),
|
|
282
|
+
... 'nltk:grammars/sample_grammars/toy.cfg',
|
|
283
|
+
... 'grammars/sample_grammars/toy.cfg']
|
|
284
|
+
>>> for i, url in enumerate(urls):
|
|
285
|
+
... nltk.data.retrieve(url, 'toy-%d.cfg' % i) # doctest: +ELLIPSIS
|
|
286
|
+
Retrieving 'https://raw.githubusercontent.com/nltk/nltk/develop/nltk/test/toy.cfg', saving to 'toy-0.cfg'
|
|
287
|
+
Retrieving 'file:...toy.cfg', saving to 'toy-1.cfg'
|
|
288
|
+
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-2.cfg'
|
|
289
|
+
Retrieving 'nltk:grammars/sample_grammars/toy.cfg', saving to 'toy-3.cfg'
|
|
290
|
+
|
|
291
|
+
Clean up the temp dir:
|
|
292
|
+
|
|
293
|
+
>>> os.chdir(old_dir)
|
|
294
|
+
>>> for f in os.listdir(tempdir):
|
|
295
|
+
... os.remove(os.path.join(tempdir, f))
|
|
296
|
+
>>> os.rmdir(tempdir)
|
|
297
|
+
|
|
298
|
+
Lazy Loader
|
|
299
|
+
-----------
|
|
300
|
+
A lazy loader is a wrapper object that defers loading a resource until
|
|
301
|
+
it is accessed or used in any way. This is mainly intended for
|
|
302
|
+
internal use by NLTK's corpus readers.
|
|
303
|
+
|
|
304
|
+
>>> # Create a lazy loader for toy.cfg.
|
|
305
|
+
>>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
|
|
306
|
+
|
|
307
|
+
>>> # Show that it's not loaded yet:
|
|
308
|
+
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
309
|
+
'<nltk.data.LazyLoader object at ...>'
|
|
310
|
+
|
|
311
|
+
>>> # printing it is enough to cause it to be loaded:
|
|
312
|
+
>>> print(ll)
|
|
313
|
+
<Grammar with 14 productions>
|
|
314
|
+
|
|
315
|
+
>>> # Show that it's now been loaded:
|
|
316
|
+
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
317
|
+
'<nltk.grammar.CFG object at ...>'
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
>>> # Test that accessing an attribute also loads it:
|
|
321
|
+
>>> ll = nltk.data.LazyLoader('grammars/sample_grammars/toy.cfg')
|
|
322
|
+
>>> ll.start()
|
|
323
|
+
S
|
|
324
|
+
>>> object.__repr__(ll) # doctest: +ELLIPSIS
|
|
325
|
+
'<nltk.grammar.CFG object at ...>'
|
|
326
|
+
|
|
327
|
+
Buffered Gzip Reading and Writing
|
|
328
|
+
---------------------------------
|
|
329
|
+
Write performance to gzip-compressed is extremely poor when the files become large.
|
|
330
|
+
File creation can become a bottleneck in those cases.
|
|
331
|
+
|
|
332
|
+
Read performance from large gzipped pickle files was improved in data.py by
|
|
333
|
+
buffering the reads. A similar fix can be applied to writes by buffering
|
|
334
|
+
the writes to a StringIO object first.
|
|
335
|
+
|
|
336
|
+
This is mainly intended for internal use. The test simply tests that reading
|
|
337
|
+
and writing work as intended and does not test how much improvement buffering
|
|
338
|
+
provides.
|
|
339
|
+
|
|
340
|
+
>>> from nltk.compat import StringIO
|
|
341
|
+
>>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'wb', size=2**10)
|
|
342
|
+
>>> ans = []
|
|
343
|
+
>>> for i in range(10000):
|
|
344
|
+
... ans.append(str(i).encode('ascii'))
|
|
345
|
+
... test.write(str(i).encode('ascii'))
|
|
346
|
+
>>> test.close()
|
|
347
|
+
>>> test = nltk.data.BufferedGzipFile('testbuf.gz', 'rb')
|
|
348
|
+
>>> test.read() == b''.join(ans)
|
|
349
|
+
True
|
|
350
|
+
>>> test.close()
|
|
351
|
+
>>> import os
|
|
352
|
+
>>> os.unlink('testbuf.gz')
|
|
353
|
+
|
|
354
|
+
JSON Encoding and Decoding
|
|
355
|
+
--------------------------
|
|
356
|
+
JSON serialization is used instead of pickle for some classes.
|
|
357
|
+
|
|
358
|
+
>>> from nltk import jsontags
|
|
359
|
+
>>> from nltk.jsontags import JSONTaggedEncoder, JSONTaggedDecoder, register_tag
|
|
360
|
+
>>> @jsontags.register_tag
|
|
361
|
+
... class JSONSerializable:
|
|
362
|
+
... json_tag = 'JSONSerializable'
|
|
363
|
+
...
|
|
364
|
+
... def __init__(self, n):
|
|
365
|
+
... self.n = n
|
|
366
|
+
...
|
|
367
|
+
... def encode_json_obj(self):
|
|
368
|
+
... return self.n
|
|
369
|
+
...
|
|
370
|
+
... @classmethod
|
|
371
|
+
... def decode_json_obj(cls, obj):
|
|
372
|
+
... n = obj
|
|
373
|
+
... return cls(n)
|
|
374
|
+
...
|
|
375
|
+
>>> JSONTaggedEncoder().encode(JSONSerializable(1))
|
|
376
|
+
'{"!JSONSerializable": 1}'
|
|
377
|
+
>>> JSONTaggedDecoder().decode('{"!JSONSerializable": 1}').n
|
|
378
|
+
1
|
|
379
|
+
|