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,227 +1,227 @@
|
|
|
1
|
-
# Natural Language Toolkit: Penn Treebank Reader
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
-
# Edward Loper <edloper@gmail.com>
|
|
6
|
-
# URL: <http://nltk.org/>
|
|
7
|
-
# For license information, see LICENSE.TXT
|
|
8
|
-
"""
|
|
9
|
-
Corpus reader for corpora that consist of parenthesis-delineated parse trees.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import sys
|
|
13
|
-
|
|
14
|
-
from nltk.tree import Tree
|
|
15
|
-
from nltk.tag import map_tag
|
|
16
|
-
|
|
17
|
-
from nltk.corpus.reader.util import *
|
|
18
|
-
from nltk.corpus.reader.api import *
|
|
19
|
-
|
|
20
|
-
# we use [^\s()]+ instead of \S+? to avoid matching ()
|
|
21
|
-
SORTTAGWRD = re.compile(r'\((\d+) ([^\s()]+) ([^\s()]+)\)')
|
|
22
|
-
TAGWORD = re.compile(r'\(([^\s()]+) ([^\s()]+)\)')
|
|
23
|
-
WORD = re.compile(r'\([^\s()]+ ([^\s()]+)\)')
|
|
24
|
-
EMPTY_BRACKETS = re.compile(r'\s*\(\s*\(')
|
|
25
|
-
|
|
26
|
-
class BracketParseCorpusReader(SyntaxCorpusReader):
|
|
27
|
-
"""
|
|
28
|
-
Reader for corpora that consist of parenthesis-delineated parse trees,
|
|
29
|
-
like those found in the "combined" section of the Penn Treebank,
|
|
30
|
-
e.g. "(S (NP (DT the) (JJ little) (NN dog)) (VP (VBD barked)))".
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
def __init__(self, root, fileids, comment_char=None,
|
|
34
|
-
detect_blocks='unindented_paren', encoding='utf8',
|
|
35
|
-
tagset=None):
|
|
36
|
-
"""
|
|
37
|
-
:param root: The root directory for this corpus.
|
|
38
|
-
:param fileids: A list or regexp specifying the fileids in this corpus.
|
|
39
|
-
:param comment_char: The character which can appear at the start of
|
|
40
|
-
a line to indicate that the rest of the line is a comment.
|
|
41
|
-
:param detect_blocks: The method that is used to find blocks
|
|
42
|
-
in the corpus; can be 'unindented_paren' (every unindented
|
|
43
|
-
parenthesis starts a new parse) or 'sexpr' (brackets are
|
|
44
|
-
matched).
|
|
45
|
-
:param tagset: The name of the tagset used by this corpus, to be used
|
|
46
|
-
for normalizing or converting the POS tags returned by the
|
|
47
|
-
tagged_...() methods.
|
|
48
|
-
"""
|
|
49
|
-
CorpusReader.__init__(self, root, fileids, encoding)
|
|
50
|
-
self._comment_char = comment_char
|
|
51
|
-
self._detect_blocks = detect_blocks
|
|
52
|
-
self._tagset = tagset
|
|
53
|
-
|
|
54
|
-
def _read_block(self, stream):
|
|
55
|
-
if self._detect_blocks == 'sexpr':
|
|
56
|
-
return read_sexpr_block(stream, comment_char=self._comment_char)
|
|
57
|
-
elif self._detect_blocks == 'blankline':
|
|
58
|
-
return read_blankline_block(stream)
|
|
59
|
-
elif self._detect_blocks == 'unindented_paren':
|
|
60
|
-
# Tokens start with unindented left parens.
|
|
61
|
-
toks = read_regexp_block(stream, start_re=r'^\(')
|
|
62
|
-
# Strip any comments out of the tokens.
|
|
63
|
-
if self._comment_char:
|
|
64
|
-
toks = [re.sub('(?m)^%s.*'%re.escape(self._comment_char),
|
|
65
|
-
'', tok)
|
|
66
|
-
for tok in toks]
|
|
67
|
-
return toks
|
|
68
|
-
else:
|
|
69
|
-
assert 0, 'bad block type'
|
|
70
|
-
|
|
71
|
-
def _normalize(self, t):
|
|
72
|
-
# If there's an empty set of brackets surrounding the actual
|
|
73
|
-
# parse, then strip them off.
|
|
74
|
-
if EMPTY_BRACKETS.match(t):
|
|
75
|
-
t = t.strip()[1:-1]
|
|
76
|
-
# Replace leaves of the form (!), (,), with (! !), (, ,)
|
|
77
|
-
t = re.sub(r"\((.)\)", r"(\1 \1)", t)
|
|
78
|
-
# Replace leaves of the form (tag word root) with (tag word)
|
|
79
|
-
t = re.sub(r"\(([^\s()]+) ([^\s()]+) [^\s()]+\)", r"(\1 \2)", t)
|
|
80
|
-
return t
|
|
81
|
-
|
|
82
|
-
def _parse(self, t):
|
|
83
|
-
try:
|
|
84
|
-
return Tree.fromstring(self._normalize(t))
|
|
85
|
-
|
|
86
|
-
except ValueError as e:
|
|
87
|
-
sys.stderr.write("Bad tree detected; trying to recover...\n")
|
|
88
|
-
# Try to recover, if we can:
|
|
89
|
-
if e.args == ('mismatched parens',):
|
|
90
|
-
for n in range(1, 5):
|
|
91
|
-
try:
|
|
92
|
-
v = Tree(self._normalize(t+')'*n))
|
|
93
|
-
sys.stderr.write(" Recovered by adding %d close "
|
|
94
|
-
"paren(s)\n" % n)
|
|
95
|
-
return v
|
|
96
|
-
except ValueError: pass
|
|
97
|
-
# Try something else:
|
|
98
|
-
sys.stderr.write(" Recovered by returning a flat parse.\n")
|
|
99
|
-
#sys.stderr.write(' '.join(t.split())+'\n')
|
|
100
|
-
return Tree('S', self._tag(t))
|
|
101
|
-
|
|
102
|
-
def _tag(self, t, tagset=None):
|
|
103
|
-
tagged_sent = [(w,p) for (p,w) in TAGWORD.findall(self._normalize(t))]
|
|
104
|
-
if tagset and tagset != self._tagset:
|
|
105
|
-
tagged_sent = [(w, map_tag(self._tagset, tagset, p)) for (w,p) in tagged_sent]
|
|
106
|
-
return tagged_sent
|
|
107
|
-
|
|
108
|
-
def _word(self, t):
|
|
109
|
-
return WORD.findall(self._normalize(t))
|
|
110
|
-
|
|
111
|
-
class CategorizedBracketParseCorpusReader(CategorizedCorpusReader,
|
|
112
|
-
BracketParseCorpusReader):
|
|
113
|
-
"""
|
|
114
|
-
A reader for parsed corpora whose documents are
|
|
115
|
-
divided into categories based on their file identifiers.
|
|
116
|
-
@author: Nathan Schneider <nschneid@cs.cmu.edu>
|
|
117
|
-
"""
|
|
118
|
-
def __init__(self, *args, **kwargs):
|
|
119
|
-
"""
|
|
120
|
-
Initialize the corpus reader. Categorization arguments
|
|
121
|
-
(C{cat_pattern}, C{cat_map}, and C{cat_file}) are passed to
|
|
122
|
-
the L{CategorizedCorpusReader constructor
|
|
123
|
-
<CategorizedCorpusReader.__init__>}. The remaining arguments
|
|
124
|
-
are passed to the L{BracketParseCorpusReader constructor
|
|
125
|
-
<BracketParseCorpusReader.__init__>}.
|
|
126
|
-
"""
|
|
127
|
-
CategorizedCorpusReader.__init__(self, kwargs)
|
|
128
|
-
BracketParseCorpusReader.__init__(self, *args, **kwargs)
|
|
129
|
-
|
|
130
|
-
def _resolve(self, fileids, categories):
|
|
131
|
-
if fileids is not None and categories is not None:
|
|
132
|
-
raise ValueError('Specify fileids or categories, not both')
|
|
133
|
-
if categories is not None:
|
|
134
|
-
return self.fileids(categories)
|
|
135
|
-
else:
|
|
136
|
-
return fileids
|
|
137
|
-
def raw(self, fileids=None, categories=None):
|
|
138
|
-
return BracketParseCorpusReader.raw(
|
|
139
|
-
self, self._resolve(fileids, categories))
|
|
140
|
-
def words(self, fileids=None, categories=None):
|
|
141
|
-
return BracketParseCorpusReader.words(
|
|
142
|
-
self, self._resolve(fileids, categories))
|
|
143
|
-
def sents(self, fileids=None, categories=None):
|
|
144
|
-
return BracketParseCorpusReader.sents(
|
|
145
|
-
self, self._resolve(fileids, categories))
|
|
146
|
-
def paras(self, fileids=None, categories=None):
|
|
147
|
-
return BracketParseCorpusReader.paras(
|
|
148
|
-
self, self._resolve(fileids, categories))
|
|
149
|
-
def tagged_words(self, fileids=None, categories=None, tagset=None):
|
|
150
|
-
return BracketParseCorpusReader.tagged_words(
|
|
151
|
-
self, self._resolve(fileids, categories), tagset)
|
|
152
|
-
def tagged_sents(self, fileids=None, categories=None, tagset=None):
|
|
153
|
-
return BracketParseCorpusReader.tagged_sents(
|
|
154
|
-
self, self._resolve(fileids, categories), tagset)
|
|
155
|
-
def tagged_paras(self, fileids=None, categories=None, tagset=None):
|
|
156
|
-
return BracketParseCorpusReader.tagged_paras(
|
|
157
|
-
self, self._resolve(fileids, categories), tagset)
|
|
158
|
-
def parsed_words(self, fileids=None, categories=None):
|
|
159
|
-
return BracketParseCorpusReader.parsed_words(
|
|
160
|
-
self, self._resolve(fileids, categories))
|
|
161
|
-
def parsed_sents(self, fileids=None, categories=None):
|
|
162
|
-
return BracketParseCorpusReader.parsed_sents(
|
|
163
|
-
self, self._resolve(fileids, categories))
|
|
164
|
-
def parsed_paras(self, fileids=None, categories=None):
|
|
165
|
-
return BracketParseCorpusReader.parsed_paras(
|
|
166
|
-
self, self._resolve(fileids, categories))
|
|
167
|
-
|
|
168
|
-
class AlpinoCorpusReader(BracketParseCorpusReader):
|
|
169
|
-
"""
|
|
170
|
-
Reader for the Alpino Dutch Treebank.
|
|
171
|
-
This corpus has a lexical breakdown structure embedded, as read by _parse
|
|
172
|
-
Unfortunately this puts punctuation and some other words out of the sentence
|
|
173
|
-
order in the xml element tree. This is no good for tag_ and word_
|
|
174
|
-
_tag and _word will be overridden to use a non-default new parameter 'ordered'
|
|
175
|
-
to the overridden _normalize function. The _parse function can then remain
|
|
176
|
-
untouched.
|
|
177
|
-
"""
|
|
178
|
-
def __init__(self, root, encoding='ISO-8859-1', tagset=None):
|
|
179
|
-
BracketParseCorpusReader.__init__(self, root, 'alpino\.xml',
|
|
180
|
-
detect_blocks='blankline',
|
|
181
|
-
encoding=encoding,
|
|
182
|
-
tagset=tagset)
|
|
183
|
-
|
|
184
|
-
def _normalize(self, t, ordered = False):
|
|
185
|
-
"""Normalize the xml sentence element in t.
|
|
186
|
-
The sentence elements <alpino_ds>, although embedded in a few overall
|
|
187
|
-
xml elements, are seperated by blank lines. That's how the reader can
|
|
188
|
-
deliver them one at a time.
|
|
189
|
-
Each sentence has a few category subnodes that are of no use to us.
|
|
190
|
-
The remaining word nodes may or may not appear in the proper order.
|
|
191
|
-
Each word node has attributes, among which:
|
|
192
|
-
- begin : the position of the word in the sentence
|
|
193
|
-
- pos : Part of Speech: the Tag
|
|
194
|
-
- word : the actual word
|
|
195
|
-
The return value is a string with all xml elementes replaced by
|
|
196
|
-
clauses: either a cat clause with nested clauses, or a word clause.
|
|
197
|
-
The order of the bracket clauses closely follows the xml.
|
|
198
|
-
If ordered == True, the word clauses include an order sequence number.
|
|
199
|
-
If ordered == False, the word clauses only have pos and word parts.
|
|
200
|
-
"""
|
|
201
|
-
if t[:10] != "<alpino_ds":
|
|
202
|
-
return ""
|
|
203
|
-
# convert XML to sexpr notation
|
|
204
|
-
t = re.sub(r' <node .*? cat="(\w+)".*>', r"(\1", t)
|
|
205
|
-
if ordered:
|
|
206
|
-
t = re.sub(r' <node. *?begin="(\d+)".*? pos="(\w+)".*? word="([^"]+)".*?/>', r"(\1 \2 \3)", t)
|
|
207
|
-
else:
|
|
208
|
-
t = re.sub(r' <node .*?pos="(\w+)".*? word="([^"]+)".*?/>', r"(\1 \2)", t)
|
|
209
|
-
t = re.sub(r" </node>", r")", t)
|
|
210
|
-
t = re.sub(r"<sentence>.*</sentence>", r"", t)
|
|
211
|
-
t = re.sub(r"</?alpino_ds.*>", r"", t)
|
|
212
|
-
return t
|
|
213
|
-
|
|
214
|
-
def _tag(self, t, tagset=None):
|
|
215
|
-
tagged_sent = [(int(o), w, p) for (o,p,w) in SORTTAGWRD.findall(self._normalize(t, ordered = True))]
|
|
216
|
-
tagged_sent.sort()
|
|
217
|
-
if tagset and tagset != self._tagset:
|
|
218
|
-
tagged_sent = [(w, map_tag(self._tagset, tagset, p)) for (o,w,p) in tagged_sent]
|
|
219
|
-
else:
|
|
220
|
-
tagged_sent = [(w,p) for (o,w,p) in tagged_sent]
|
|
221
|
-
return tagged_sent
|
|
222
|
-
|
|
223
|
-
def _word(self, t):
|
|
224
|
-
"""Return a correctly ordered list if words"""
|
|
225
|
-
tagged_sent = self._tag(t)
|
|
226
|
-
return [w for (w,p) in tagged_sent]
|
|
227
|
-
|
|
1
|
+
# Natural Language Toolkit: Penn Treebank Reader
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
+
# Edward Loper <edloper@gmail.com>
|
|
6
|
+
# URL: <http://nltk.org/>
|
|
7
|
+
# For license information, see LICENSE.TXT
|
|
8
|
+
"""
|
|
9
|
+
Corpus reader for corpora that consist of parenthesis-delineated parse trees.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
from nltk.tree import Tree
|
|
15
|
+
from nltk.tag import map_tag
|
|
16
|
+
|
|
17
|
+
from nltk.corpus.reader.util import *
|
|
18
|
+
from nltk.corpus.reader.api import *
|
|
19
|
+
|
|
20
|
+
# we use [^\s()]+ instead of \S+? to avoid matching ()
|
|
21
|
+
SORTTAGWRD = re.compile(r'\((\d+) ([^\s()]+) ([^\s()]+)\)')
|
|
22
|
+
TAGWORD = re.compile(r'\(([^\s()]+) ([^\s()]+)\)')
|
|
23
|
+
WORD = re.compile(r'\([^\s()]+ ([^\s()]+)\)')
|
|
24
|
+
EMPTY_BRACKETS = re.compile(r'\s*\(\s*\(')
|
|
25
|
+
|
|
26
|
+
class BracketParseCorpusReader(SyntaxCorpusReader):
|
|
27
|
+
"""
|
|
28
|
+
Reader for corpora that consist of parenthesis-delineated parse trees,
|
|
29
|
+
like those found in the "combined" section of the Penn Treebank,
|
|
30
|
+
e.g. "(S (NP (DT the) (JJ little) (NN dog)) (VP (VBD barked)))".
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
def __init__(self, root, fileids, comment_char=None,
|
|
34
|
+
detect_blocks='unindented_paren', encoding='utf8',
|
|
35
|
+
tagset=None):
|
|
36
|
+
"""
|
|
37
|
+
:param root: The root directory for this corpus.
|
|
38
|
+
:param fileids: A list or regexp specifying the fileids in this corpus.
|
|
39
|
+
:param comment_char: The character which can appear at the start of
|
|
40
|
+
a line to indicate that the rest of the line is a comment.
|
|
41
|
+
:param detect_blocks: The method that is used to find blocks
|
|
42
|
+
in the corpus; can be 'unindented_paren' (every unindented
|
|
43
|
+
parenthesis starts a new parse) or 'sexpr' (brackets are
|
|
44
|
+
matched).
|
|
45
|
+
:param tagset: The name of the tagset used by this corpus, to be used
|
|
46
|
+
for normalizing or converting the POS tags returned by the
|
|
47
|
+
tagged_...() methods.
|
|
48
|
+
"""
|
|
49
|
+
CorpusReader.__init__(self, root, fileids, encoding)
|
|
50
|
+
self._comment_char = comment_char
|
|
51
|
+
self._detect_blocks = detect_blocks
|
|
52
|
+
self._tagset = tagset
|
|
53
|
+
|
|
54
|
+
def _read_block(self, stream):
|
|
55
|
+
if self._detect_blocks == 'sexpr':
|
|
56
|
+
return read_sexpr_block(stream, comment_char=self._comment_char)
|
|
57
|
+
elif self._detect_blocks == 'blankline':
|
|
58
|
+
return read_blankline_block(stream)
|
|
59
|
+
elif self._detect_blocks == 'unindented_paren':
|
|
60
|
+
# Tokens start with unindented left parens.
|
|
61
|
+
toks = read_regexp_block(stream, start_re=r'^\(')
|
|
62
|
+
# Strip any comments out of the tokens.
|
|
63
|
+
if self._comment_char:
|
|
64
|
+
toks = [re.sub('(?m)^%s.*'%re.escape(self._comment_char),
|
|
65
|
+
'', tok)
|
|
66
|
+
for tok in toks]
|
|
67
|
+
return toks
|
|
68
|
+
else:
|
|
69
|
+
assert 0, 'bad block type'
|
|
70
|
+
|
|
71
|
+
def _normalize(self, t):
|
|
72
|
+
# If there's an empty set of brackets surrounding the actual
|
|
73
|
+
# parse, then strip them off.
|
|
74
|
+
if EMPTY_BRACKETS.match(t):
|
|
75
|
+
t = t.strip()[1:-1]
|
|
76
|
+
# Replace leaves of the form (!), (,), with (! !), (, ,)
|
|
77
|
+
t = re.sub(r"\((.)\)", r"(\1 \1)", t)
|
|
78
|
+
# Replace leaves of the form (tag word root) with (tag word)
|
|
79
|
+
t = re.sub(r"\(([^\s()]+) ([^\s()]+) [^\s()]+\)", r"(\1 \2)", t)
|
|
80
|
+
return t
|
|
81
|
+
|
|
82
|
+
def _parse(self, t):
|
|
83
|
+
try:
|
|
84
|
+
return Tree.fromstring(self._normalize(t))
|
|
85
|
+
|
|
86
|
+
except ValueError as e:
|
|
87
|
+
sys.stderr.write("Bad tree detected; trying to recover...\n")
|
|
88
|
+
# Try to recover, if we can:
|
|
89
|
+
if e.args == ('mismatched parens',):
|
|
90
|
+
for n in range(1, 5):
|
|
91
|
+
try:
|
|
92
|
+
v = Tree(self._normalize(t+')'*n))
|
|
93
|
+
sys.stderr.write(" Recovered by adding %d close "
|
|
94
|
+
"paren(s)\n" % n)
|
|
95
|
+
return v
|
|
96
|
+
except ValueError: pass
|
|
97
|
+
# Try something else:
|
|
98
|
+
sys.stderr.write(" Recovered by returning a flat parse.\n")
|
|
99
|
+
#sys.stderr.write(' '.join(t.split())+'\n')
|
|
100
|
+
return Tree('S', self._tag(t))
|
|
101
|
+
|
|
102
|
+
def _tag(self, t, tagset=None):
|
|
103
|
+
tagged_sent = [(w,p) for (p,w) in TAGWORD.findall(self._normalize(t))]
|
|
104
|
+
if tagset and tagset != self._tagset:
|
|
105
|
+
tagged_sent = [(w, map_tag(self._tagset, tagset, p)) for (w,p) in tagged_sent]
|
|
106
|
+
return tagged_sent
|
|
107
|
+
|
|
108
|
+
def _word(self, t):
|
|
109
|
+
return WORD.findall(self._normalize(t))
|
|
110
|
+
|
|
111
|
+
class CategorizedBracketParseCorpusReader(CategorizedCorpusReader,
|
|
112
|
+
BracketParseCorpusReader):
|
|
113
|
+
"""
|
|
114
|
+
A reader for parsed corpora whose documents are
|
|
115
|
+
divided into categories based on their file identifiers.
|
|
116
|
+
@author: Nathan Schneider <nschneid@cs.cmu.edu>
|
|
117
|
+
"""
|
|
118
|
+
def __init__(self, *args, **kwargs):
|
|
119
|
+
"""
|
|
120
|
+
Initialize the corpus reader. Categorization arguments
|
|
121
|
+
(C{cat_pattern}, C{cat_map}, and C{cat_file}) are passed to
|
|
122
|
+
the L{CategorizedCorpusReader constructor
|
|
123
|
+
<CategorizedCorpusReader.__init__>}. The remaining arguments
|
|
124
|
+
are passed to the L{BracketParseCorpusReader constructor
|
|
125
|
+
<BracketParseCorpusReader.__init__>}.
|
|
126
|
+
"""
|
|
127
|
+
CategorizedCorpusReader.__init__(self, kwargs)
|
|
128
|
+
BracketParseCorpusReader.__init__(self, *args, **kwargs)
|
|
129
|
+
|
|
130
|
+
def _resolve(self, fileids, categories):
|
|
131
|
+
if fileids is not None and categories is not None:
|
|
132
|
+
raise ValueError('Specify fileids or categories, not both')
|
|
133
|
+
if categories is not None:
|
|
134
|
+
return self.fileids(categories)
|
|
135
|
+
else:
|
|
136
|
+
return fileids
|
|
137
|
+
def raw(self, fileids=None, categories=None):
|
|
138
|
+
return BracketParseCorpusReader.raw(
|
|
139
|
+
self, self._resolve(fileids, categories))
|
|
140
|
+
def words(self, fileids=None, categories=None):
|
|
141
|
+
return BracketParseCorpusReader.words(
|
|
142
|
+
self, self._resolve(fileids, categories))
|
|
143
|
+
def sents(self, fileids=None, categories=None):
|
|
144
|
+
return BracketParseCorpusReader.sents(
|
|
145
|
+
self, self._resolve(fileids, categories))
|
|
146
|
+
def paras(self, fileids=None, categories=None):
|
|
147
|
+
return BracketParseCorpusReader.paras(
|
|
148
|
+
self, self._resolve(fileids, categories))
|
|
149
|
+
def tagged_words(self, fileids=None, categories=None, tagset=None):
|
|
150
|
+
return BracketParseCorpusReader.tagged_words(
|
|
151
|
+
self, self._resolve(fileids, categories), tagset)
|
|
152
|
+
def tagged_sents(self, fileids=None, categories=None, tagset=None):
|
|
153
|
+
return BracketParseCorpusReader.tagged_sents(
|
|
154
|
+
self, self._resolve(fileids, categories), tagset)
|
|
155
|
+
def tagged_paras(self, fileids=None, categories=None, tagset=None):
|
|
156
|
+
return BracketParseCorpusReader.tagged_paras(
|
|
157
|
+
self, self._resolve(fileids, categories), tagset)
|
|
158
|
+
def parsed_words(self, fileids=None, categories=None):
|
|
159
|
+
return BracketParseCorpusReader.parsed_words(
|
|
160
|
+
self, self._resolve(fileids, categories))
|
|
161
|
+
def parsed_sents(self, fileids=None, categories=None):
|
|
162
|
+
return BracketParseCorpusReader.parsed_sents(
|
|
163
|
+
self, self._resolve(fileids, categories))
|
|
164
|
+
def parsed_paras(self, fileids=None, categories=None):
|
|
165
|
+
return BracketParseCorpusReader.parsed_paras(
|
|
166
|
+
self, self._resolve(fileids, categories))
|
|
167
|
+
|
|
168
|
+
class AlpinoCorpusReader(BracketParseCorpusReader):
|
|
169
|
+
"""
|
|
170
|
+
Reader for the Alpino Dutch Treebank.
|
|
171
|
+
This corpus has a lexical breakdown structure embedded, as read by _parse
|
|
172
|
+
Unfortunately this puts punctuation and some other words out of the sentence
|
|
173
|
+
order in the xml element tree. This is no good for tag_ and word_
|
|
174
|
+
_tag and _word will be overridden to use a non-default new parameter 'ordered'
|
|
175
|
+
to the overridden _normalize function. The _parse function can then remain
|
|
176
|
+
untouched.
|
|
177
|
+
"""
|
|
178
|
+
def __init__(self, root, encoding='ISO-8859-1', tagset=None):
|
|
179
|
+
BracketParseCorpusReader.__init__(self, root, 'alpino\.xml',
|
|
180
|
+
detect_blocks='blankline',
|
|
181
|
+
encoding=encoding,
|
|
182
|
+
tagset=tagset)
|
|
183
|
+
|
|
184
|
+
def _normalize(self, t, ordered = False):
|
|
185
|
+
"""Normalize the xml sentence element in t.
|
|
186
|
+
The sentence elements <alpino_ds>, although embedded in a few overall
|
|
187
|
+
xml elements, are seperated by blank lines. That's how the reader can
|
|
188
|
+
deliver them one at a time.
|
|
189
|
+
Each sentence has a few category subnodes that are of no use to us.
|
|
190
|
+
The remaining word nodes may or may not appear in the proper order.
|
|
191
|
+
Each word node has attributes, among which:
|
|
192
|
+
- begin : the position of the word in the sentence
|
|
193
|
+
- pos : Part of Speech: the Tag
|
|
194
|
+
- word : the actual word
|
|
195
|
+
The return value is a string with all xml elementes replaced by
|
|
196
|
+
clauses: either a cat clause with nested clauses, or a word clause.
|
|
197
|
+
The order of the bracket clauses closely follows the xml.
|
|
198
|
+
If ordered == True, the word clauses include an order sequence number.
|
|
199
|
+
If ordered == False, the word clauses only have pos and word parts.
|
|
200
|
+
"""
|
|
201
|
+
if t[:10] != "<alpino_ds":
|
|
202
|
+
return ""
|
|
203
|
+
# convert XML to sexpr notation
|
|
204
|
+
t = re.sub(r' <node .*? cat="(\w+)".*>', r"(\1", t)
|
|
205
|
+
if ordered:
|
|
206
|
+
t = re.sub(r' <node. *?begin="(\d+)".*? pos="(\w+)".*? word="([^"]+)".*?/>', r"(\1 \2 \3)", t)
|
|
207
|
+
else:
|
|
208
|
+
t = re.sub(r' <node .*?pos="(\w+)".*? word="([^"]+)".*?/>', r"(\1 \2)", t)
|
|
209
|
+
t = re.sub(r" </node>", r")", t)
|
|
210
|
+
t = re.sub(r"<sentence>.*</sentence>", r"", t)
|
|
211
|
+
t = re.sub(r"</?alpino_ds.*>", r"", t)
|
|
212
|
+
return t
|
|
213
|
+
|
|
214
|
+
def _tag(self, t, tagset=None):
|
|
215
|
+
tagged_sent = [(int(o), w, p) for (o,p,w) in SORTTAGWRD.findall(self._normalize(t, ordered = True))]
|
|
216
|
+
tagged_sent.sort()
|
|
217
|
+
if tagset and tagset != self._tagset:
|
|
218
|
+
tagged_sent = [(w, map_tag(self._tagset, tagset, p)) for (o,w,p) in tagged_sent]
|
|
219
|
+
else:
|
|
220
|
+
tagged_sent = [(w,p) for (o,w,p) in tagged_sent]
|
|
221
|
+
return tagged_sent
|
|
222
|
+
|
|
223
|
+
def _word(self, t):
|
|
224
|
+
"""Return a correctly ordered list if words"""
|
|
225
|
+
tagged_sent = self._tag(t)
|
|
226
|
+
return [w for (w,p) in tagged_sent]
|
|
227
|
+
|