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
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
# Natural Language Toolkit: Verbnet 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
|
+
"""
|
|
9
|
+
An NLTK interface to the VerbNet verb lexicon
|
|
10
|
+
|
|
11
|
+
For details about VerbNet see:
|
|
12
|
+
https://verbs.colorado.edu/~mpalmer/projects/verbnet.html
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import unicode_literals
|
|
15
|
+
|
|
16
|
+
import re
|
|
17
|
+
import textwrap
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
|
|
20
|
+
from six import string_types
|
|
21
|
+
|
|
22
|
+
from nltk.corpus.reader.xmldocs import XMLCorpusReader
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class VerbnetCorpusReader(XMLCorpusReader):
|
|
26
|
+
"""
|
|
27
|
+
An NLTK interface to the VerbNet verb lexicon.
|
|
28
|
+
|
|
29
|
+
From the VerbNet site: "VerbNet (VN) (Kipper-Schuler 2006) is the largest
|
|
30
|
+
on-line verb lexicon currently available for English. It is a hierarchical
|
|
31
|
+
domain-independent, broad-coverage verb lexicon with mappings to other
|
|
32
|
+
lexical resources such as WordNet (Miller, 1990; Fellbaum, 1998), XTAG
|
|
33
|
+
(XTAG Research Group, 2001), and FrameNet (Baker et al., 1998)."
|
|
34
|
+
|
|
35
|
+
For details about VerbNet see:
|
|
36
|
+
https://verbs.colorado.edu/~mpalmer/projects/verbnet.html
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
# No unicode encoding param, since the data files are all XML.
|
|
40
|
+
def __init__(self, root, fileids, wrap_etree=False):
|
|
41
|
+
XMLCorpusReader.__init__(self, root, fileids, wrap_etree)
|
|
42
|
+
|
|
43
|
+
self._lemma_to_class = defaultdict(list)
|
|
44
|
+
"""A dictionary mapping from verb lemma strings to lists of
|
|
45
|
+
VerbNet class identifiers."""
|
|
46
|
+
|
|
47
|
+
self._wordnet_to_class = defaultdict(list)
|
|
48
|
+
"""A dictionary mapping from wordnet identifier strings to
|
|
49
|
+
lists of VerbNet class identifiers."""
|
|
50
|
+
|
|
51
|
+
self._class_to_fileid = {}
|
|
52
|
+
"""A dictionary mapping from class identifiers to
|
|
53
|
+
corresponding file identifiers. The keys of this dictionary
|
|
54
|
+
provide a complete list of all classes and subclasses."""
|
|
55
|
+
|
|
56
|
+
self._shortid_to_longid = {}
|
|
57
|
+
|
|
58
|
+
# Initialize the dictionaries. Use the quick (regexp-based)
|
|
59
|
+
# method instead of the slow (xml-based) method, because it
|
|
60
|
+
# runs 2-30 times faster.
|
|
61
|
+
self._quick_index()
|
|
62
|
+
|
|
63
|
+
_LONGID_RE = re.compile(r'([^\-\.]*)-([\d+.\-]+)$')
|
|
64
|
+
"""Regular expression that matches (and decomposes) longids"""
|
|
65
|
+
|
|
66
|
+
_SHORTID_RE = re.compile(r'[\d+.\-]+$')
|
|
67
|
+
"""Regular expression that matches shortids"""
|
|
68
|
+
|
|
69
|
+
_INDEX_RE = re.compile(r'<MEMBER name="\??([^"]+)" wn="([^"]*)"[^>]+>|'
|
|
70
|
+
r'<VNSUBCLASS ID="([^"]+)"/?>')
|
|
71
|
+
"""Regular expression used by ``_index()`` to quickly scan the corpus
|
|
72
|
+
for basic information."""
|
|
73
|
+
|
|
74
|
+
def lemmas(self, vnclass=None):
|
|
75
|
+
"""
|
|
76
|
+
Return a list of all verb lemmas that appear in any class, or
|
|
77
|
+
in the ``classid`` if specified.
|
|
78
|
+
"""
|
|
79
|
+
if vnclass is None:
|
|
80
|
+
return sorted(self._lemma_to_class.keys())
|
|
81
|
+
else:
|
|
82
|
+
# [xx] should this include subclass members?
|
|
83
|
+
if isinstance(vnclass, string_types):
|
|
84
|
+
vnclass = self.vnclass(vnclass)
|
|
85
|
+
return [member.get('name') for member in
|
|
86
|
+
vnclass.findall('MEMBERS/MEMBER')]
|
|
87
|
+
|
|
88
|
+
def wordnetids(self, vnclass=None):
|
|
89
|
+
"""
|
|
90
|
+
Return a list of all wordnet identifiers that appear in any
|
|
91
|
+
class, or in ``classid`` if specified.
|
|
92
|
+
"""
|
|
93
|
+
if vnclass is None:
|
|
94
|
+
return sorted(self._wordnet_to_class.keys())
|
|
95
|
+
else:
|
|
96
|
+
# [xx] should this include subclass members?
|
|
97
|
+
if isinstance(vnclass, string_types):
|
|
98
|
+
vnclass = self.vnclass(vnclass)
|
|
99
|
+
return sum([member.get('wn', '').split() for member in
|
|
100
|
+
vnclass.findall('MEMBERS/MEMBER')], [])
|
|
101
|
+
|
|
102
|
+
def classids(self, lemma=None, wordnetid=None, fileid=None, classid=None):
|
|
103
|
+
"""
|
|
104
|
+
Return a list of the VerbNet class identifiers. If a file
|
|
105
|
+
identifier is specified, then return only the VerbNet class
|
|
106
|
+
identifiers for classes (and subclasses) defined by that file.
|
|
107
|
+
If a lemma is specified, then return only VerbNet class
|
|
108
|
+
identifiers for classes that contain that lemma as a member.
|
|
109
|
+
If a wordnetid is specified, then return only identifiers for
|
|
110
|
+
classes that contain that wordnetid as a member. If a classid
|
|
111
|
+
is specified, then return only identifiers for subclasses of
|
|
112
|
+
the specified VerbNet class.
|
|
113
|
+
If nothing is specified, return all classids within VerbNet
|
|
114
|
+
"""
|
|
115
|
+
if fileid is not None:
|
|
116
|
+
return [c for (c, f) in self._class_to_fileid.items()
|
|
117
|
+
if f == fileid]
|
|
118
|
+
elif lemma is not None:
|
|
119
|
+
return self._lemma_to_class[lemma]
|
|
120
|
+
elif wordnetid is not None:
|
|
121
|
+
return self._wordnet_to_class[wordnetid]
|
|
122
|
+
elif classid is not None:
|
|
123
|
+
xmltree = self.vnclass(classid)
|
|
124
|
+
return [subclass.get('ID') for subclass in
|
|
125
|
+
xmltree.findall('SUBCLASSES/VNSUBCLASS')]
|
|
126
|
+
else:
|
|
127
|
+
return sorted(self._class_to_fileid.keys())
|
|
128
|
+
|
|
129
|
+
def vnclass(self, fileid_or_classid):
|
|
130
|
+
"""Returns VerbNet class ElementTree
|
|
131
|
+
|
|
132
|
+
Return an ElementTree containing the xml for the specified
|
|
133
|
+
VerbNet class.
|
|
134
|
+
|
|
135
|
+
:param fileid_or_classid: An identifier specifying which class
|
|
136
|
+
should be returned. Can be a file identifier (such as
|
|
137
|
+
``'put-9.1.xml'``), or a VerbNet class identifier (such as
|
|
138
|
+
``'put-9.1'``) or a short VerbNet class identifier (such as
|
|
139
|
+
``'9.1'``).
|
|
140
|
+
"""
|
|
141
|
+
# File identifier: just return the xml.
|
|
142
|
+
if fileid_or_classid in self._fileids:
|
|
143
|
+
return self.xml(fileid_or_classid)
|
|
144
|
+
|
|
145
|
+
# Class identifier: get the xml, and find the right elt.
|
|
146
|
+
classid = self.longid(fileid_or_classid)
|
|
147
|
+
if classid in self._class_to_fileid:
|
|
148
|
+
fileid = self._class_to_fileid[self.longid(classid)]
|
|
149
|
+
tree = self.xml(fileid)
|
|
150
|
+
if classid == tree.get('ID'):
|
|
151
|
+
return tree
|
|
152
|
+
else:
|
|
153
|
+
for subclass in tree.findall('.//VNSUBCLASS'):
|
|
154
|
+
if classid == subclass.get('ID'):
|
|
155
|
+
return subclass
|
|
156
|
+
else:
|
|
157
|
+
assert False # we saw it during _index()!
|
|
158
|
+
|
|
159
|
+
else:
|
|
160
|
+
raise ValueError('Unknown identifier {}'.format(fileid_or_classid))
|
|
161
|
+
|
|
162
|
+
def fileids(self, vnclass_ids=None):
|
|
163
|
+
"""
|
|
164
|
+
Return a list of fileids that make up this corpus. If
|
|
165
|
+
``vnclass_ids`` is specified, then return the fileids that make
|
|
166
|
+
up the specified VerbNet class(es).
|
|
167
|
+
"""
|
|
168
|
+
if vnclass_ids is None:
|
|
169
|
+
return self._fileids
|
|
170
|
+
elif isinstance(vnclass_ids, string_types):
|
|
171
|
+
return [self._class_to_fileid[self.longid(vnclass_ids)]]
|
|
172
|
+
else:
|
|
173
|
+
return [self._class_to_fileid[self.longid(vnclass_id)]
|
|
174
|
+
for vnclass_id in vnclass_ids]
|
|
175
|
+
|
|
176
|
+
def frames(self, vnclass):
|
|
177
|
+
"""Given a VerbNet class, this method returns VerbNet frames
|
|
178
|
+
|
|
179
|
+
The members returned are:
|
|
180
|
+
1) Example
|
|
181
|
+
2) Description
|
|
182
|
+
3) Syntax
|
|
183
|
+
4) Semantics
|
|
184
|
+
|
|
185
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
186
|
+
containing the xml contents of a VerbNet class.
|
|
187
|
+
:return: frames - a list of frame dictionaries
|
|
188
|
+
"""
|
|
189
|
+
if isinstance(vnclass, string_types):
|
|
190
|
+
vnclass = self.vnclass(vnclass)
|
|
191
|
+
frames = []
|
|
192
|
+
vnframes = vnclass.findall('FRAMES/FRAME')
|
|
193
|
+
for vnframe in vnframes:
|
|
194
|
+
frames.append({
|
|
195
|
+
'example': self._get_example_within_frame(vnframe),
|
|
196
|
+
'description': self._get_description_within_frame(vnframe),
|
|
197
|
+
'syntax': self._get_syntactic_list_within_frame(vnframe),
|
|
198
|
+
'semantics': self._get_semantics_within_frame(vnframe)
|
|
199
|
+
})
|
|
200
|
+
return frames
|
|
201
|
+
|
|
202
|
+
def subclasses(self, vnclass):
|
|
203
|
+
"""Returns subclass ids, if any exist
|
|
204
|
+
|
|
205
|
+
Given a VerbNet class, this method returns subclass ids (if they exist)
|
|
206
|
+
in a list of strings.
|
|
207
|
+
|
|
208
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
209
|
+
containing the xml contents of a VerbNet class.
|
|
210
|
+
:return: list of subclasses
|
|
211
|
+
"""
|
|
212
|
+
if isinstance(vnclass, string_types):
|
|
213
|
+
vnclass = self.vnclass(vnclass)
|
|
214
|
+
|
|
215
|
+
subclasses = [subclass.get('ID') for subclass in
|
|
216
|
+
vnclass.findall('SUBCLASSES/VNSUBCLASS')]
|
|
217
|
+
return subclasses
|
|
218
|
+
|
|
219
|
+
def themroles(self, vnclass):
|
|
220
|
+
"""Returns thematic roles participating in a VerbNet class
|
|
221
|
+
|
|
222
|
+
Members returned as part of roles are-
|
|
223
|
+
1) Type
|
|
224
|
+
2) Modifiers
|
|
225
|
+
|
|
226
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
227
|
+
containing the xml contents of a VerbNet class.
|
|
228
|
+
:return: themroles: A list of thematic roles in the VerbNet class
|
|
229
|
+
"""
|
|
230
|
+
if isinstance(vnclass, string_types):
|
|
231
|
+
vnclass = self.vnclass(vnclass)
|
|
232
|
+
|
|
233
|
+
themroles = []
|
|
234
|
+
for trole in vnclass.findall('THEMROLES/THEMROLE'):
|
|
235
|
+
themroles.append({
|
|
236
|
+
'type': trole.get('type'),
|
|
237
|
+
'modifiers': [{'value': restr.get('Value'), 'type': restr.get('type')}
|
|
238
|
+
for restr in trole.findall('SELRESTRS/SELRESTR')]
|
|
239
|
+
})
|
|
240
|
+
return themroles
|
|
241
|
+
|
|
242
|
+
######################################################################
|
|
243
|
+
# { Index Initialization
|
|
244
|
+
######################################################################
|
|
245
|
+
|
|
246
|
+
def _index(self):
|
|
247
|
+
"""
|
|
248
|
+
Initialize the indexes ``_lemma_to_class``,
|
|
249
|
+
``_wordnet_to_class``, and ``_class_to_fileid`` by scanning
|
|
250
|
+
through the corpus fileids. This is fast with cElementTree
|
|
251
|
+
(<0.1 secs), but quite slow (>10 secs) with the python
|
|
252
|
+
implementation of ElementTree.
|
|
253
|
+
"""
|
|
254
|
+
for fileid in self._fileids:
|
|
255
|
+
self._index_helper(self.xml(fileid), fileid)
|
|
256
|
+
|
|
257
|
+
def _index_helper(self, xmltree, fileid):
|
|
258
|
+
"""Helper for ``_index()``"""
|
|
259
|
+
vnclass = xmltree.get('ID')
|
|
260
|
+
self._class_to_fileid[vnclass] = fileid
|
|
261
|
+
self._shortid_to_longid[self.shortid(vnclass)] = vnclass
|
|
262
|
+
for member in xmltree.findall('MEMBERS/MEMBER'):
|
|
263
|
+
self._lemma_to_class[member.get('name')].append(vnclass)
|
|
264
|
+
for wn in member.get('wn', '').split():
|
|
265
|
+
self._wordnet_to_class[wn].append(vnclass)
|
|
266
|
+
for subclass in xmltree.findall('SUBCLASSES/VNSUBCLASS'):
|
|
267
|
+
self._index_helper(subclass, fileid)
|
|
268
|
+
|
|
269
|
+
def _quick_index(self):
|
|
270
|
+
"""
|
|
271
|
+
Initialize the indexes ``_lemma_to_class``,
|
|
272
|
+
``_wordnet_to_class``, and ``_class_to_fileid`` by scanning
|
|
273
|
+
through the corpus fileids. This doesn't do proper xml parsing,
|
|
274
|
+
but is good enough to find everything in the standard VerbNet
|
|
275
|
+
corpus -- and it runs about 30 times faster than xml parsing
|
|
276
|
+
(with the python ElementTree; only 2-3 times faster with
|
|
277
|
+
cElementTree).
|
|
278
|
+
"""
|
|
279
|
+
# nb: if we got rid of wordnet_to_class, this would run 2-3
|
|
280
|
+
# times faster.
|
|
281
|
+
for fileid in self._fileids:
|
|
282
|
+
vnclass = fileid[:-4] # strip the '.xml'
|
|
283
|
+
self._class_to_fileid[vnclass] = fileid
|
|
284
|
+
self._shortid_to_longid[self.shortid(vnclass)] = vnclass
|
|
285
|
+
for m in self._INDEX_RE.finditer(self.open(fileid).read()):
|
|
286
|
+
groups = m.groups()
|
|
287
|
+
if groups[0] is not None:
|
|
288
|
+
self._lemma_to_class[groups[0]].append(vnclass)
|
|
289
|
+
for wn in groups[1].split():
|
|
290
|
+
self._wordnet_to_class[wn].append(vnclass)
|
|
291
|
+
elif groups[2] is not None:
|
|
292
|
+
self._class_to_fileid[groups[2]] = fileid
|
|
293
|
+
vnclass = groups[2] # for <MEMBER> elts.
|
|
294
|
+
self._shortid_to_longid[self.shortid(vnclass)] = vnclass
|
|
295
|
+
else:
|
|
296
|
+
assert False, 'unexpected match condition'
|
|
297
|
+
|
|
298
|
+
######################################################################
|
|
299
|
+
# { Identifier conversion
|
|
300
|
+
######################################################################
|
|
301
|
+
|
|
302
|
+
def longid(self, shortid):
|
|
303
|
+
"""Returns longid of a VerbNet class
|
|
304
|
+
|
|
305
|
+
Given a short VerbNet class identifier (eg '37.10'), map it
|
|
306
|
+
to a long id (eg 'confess-37.10'). If ``shortid`` is already a
|
|
307
|
+
long id, then return it as-is"""
|
|
308
|
+
if self._LONGID_RE.match(shortid):
|
|
309
|
+
return shortid # it's already a longid.
|
|
310
|
+
elif not self._SHORTID_RE.match(shortid):
|
|
311
|
+
raise ValueError('vnclass identifier %r not found' % shortid)
|
|
312
|
+
try:
|
|
313
|
+
return self._shortid_to_longid[shortid]
|
|
314
|
+
except KeyError:
|
|
315
|
+
raise ValueError('vnclass identifier %r not found' % shortid)
|
|
316
|
+
|
|
317
|
+
def shortid(self, longid):
|
|
318
|
+
"""Returns shortid of a VerbNet class
|
|
319
|
+
|
|
320
|
+
Given a long VerbNet class identifier (eg 'confess-37.10'),
|
|
321
|
+
map it to a short id (eg '37.10'). If ``longid`` is already a
|
|
322
|
+
short id, then return it as-is."""
|
|
323
|
+
if self._SHORTID_RE.match(longid):
|
|
324
|
+
return longid # it's already a shortid.
|
|
325
|
+
m = self._LONGID_RE.match(longid)
|
|
326
|
+
if m:
|
|
327
|
+
return m.group(2)
|
|
328
|
+
else:
|
|
329
|
+
raise ValueError('vnclass identifier %r not found' % longid)
|
|
330
|
+
|
|
331
|
+
######################################################################
|
|
332
|
+
# { Frame access utility functions
|
|
333
|
+
######################################################################
|
|
334
|
+
|
|
335
|
+
def _get_semantics_within_frame(self, vnframe):
|
|
336
|
+
"""Returns semantics within a single frame
|
|
337
|
+
|
|
338
|
+
A utility function to retrieve semantics within a frame in VerbNet
|
|
339
|
+
Members of the semantics dictionary:
|
|
340
|
+
1) Predicate value
|
|
341
|
+
2) Arguments
|
|
342
|
+
|
|
343
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
344
|
+
a VerbNet frame.
|
|
345
|
+
:return: semantics: semantics dictionary
|
|
346
|
+
"""
|
|
347
|
+
semantics_within_single_frame = []
|
|
348
|
+
for pred in vnframe.findall('SEMANTICS/PRED'):
|
|
349
|
+
arguments = [{'type': arg.get('type'), 'value': arg.get('value')}
|
|
350
|
+
for arg in pred.findall('ARGS/ARG')]
|
|
351
|
+
semantics_within_single_frame.append({
|
|
352
|
+
'predicate_value': pred.get('value'),
|
|
353
|
+
'arguments': arguments
|
|
354
|
+
})
|
|
355
|
+
return semantics_within_single_frame
|
|
356
|
+
|
|
357
|
+
def _get_example_within_frame(self, vnframe):
|
|
358
|
+
"""Returns example within a frame
|
|
359
|
+
|
|
360
|
+
A utility function to retrieve an example within a frame in VerbNet.
|
|
361
|
+
|
|
362
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
363
|
+
a VerbNet frame.
|
|
364
|
+
:return: example_text: The example sentence for this particular frame
|
|
365
|
+
"""
|
|
366
|
+
example_element = vnframe.find('EXAMPLES/EXAMPLE')
|
|
367
|
+
if example_element is not None:
|
|
368
|
+
example_text = example_element.text
|
|
369
|
+
else:
|
|
370
|
+
example_text = ""
|
|
371
|
+
return example_text
|
|
372
|
+
|
|
373
|
+
def _get_description_within_frame(self, vnframe):
|
|
374
|
+
"""Returns member description within frame
|
|
375
|
+
|
|
376
|
+
A utility function to retrieve a description of participating members
|
|
377
|
+
within a frame in VerbNet.
|
|
378
|
+
|
|
379
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
380
|
+
a VerbNet frame.
|
|
381
|
+
:return: description: a description dictionary with members - primary and secondary
|
|
382
|
+
"""
|
|
383
|
+
description_element = vnframe.find('DESCRIPTION')
|
|
384
|
+
return {
|
|
385
|
+
'primary': description_element.attrib['primary'],
|
|
386
|
+
'secondary': description_element.get('secondary', '')
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
def _get_syntactic_list_within_frame(self, vnframe):
|
|
390
|
+
"""Returns semantics within a frame
|
|
391
|
+
|
|
392
|
+
A utility function to retrieve semantics within a frame in VerbNet.
|
|
393
|
+
Members of the syntactic dictionary:
|
|
394
|
+
1) POS Tag
|
|
395
|
+
2) Modifiers
|
|
396
|
+
|
|
397
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
398
|
+
a VerbNet frame.
|
|
399
|
+
:return: syntax_within_single_frame
|
|
400
|
+
"""
|
|
401
|
+
syntax_within_single_frame = []
|
|
402
|
+
for elt in vnframe.find('SYNTAX'):
|
|
403
|
+
pos_tag = elt.tag
|
|
404
|
+
modifiers = dict()
|
|
405
|
+
modifiers['value'] = elt.get('value') if 'value' in elt.attrib else ""
|
|
406
|
+
modifiers['selrestrs'] = [{'value': restr.get('Value'), 'type': restr.get('type')}
|
|
407
|
+
for restr in elt.findall('SELRESTRS/SELRESTR')]
|
|
408
|
+
modifiers['synrestrs'] = [{'value': restr.get('Value'), 'type': restr.get('type')}
|
|
409
|
+
for restr in elt.findall('SYNRESTRS/SYNRESTR')]
|
|
410
|
+
syntax_within_single_frame.append({
|
|
411
|
+
'pos_tag': pos_tag,
|
|
412
|
+
'modifiers': modifiers
|
|
413
|
+
})
|
|
414
|
+
return syntax_within_single_frame
|
|
415
|
+
|
|
416
|
+
######################################################################
|
|
417
|
+
# { Pretty Printing
|
|
418
|
+
######################################################################
|
|
419
|
+
|
|
420
|
+
def pprint(self, vnclass):
|
|
421
|
+
"""Returns pretty printed version of a VerbNet class
|
|
422
|
+
|
|
423
|
+
Return a string containing a pretty-printed representation of
|
|
424
|
+
the given VerbNet class.
|
|
425
|
+
|
|
426
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
427
|
+
containing the xml contents of a VerbNet class.
|
|
428
|
+
"""
|
|
429
|
+
if isinstance(vnclass, string_types):
|
|
430
|
+
vnclass = self.vnclass(vnclass)
|
|
431
|
+
|
|
432
|
+
s = vnclass.get('ID') + '\n'
|
|
433
|
+
s += self.pprint_subclasses(vnclass, indent=' ') + '\n'
|
|
434
|
+
s += self.pprint_members(vnclass, indent=' ') + '\n'
|
|
435
|
+
s += ' Thematic roles:\n'
|
|
436
|
+
s += self.pprint_themroles(vnclass, indent=' ') + '\n'
|
|
437
|
+
s += ' Frames:\n'
|
|
438
|
+
s += self.pprint_frames(vnclass, indent=' ')
|
|
439
|
+
return s
|
|
440
|
+
|
|
441
|
+
def pprint_subclasses(self, vnclass, indent=''):
|
|
442
|
+
"""Returns pretty printed version of subclasses of VerbNet class
|
|
443
|
+
|
|
444
|
+
Return a string containing a pretty-printed representation of
|
|
445
|
+
the given VerbNet class's subclasses.
|
|
446
|
+
|
|
447
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
448
|
+
containing the xml contents of a VerbNet class.
|
|
449
|
+
"""
|
|
450
|
+
if isinstance(vnclass, string_types):
|
|
451
|
+
vnclass = self.vnclass(vnclass)
|
|
452
|
+
|
|
453
|
+
subclasses = self.subclasses(vnclass)
|
|
454
|
+
if not subclasses: subclasses = ['(none)']
|
|
455
|
+
s = 'Subclasses: ' + ' '.join(subclasses)
|
|
456
|
+
return textwrap.fill(s, 70, initial_indent=indent,
|
|
457
|
+
subsequent_indent=indent + ' ')
|
|
458
|
+
|
|
459
|
+
def pprint_members(self, vnclass, indent=''):
|
|
460
|
+
"""Returns pretty printed version of members in a VerbNet class
|
|
461
|
+
|
|
462
|
+
Return a string containing a pretty-printed representation of
|
|
463
|
+
the given VerbNet class's member verbs.
|
|
464
|
+
|
|
465
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
466
|
+
containing the xml contents of a VerbNet class.
|
|
467
|
+
"""
|
|
468
|
+
if isinstance(vnclass, string_types):
|
|
469
|
+
vnclass = self.vnclass(vnclass)
|
|
470
|
+
|
|
471
|
+
members = self.lemmas(vnclass)
|
|
472
|
+
if not members:
|
|
473
|
+
members = ['(none)']
|
|
474
|
+
s = 'Members: ' + ' '.join(members)
|
|
475
|
+
return textwrap.fill(s, 70, initial_indent=indent,
|
|
476
|
+
subsequent_indent=indent + ' ')
|
|
477
|
+
|
|
478
|
+
def pprint_themroles(self, vnclass, indent=''):
|
|
479
|
+
"""Returns pretty printed version of thematic roles in a VerbNet class
|
|
480
|
+
|
|
481
|
+
Return a string containing a pretty-printed representation of
|
|
482
|
+
the given VerbNet class's thematic roles.
|
|
483
|
+
|
|
484
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
485
|
+
containing the xml contents of a VerbNet class.
|
|
486
|
+
"""
|
|
487
|
+
if isinstance(vnclass, string_types):
|
|
488
|
+
vnclass = self.vnclass(vnclass)
|
|
489
|
+
|
|
490
|
+
pieces = []
|
|
491
|
+
for themrole in self.themroles(vnclass):
|
|
492
|
+
piece = indent + '* ' + themrole.get('type')
|
|
493
|
+
modifiers = [modifier['value'] + modifier['type']
|
|
494
|
+
for modifier in themrole['modifiers']]
|
|
495
|
+
if modifiers:
|
|
496
|
+
piece += '[{}]'.format(' '.join(modifiers))
|
|
497
|
+
pieces.append(piece)
|
|
498
|
+
return '\n'.join(pieces)
|
|
499
|
+
|
|
500
|
+
def pprint_frames(self, vnclass, indent=''):
|
|
501
|
+
"""Returns pretty version of all frames in a VerbNet class
|
|
502
|
+
|
|
503
|
+
Return a string containing a pretty-printed representation of
|
|
504
|
+
the list of frames within the VerbNet class.
|
|
505
|
+
|
|
506
|
+
:param vnclass: A VerbNet class identifier; or an ElementTree
|
|
507
|
+
containing the xml contents of a VerbNet class.
|
|
508
|
+
"""
|
|
509
|
+
if isinstance(vnclass, string_types):
|
|
510
|
+
vnclass = self.vnclass(vnclass)
|
|
511
|
+
pieces = []
|
|
512
|
+
for vnframe in self.frames(vnclass):
|
|
513
|
+
pieces.append(self._pprint_single_frame(vnframe, indent))
|
|
514
|
+
return '\n'.join(pieces)
|
|
515
|
+
|
|
516
|
+
def _pprint_single_frame(self, vnframe, indent=''):
|
|
517
|
+
"""Returns pretty printed version of a single frame in a VerbNet class
|
|
518
|
+
|
|
519
|
+
Returns a string containing a pretty-printed representation of
|
|
520
|
+
the given frame.
|
|
521
|
+
|
|
522
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
523
|
+
a VerbNet frame.
|
|
524
|
+
"""
|
|
525
|
+
frame_string = self._pprint_description_within_frame(vnframe, indent) + '\n'
|
|
526
|
+
frame_string += self._pprint_example_within_frame(vnframe, indent + ' ') + '\n'
|
|
527
|
+
frame_string += self._pprint_syntax_within_frame(vnframe, indent + ' Syntax: ') + '\n'
|
|
528
|
+
frame_string += indent + ' Semantics:\n'
|
|
529
|
+
frame_string += self._pprint_semantics_within_frame(vnframe, indent + ' ')
|
|
530
|
+
return frame_string
|
|
531
|
+
|
|
532
|
+
def _pprint_example_within_frame(self, vnframe, indent=''):
|
|
533
|
+
"""Returns pretty printed version of example within frame in a VerbNet class
|
|
534
|
+
|
|
535
|
+
Return a string containing a pretty-printed representation of
|
|
536
|
+
the given VerbNet frame example.
|
|
537
|
+
|
|
538
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
539
|
+
a Verbnet frame.
|
|
540
|
+
"""
|
|
541
|
+
if vnframe['example']:
|
|
542
|
+
return indent + ' Example: ' + vnframe['example']
|
|
543
|
+
|
|
544
|
+
def _pprint_description_within_frame(self, vnframe, indent=''):
|
|
545
|
+
"""Returns pretty printed version of a VerbNet frame description
|
|
546
|
+
|
|
547
|
+
Return a string containing a pretty-printed representation of
|
|
548
|
+
the given VerbNet frame description.
|
|
549
|
+
|
|
550
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
551
|
+
a VerbNet frame.
|
|
552
|
+
"""
|
|
553
|
+
description = indent + vnframe['description']['primary']
|
|
554
|
+
if vnframe['description']['secondary']:
|
|
555
|
+
description += ' ({})'.format(vnframe['description']['secondary'])
|
|
556
|
+
return description
|
|
557
|
+
|
|
558
|
+
def _pprint_syntax_within_frame(self, vnframe, indent=''):
|
|
559
|
+
"""Returns pretty printed version of syntax within a frame in a VerbNet class
|
|
560
|
+
|
|
561
|
+
Return a string containing a pretty-printed representation of
|
|
562
|
+
the given VerbNet frame syntax.
|
|
563
|
+
|
|
564
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
565
|
+
a VerbNet frame.
|
|
566
|
+
"""
|
|
567
|
+
pieces = []
|
|
568
|
+
for element in vnframe['syntax']:
|
|
569
|
+
piece = element['pos_tag']
|
|
570
|
+
modifier_list = []
|
|
571
|
+
if 'value' in element['modifiers'] and element['modifiers']['value']:
|
|
572
|
+
modifier_list.append(element['modifiers']['value'])
|
|
573
|
+
modifier_list += ['{}{}'.format(restr['value'], restr['type'])
|
|
574
|
+
for restr in (element['modifiers']['selrestrs'] +
|
|
575
|
+
element['modifiers']['synrestrs'])]
|
|
576
|
+
if modifier_list:
|
|
577
|
+
piece += '[{}]'.format(' '.join(modifier_list))
|
|
578
|
+
pieces.append(piece)
|
|
579
|
+
|
|
580
|
+
return indent + ' '.join(pieces)
|
|
581
|
+
|
|
582
|
+
def _pprint_semantics_within_frame(self, vnframe, indent=''):
|
|
583
|
+
"""Returns a pretty printed version of semantics within frame in a VerbNet class
|
|
584
|
+
|
|
585
|
+
Return a string containing a pretty-printed representation of
|
|
586
|
+
the given VerbNet frame semantics.
|
|
587
|
+
|
|
588
|
+
:param vnframe: An ElementTree containing the xml contents of
|
|
589
|
+
a VerbNet frame.
|
|
590
|
+
"""
|
|
591
|
+
pieces = []
|
|
592
|
+
for predicate in vnframe['semantics']:
|
|
593
|
+
arguments = [argument['value'] for argument in predicate['arguments']]
|
|
594
|
+
pieces.append('{}({})'.format(predicate['predicate_value'], ', '.join(arguments)))
|
|
595
|
+
return '\n'.join('{}* {}'.format(indent, piece) for piece in pieces)
|