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,252 +1,252 @@
|
|
|
1
|
-
# Natural Language Toolkit: Plaintext Corpus Reader
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
-
# URL: <http://nltk.org/>
|
|
6
|
-
# For license information, see LICENSE.TXT
|
|
7
|
-
|
|
8
|
-
"""Corpus reader for the XML version of the British National Corpus."""
|
|
9
|
-
|
|
10
|
-
from nltk.corpus.reader.util import concat
|
|
11
|
-
from nltk.corpus.reader.xmldocs import XMLCorpusReader, XMLCorpusView, ElementTree
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class BNCCorpusReader(XMLCorpusReader):
|
|
15
|
-
"""Corpus reader for the XML version of the British National Corpus.
|
|
16
|
-
|
|
17
|
-
For access to the complete XML data structure, use the ``xml()``
|
|
18
|
-
method. For access to simple word lists and tagged word lists, use
|
|
19
|
-
``words()``, ``sents()``, ``tagged_words()``, and ``tagged_sents()``.
|
|
20
|
-
|
|
21
|
-
You can obtain the full version of the BNC corpus at
|
|
22
|
-
http://www.ota.ox.ac.uk/desc/2554
|
|
23
|
-
|
|
24
|
-
If you extracted the archive to a directory called `BNC`, then you can
|
|
25
|
-
instantiate the reader as::
|
|
26
|
-
|
|
27
|
-
BNCCorpusReader(root='BNC/Texts/', fileids=r'[A-K]/\w*/\w*\.xml')
|
|
28
|
-
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
def __init__(self, root, fileids, lazy=True):
|
|
32
|
-
XMLCorpusReader.__init__(self, root, fileids)
|
|
33
|
-
self._lazy = lazy
|
|
34
|
-
|
|
35
|
-
def words(self, fileids=None, strip_space=True, stem=False):
|
|
36
|
-
"""
|
|
37
|
-
:return: the given file(s) as a list of words
|
|
38
|
-
and punctuation symbols.
|
|
39
|
-
:rtype: list(str)
|
|
40
|
-
|
|
41
|
-
:param strip_space: If true, then strip trailing spaces from
|
|
42
|
-
word tokens. Otherwise, leave the spaces on the tokens.
|
|
43
|
-
:param stem: If true, then use word stems instead of word strings.
|
|
44
|
-
"""
|
|
45
|
-
return self._views(fileids, False, None, strip_space, stem)
|
|
46
|
-
|
|
47
|
-
def tagged_words(self, fileids=None, c5=False, strip_space=True, stem=False):
|
|
48
|
-
"""
|
|
49
|
-
:return: the given file(s) as a list of tagged
|
|
50
|
-
words and punctuation symbols, encoded as tuples
|
|
51
|
-
``(word,tag)``.
|
|
52
|
-
:rtype: list(tuple(str,str))
|
|
53
|
-
|
|
54
|
-
:param c5: If true, then the tags used will be the more detailed
|
|
55
|
-
c5 tags. Otherwise, the simplified tags will be used.
|
|
56
|
-
:param strip_space: If true, then strip trailing spaces from
|
|
57
|
-
word tokens. Otherwise, leave the spaces on the tokens.
|
|
58
|
-
:param stem: If true, then use word stems instead of word strings.
|
|
59
|
-
"""
|
|
60
|
-
tag = 'c5' if c5 else 'pos'
|
|
61
|
-
return self._views(fileids, False, tag, strip_space, stem)
|
|
62
|
-
|
|
63
|
-
def sents(self, fileids=None, strip_space=True, stem=False):
|
|
64
|
-
"""
|
|
65
|
-
:return: the given file(s) as a list of
|
|
66
|
-
sentences or utterances, each encoded as a list of word
|
|
67
|
-
strings.
|
|
68
|
-
:rtype: list(list(str))
|
|
69
|
-
|
|
70
|
-
:param strip_space: If true, then strip trailing spaces from
|
|
71
|
-
word tokens. Otherwise, leave the spaces on the tokens.
|
|
72
|
-
:param stem: If true, then use word stems instead of word strings.
|
|
73
|
-
"""
|
|
74
|
-
return self._views(fileids, True, None, strip_space, stem)
|
|
75
|
-
|
|
76
|
-
def tagged_sents(self, fileids=None, c5=False, strip_space=True, stem=False):
|
|
77
|
-
"""
|
|
78
|
-
:return: the given file(s) as a list of
|
|
79
|
-
sentences, each encoded as a list of ``(word,tag)`` tuples.
|
|
80
|
-
:rtype: list(list(tuple(str,str)))
|
|
81
|
-
|
|
82
|
-
:param c5: If true, then the tags used will be the more detailed
|
|
83
|
-
c5 tags. Otherwise, the simplified tags will be used.
|
|
84
|
-
:param strip_space: If true, then strip trailing spaces from
|
|
85
|
-
word tokens. Otherwise, leave the spaces on the tokens.
|
|
86
|
-
:param stem: If true, then use word stems instead of word strings.
|
|
87
|
-
"""
|
|
88
|
-
tag = 'c5' if c5 else 'pos'
|
|
89
|
-
return self._views(fileids, sent=True, tag=tag, strip_space=strip_space, stem=stem)
|
|
90
|
-
|
|
91
|
-
def _views(self, fileids=None, sent=False, tag=False, strip_space=True, stem=False):
|
|
92
|
-
"""A helper function that instantiates BNCWordViews or the list of words/sentences."""
|
|
93
|
-
f = BNCWordView if self._lazy else self._words
|
|
94
|
-
return concat([f(fileid, sent, tag, strip_space, stem) for fileid in self.abspaths(fileids)])
|
|
95
|
-
|
|
96
|
-
def _words(self, fileid, bracket_sent, tag, strip_space, stem):
|
|
97
|
-
"""
|
|
98
|
-
Helper used to implement the view methods -- returns a list of
|
|
99
|
-
words or a list of sentences, optionally tagged.
|
|
100
|
-
|
|
101
|
-
:param fileid: The name of the underlying file.
|
|
102
|
-
:param bracket_sent: If true, include sentence bracketing.
|
|
103
|
-
:param tag: The name of the tagset to use, or None for no tags.
|
|
104
|
-
:param strip_space: If true, strip spaces from word tokens.
|
|
105
|
-
:param stem: If true, then substitute stems for words.
|
|
106
|
-
"""
|
|
107
|
-
result = []
|
|
108
|
-
|
|
109
|
-
xmldoc = ElementTree.parse(fileid).getroot()
|
|
110
|
-
for xmlsent in xmldoc.findall('.//s'):
|
|
111
|
-
sent = []
|
|
112
|
-
for xmlword in _all_xmlwords_in(xmlsent):
|
|
113
|
-
word = xmlword.text
|
|
114
|
-
if not word:
|
|
115
|
-
word = "" # fixes issue 337?
|
|
116
|
-
if strip_space or stem:
|
|
117
|
-
word = word.strip()
|
|
118
|
-
if stem:
|
|
119
|
-
word = xmlword.get('hw', word)
|
|
120
|
-
if tag == 'c5':
|
|
121
|
-
word = (word, xmlword.get('c5'))
|
|
122
|
-
elif tag == 'pos':
|
|
123
|
-
word = (word, xmlword.get('pos', xmlword.get('c5')))
|
|
124
|
-
sent.append(word)
|
|
125
|
-
if bracket_sent:
|
|
126
|
-
result.append(BNCSentence(xmlsent.attrib['n'], sent))
|
|
127
|
-
else:
|
|
128
|
-
result.extend(sent)
|
|
129
|
-
|
|
130
|
-
assert None not in result
|
|
131
|
-
return result
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def _all_xmlwords_in(elt, result=None):
|
|
135
|
-
if result is None:
|
|
136
|
-
result = []
|
|
137
|
-
for child in elt:
|
|
138
|
-
if child.tag in ('c', 'w'):
|
|
139
|
-
result.append(child)
|
|
140
|
-
else:
|
|
141
|
-
_all_xmlwords_in(child, result)
|
|
142
|
-
return result
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
class BNCSentence(list):
|
|
146
|
-
"""
|
|
147
|
-
A list of words, augmented by an attribute ``num`` used to record
|
|
148
|
-
the sentence identifier (the ``n`` attribute from the XML).
|
|
149
|
-
"""
|
|
150
|
-
def __init__(self, num, items):
|
|
151
|
-
self.num = num
|
|
152
|
-
list.__init__(self, items)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
class BNCWordView(XMLCorpusView):
|
|
156
|
-
"""
|
|
157
|
-
A stream backed corpus view specialized for use with the BNC corpus.
|
|
158
|
-
"""
|
|
159
|
-
|
|
160
|
-
tags_to_ignore = set(
|
|
161
|
-
['pb', 'gap', 'vocal', 'event', 'unclear', 'shift', 'pause', 'align']
|
|
162
|
-
)
|
|
163
|
-
"""These tags are ignored. For their description refer to the
|
|
164
|
-
technical documentation, for example,
|
|
165
|
-
http://www.natcorp.ox.ac.uk/docs/URG/ref-vocal.html
|
|
166
|
-
|
|
167
|
-
"""
|
|
168
|
-
|
|
169
|
-
def __init__(self, fileid, sent, tag, strip_space, stem):
|
|
170
|
-
"""
|
|
171
|
-
:param fileid: The name of the underlying file.
|
|
172
|
-
:param sent: If true, include sentence bracketing.
|
|
173
|
-
:param tag: The name of the tagset to use, or None for no tags.
|
|
174
|
-
:param strip_space: If true, strip spaces from word tokens.
|
|
175
|
-
:param stem: If true, then substitute stems for words.
|
|
176
|
-
"""
|
|
177
|
-
if sent:
|
|
178
|
-
tagspec = '.*/s'
|
|
179
|
-
else:
|
|
180
|
-
tagspec = '.*/s/(.*/)?(c|w)'
|
|
181
|
-
self._sent = sent
|
|
182
|
-
self._tag = tag
|
|
183
|
-
self._strip_space = strip_space
|
|
184
|
-
self._stem = stem
|
|
185
|
-
|
|
186
|
-
self.title = None #: Title of the document.
|
|
187
|
-
self.author = None #: Author of the document.
|
|
188
|
-
self.editor = None #: Editor
|
|
189
|
-
self.resps = None #: Statement of responsibility
|
|
190
|
-
|
|
191
|
-
XMLCorpusView.__init__(self, fileid, tagspec)
|
|
192
|
-
|
|
193
|
-
# Read in a tasty header.
|
|
194
|
-
self._open()
|
|
195
|
-
self.read_block(self._stream, '.*/teiHeader$', self.handle_header)
|
|
196
|
-
self.close()
|
|
197
|
-
|
|
198
|
-
# Reset tag context.
|
|
199
|
-
self._tag_context = {0: ()}
|
|
200
|
-
|
|
201
|
-
def handle_header(self, elt, context):
|
|
202
|
-
# Set up some metadata!
|
|
203
|
-
titles = elt.findall('titleStmt/title')
|
|
204
|
-
if titles:
|
|
205
|
-
self.title = '\n'.join(title.text.strip() for title in titles)
|
|
206
|
-
|
|
207
|
-
authors = elt.findall('titleStmt/author')
|
|
208
|
-
if authors:
|
|
209
|
-
self.author = '\n'.join(author.text.strip() for author in authors)
|
|
210
|
-
|
|
211
|
-
editors = elt.findall('titleStmt/editor')
|
|
212
|
-
if editors:
|
|
213
|
-
self.editor = '\n'.join(editor.text.strip() for editor in editors)
|
|
214
|
-
|
|
215
|
-
resps = elt.findall('titleStmt/respStmt')
|
|
216
|
-
if resps:
|
|
217
|
-
self.resps = '\n\n'.join(
|
|
218
|
-
'\n'.join(
|
|
219
|
-
resp_elt.text.strip() for resp_elt in resp
|
|
220
|
-
) for resp in resps
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
def handle_elt(self, elt, context):
|
|
224
|
-
if self._sent:
|
|
225
|
-
return self.handle_sent(elt)
|
|
226
|
-
else:
|
|
227
|
-
return self.handle_word(elt)
|
|
228
|
-
|
|
229
|
-
def handle_word(self, elt):
|
|
230
|
-
word = elt.text
|
|
231
|
-
if not word:
|
|
232
|
-
word = "" # fixes issue 337?
|
|
233
|
-
if self._strip_space or self._stem:
|
|
234
|
-
word = word.strip()
|
|
235
|
-
if self._stem:
|
|
236
|
-
word = elt.get('hw', word)
|
|
237
|
-
if self._tag == 'c5':
|
|
238
|
-
word = (word, elt.get('c5'))
|
|
239
|
-
elif self._tag == 'pos':
|
|
240
|
-
word = (word, elt.get('pos', elt.get('c5')))
|
|
241
|
-
return word
|
|
242
|
-
|
|
243
|
-
def handle_sent(self, elt):
|
|
244
|
-
sent = []
|
|
245
|
-
for child in elt:
|
|
246
|
-
if child.tag in ('mw', 'hi', 'corr', 'trunc'):
|
|
247
|
-
sent += [self.handle_word(w) for w in child]
|
|
248
|
-
elif child.tag in ('w', 'c'):
|
|
249
|
-
sent.append(self.handle_word(child))
|
|
250
|
-
elif child.tag not in self.tags_to_ignore:
|
|
251
|
-
raise ValueError('Unexpected element %s' % child.tag)
|
|
252
|
-
return BNCSentence(elt.attrib['n'], sent)
|
|
1
|
+
# Natural Language Toolkit: Plaintext Corpus Reader
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
+
# URL: <http://nltk.org/>
|
|
6
|
+
# For license information, see LICENSE.TXT
|
|
7
|
+
|
|
8
|
+
"""Corpus reader for the XML version of the British National Corpus."""
|
|
9
|
+
|
|
10
|
+
from nltk.corpus.reader.util import concat
|
|
11
|
+
from nltk.corpus.reader.xmldocs import XMLCorpusReader, XMLCorpusView, ElementTree
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BNCCorpusReader(XMLCorpusReader):
|
|
15
|
+
"""Corpus reader for the XML version of the British National Corpus.
|
|
16
|
+
|
|
17
|
+
For access to the complete XML data structure, use the ``xml()``
|
|
18
|
+
method. For access to simple word lists and tagged word lists, use
|
|
19
|
+
``words()``, ``sents()``, ``tagged_words()``, and ``tagged_sents()``.
|
|
20
|
+
|
|
21
|
+
You can obtain the full version of the BNC corpus at
|
|
22
|
+
http://www.ota.ox.ac.uk/desc/2554
|
|
23
|
+
|
|
24
|
+
If you extracted the archive to a directory called `BNC`, then you can
|
|
25
|
+
instantiate the reader as::
|
|
26
|
+
|
|
27
|
+
BNCCorpusReader(root='BNC/Texts/', fileids=r'[A-K]/\w*/\w*\.xml')
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, root, fileids, lazy=True):
|
|
32
|
+
XMLCorpusReader.__init__(self, root, fileids)
|
|
33
|
+
self._lazy = lazy
|
|
34
|
+
|
|
35
|
+
def words(self, fileids=None, strip_space=True, stem=False):
|
|
36
|
+
"""
|
|
37
|
+
:return: the given file(s) as a list of words
|
|
38
|
+
and punctuation symbols.
|
|
39
|
+
:rtype: list(str)
|
|
40
|
+
|
|
41
|
+
:param strip_space: If true, then strip trailing spaces from
|
|
42
|
+
word tokens. Otherwise, leave the spaces on the tokens.
|
|
43
|
+
:param stem: If true, then use word stems instead of word strings.
|
|
44
|
+
"""
|
|
45
|
+
return self._views(fileids, False, None, strip_space, stem)
|
|
46
|
+
|
|
47
|
+
def tagged_words(self, fileids=None, c5=False, strip_space=True, stem=False):
|
|
48
|
+
"""
|
|
49
|
+
:return: the given file(s) as a list of tagged
|
|
50
|
+
words and punctuation symbols, encoded as tuples
|
|
51
|
+
``(word,tag)``.
|
|
52
|
+
:rtype: list(tuple(str,str))
|
|
53
|
+
|
|
54
|
+
:param c5: If true, then the tags used will be the more detailed
|
|
55
|
+
c5 tags. Otherwise, the simplified tags will be used.
|
|
56
|
+
:param strip_space: If true, then strip trailing spaces from
|
|
57
|
+
word tokens. Otherwise, leave the spaces on the tokens.
|
|
58
|
+
:param stem: If true, then use word stems instead of word strings.
|
|
59
|
+
"""
|
|
60
|
+
tag = 'c5' if c5 else 'pos'
|
|
61
|
+
return self._views(fileids, False, tag, strip_space, stem)
|
|
62
|
+
|
|
63
|
+
def sents(self, fileids=None, strip_space=True, stem=False):
|
|
64
|
+
"""
|
|
65
|
+
:return: the given file(s) as a list of
|
|
66
|
+
sentences or utterances, each encoded as a list of word
|
|
67
|
+
strings.
|
|
68
|
+
:rtype: list(list(str))
|
|
69
|
+
|
|
70
|
+
:param strip_space: If true, then strip trailing spaces from
|
|
71
|
+
word tokens. Otherwise, leave the spaces on the tokens.
|
|
72
|
+
:param stem: If true, then use word stems instead of word strings.
|
|
73
|
+
"""
|
|
74
|
+
return self._views(fileids, True, None, strip_space, stem)
|
|
75
|
+
|
|
76
|
+
def tagged_sents(self, fileids=None, c5=False, strip_space=True, stem=False):
|
|
77
|
+
"""
|
|
78
|
+
:return: the given file(s) as a list of
|
|
79
|
+
sentences, each encoded as a list of ``(word,tag)`` tuples.
|
|
80
|
+
:rtype: list(list(tuple(str,str)))
|
|
81
|
+
|
|
82
|
+
:param c5: If true, then the tags used will be the more detailed
|
|
83
|
+
c5 tags. Otherwise, the simplified tags will be used.
|
|
84
|
+
:param strip_space: If true, then strip trailing spaces from
|
|
85
|
+
word tokens. Otherwise, leave the spaces on the tokens.
|
|
86
|
+
:param stem: If true, then use word stems instead of word strings.
|
|
87
|
+
"""
|
|
88
|
+
tag = 'c5' if c5 else 'pos'
|
|
89
|
+
return self._views(fileids, sent=True, tag=tag, strip_space=strip_space, stem=stem)
|
|
90
|
+
|
|
91
|
+
def _views(self, fileids=None, sent=False, tag=False, strip_space=True, stem=False):
|
|
92
|
+
"""A helper function that instantiates BNCWordViews or the list of words/sentences."""
|
|
93
|
+
f = BNCWordView if self._lazy else self._words
|
|
94
|
+
return concat([f(fileid, sent, tag, strip_space, stem) for fileid in self.abspaths(fileids)])
|
|
95
|
+
|
|
96
|
+
def _words(self, fileid, bracket_sent, tag, strip_space, stem):
|
|
97
|
+
"""
|
|
98
|
+
Helper used to implement the view methods -- returns a list of
|
|
99
|
+
words or a list of sentences, optionally tagged.
|
|
100
|
+
|
|
101
|
+
:param fileid: The name of the underlying file.
|
|
102
|
+
:param bracket_sent: If true, include sentence bracketing.
|
|
103
|
+
:param tag: The name of the tagset to use, or None for no tags.
|
|
104
|
+
:param strip_space: If true, strip spaces from word tokens.
|
|
105
|
+
:param stem: If true, then substitute stems for words.
|
|
106
|
+
"""
|
|
107
|
+
result = []
|
|
108
|
+
|
|
109
|
+
xmldoc = ElementTree.parse(fileid).getroot()
|
|
110
|
+
for xmlsent in xmldoc.findall('.//s'):
|
|
111
|
+
sent = []
|
|
112
|
+
for xmlword in _all_xmlwords_in(xmlsent):
|
|
113
|
+
word = xmlword.text
|
|
114
|
+
if not word:
|
|
115
|
+
word = "" # fixes issue 337?
|
|
116
|
+
if strip_space or stem:
|
|
117
|
+
word = word.strip()
|
|
118
|
+
if stem:
|
|
119
|
+
word = xmlword.get('hw', word)
|
|
120
|
+
if tag == 'c5':
|
|
121
|
+
word = (word, xmlword.get('c5'))
|
|
122
|
+
elif tag == 'pos':
|
|
123
|
+
word = (word, xmlword.get('pos', xmlword.get('c5')))
|
|
124
|
+
sent.append(word)
|
|
125
|
+
if bracket_sent:
|
|
126
|
+
result.append(BNCSentence(xmlsent.attrib['n'], sent))
|
|
127
|
+
else:
|
|
128
|
+
result.extend(sent)
|
|
129
|
+
|
|
130
|
+
assert None not in result
|
|
131
|
+
return result
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _all_xmlwords_in(elt, result=None):
|
|
135
|
+
if result is None:
|
|
136
|
+
result = []
|
|
137
|
+
for child in elt:
|
|
138
|
+
if child.tag in ('c', 'w'):
|
|
139
|
+
result.append(child)
|
|
140
|
+
else:
|
|
141
|
+
_all_xmlwords_in(child, result)
|
|
142
|
+
return result
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class BNCSentence(list):
|
|
146
|
+
"""
|
|
147
|
+
A list of words, augmented by an attribute ``num`` used to record
|
|
148
|
+
the sentence identifier (the ``n`` attribute from the XML).
|
|
149
|
+
"""
|
|
150
|
+
def __init__(self, num, items):
|
|
151
|
+
self.num = num
|
|
152
|
+
list.__init__(self, items)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class BNCWordView(XMLCorpusView):
|
|
156
|
+
"""
|
|
157
|
+
A stream backed corpus view specialized for use with the BNC corpus.
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
tags_to_ignore = set(
|
|
161
|
+
['pb', 'gap', 'vocal', 'event', 'unclear', 'shift', 'pause', 'align']
|
|
162
|
+
)
|
|
163
|
+
"""These tags are ignored. For their description refer to the
|
|
164
|
+
technical documentation, for example,
|
|
165
|
+
http://www.natcorp.ox.ac.uk/docs/URG/ref-vocal.html
|
|
166
|
+
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
def __init__(self, fileid, sent, tag, strip_space, stem):
|
|
170
|
+
"""
|
|
171
|
+
:param fileid: The name of the underlying file.
|
|
172
|
+
:param sent: If true, include sentence bracketing.
|
|
173
|
+
:param tag: The name of the tagset to use, or None for no tags.
|
|
174
|
+
:param strip_space: If true, strip spaces from word tokens.
|
|
175
|
+
:param stem: If true, then substitute stems for words.
|
|
176
|
+
"""
|
|
177
|
+
if sent:
|
|
178
|
+
tagspec = '.*/s'
|
|
179
|
+
else:
|
|
180
|
+
tagspec = '.*/s/(.*/)?(c|w)'
|
|
181
|
+
self._sent = sent
|
|
182
|
+
self._tag = tag
|
|
183
|
+
self._strip_space = strip_space
|
|
184
|
+
self._stem = stem
|
|
185
|
+
|
|
186
|
+
self.title = None #: Title of the document.
|
|
187
|
+
self.author = None #: Author of the document.
|
|
188
|
+
self.editor = None #: Editor
|
|
189
|
+
self.resps = None #: Statement of responsibility
|
|
190
|
+
|
|
191
|
+
XMLCorpusView.__init__(self, fileid, tagspec)
|
|
192
|
+
|
|
193
|
+
# Read in a tasty header.
|
|
194
|
+
self._open()
|
|
195
|
+
self.read_block(self._stream, '.*/teiHeader$', self.handle_header)
|
|
196
|
+
self.close()
|
|
197
|
+
|
|
198
|
+
# Reset tag context.
|
|
199
|
+
self._tag_context = {0: ()}
|
|
200
|
+
|
|
201
|
+
def handle_header(self, elt, context):
|
|
202
|
+
# Set up some metadata!
|
|
203
|
+
titles = elt.findall('titleStmt/title')
|
|
204
|
+
if titles:
|
|
205
|
+
self.title = '\n'.join(title.text.strip() for title in titles)
|
|
206
|
+
|
|
207
|
+
authors = elt.findall('titleStmt/author')
|
|
208
|
+
if authors:
|
|
209
|
+
self.author = '\n'.join(author.text.strip() for author in authors)
|
|
210
|
+
|
|
211
|
+
editors = elt.findall('titleStmt/editor')
|
|
212
|
+
if editors:
|
|
213
|
+
self.editor = '\n'.join(editor.text.strip() for editor in editors)
|
|
214
|
+
|
|
215
|
+
resps = elt.findall('titleStmt/respStmt')
|
|
216
|
+
if resps:
|
|
217
|
+
self.resps = '\n\n'.join(
|
|
218
|
+
'\n'.join(
|
|
219
|
+
resp_elt.text.strip() for resp_elt in resp
|
|
220
|
+
) for resp in resps
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
def handle_elt(self, elt, context):
|
|
224
|
+
if self._sent:
|
|
225
|
+
return self.handle_sent(elt)
|
|
226
|
+
else:
|
|
227
|
+
return self.handle_word(elt)
|
|
228
|
+
|
|
229
|
+
def handle_word(self, elt):
|
|
230
|
+
word = elt.text
|
|
231
|
+
if not word:
|
|
232
|
+
word = "" # fixes issue 337?
|
|
233
|
+
if self._strip_space or self._stem:
|
|
234
|
+
word = word.strip()
|
|
235
|
+
if self._stem:
|
|
236
|
+
word = elt.get('hw', word)
|
|
237
|
+
if self._tag == 'c5':
|
|
238
|
+
word = (word, elt.get('c5'))
|
|
239
|
+
elif self._tag == 'pos':
|
|
240
|
+
word = (word, elt.get('pos', elt.get('c5')))
|
|
241
|
+
return word
|
|
242
|
+
|
|
243
|
+
def handle_sent(self, elt):
|
|
244
|
+
sent = []
|
|
245
|
+
for child in elt:
|
|
246
|
+
if child.tag in ('mw', 'hi', 'corr', 'trunc'):
|
|
247
|
+
sent += [self.handle_word(w) for w in child]
|
|
248
|
+
elif child.tag in ('w', 'c'):
|
|
249
|
+
sent.append(self.handle_word(child))
|
|
250
|
+
elif child.tag not in self.tags_to_ignore:
|
|
251
|
+
raise ValueError('Unexpected element %s' % child.tag)
|
|
252
|
+
return BNCSentence(elt.attrib['n'], sent)
|