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,449 +1,451 @@
|
|
|
1
|
-
# Natural Language Toolkit: Linear Logic
|
|
2
|
-
#
|
|
3
|
-
# Author: Dan Garrette <dhgarrette@gmail.com>
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2001-
|
|
6
|
-
# URL: <http://nltk.org/>
|
|
7
|
-
# For license information, see LICENSE.TXT
|
|
8
|
-
from __future__ import print_function, unicode_literals
|
|
9
|
-
|
|
10
|
-
from
|
|
11
|
-
|
|
12
|
-
from nltk.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
self
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return self.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
argument expression
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
self.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return self
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
:
|
|
168
|
-
:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
:
|
|
188
|
-
:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return bindings
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
:
|
|
221
|
-
:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
:
|
|
236
|
-
|
|
237
|
-
(
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
:
|
|
248
|
-
|
|
249
|
-
(
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
c.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
:param
|
|
281
|
-
:
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
if isinstance(
|
|
295
|
-
bindings +=
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
if set(function_simp.antecedent.dependencies)
|
|
306
|
-
raise LinearLogicApplicationException('Dependencies
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
self.
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
:
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
assert
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
"""
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
for v in
|
|
404
|
-
combined[v] =
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
print(lexpr(r'
|
|
441
|
-
print(lexpr(r'g -o
|
|
442
|
-
print(lexpr(r'(g -o
|
|
443
|
-
print(lexpr(r'
|
|
444
|
-
print(lexpr(r'(
|
|
445
|
-
print(lexpr(r'(H -o
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
1
|
+
# Natural Language Toolkit: Linear Logic
|
|
2
|
+
#
|
|
3
|
+
# Author: Dan Garrette <dhgarrette@gmail.com>
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
6
|
+
# URL: <http://nltk.org/>
|
|
7
|
+
# For license information, see LICENSE.TXT
|
|
8
|
+
from __future__ import print_function, unicode_literals
|
|
9
|
+
|
|
10
|
+
from six import string_types
|
|
11
|
+
|
|
12
|
+
from nltk.internals import Counter
|
|
13
|
+
from nltk.compat import python_2_unicode_compatible
|
|
14
|
+
from nltk.sem.logic import LogicParser, APP
|
|
15
|
+
|
|
16
|
+
_counter = Counter()
|
|
17
|
+
|
|
18
|
+
class Tokens(object):
|
|
19
|
+
#Punctuation
|
|
20
|
+
OPEN = '('
|
|
21
|
+
CLOSE = ')'
|
|
22
|
+
|
|
23
|
+
#Operations
|
|
24
|
+
IMP = '-o'
|
|
25
|
+
|
|
26
|
+
PUNCT = [OPEN, CLOSE]
|
|
27
|
+
TOKENS = PUNCT + [IMP]
|
|
28
|
+
|
|
29
|
+
class LinearLogicParser(LogicParser):
|
|
30
|
+
"""A linear logic expression parser."""
|
|
31
|
+
def __init__(self):
|
|
32
|
+
LogicParser.__init__(self)
|
|
33
|
+
|
|
34
|
+
self.operator_precedence = {APP: 1, Tokens.IMP: 2, None: 3}
|
|
35
|
+
self.right_associated_operations += [Tokens.IMP]
|
|
36
|
+
|
|
37
|
+
def get_all_symbols(self):
|
|
38
|
+
return Tokens.TOKENS
|
|
39
|
+
|
|
40
|
+
def handle(self, tok, context):
|
|
41
|
+
if tok not in Tokens.TOKENS:
|
|
42
|
+
return self.handle_variable(tok, context)
|
|
43
|
+
elif tok == Tokens.OPEN:
|
|
44
|
+
return self.handle_open(tok, context)
|
|
45
|
+
|
|
46
|
+
def get_BooleanExpression_factory(self, tok):
|
|
47
|
+
if tok == Tokens.IMP:
|
|
48
|
+
return ImpExpression
|
|
49
|
+
else:
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
def make_BooleanExpression(self, factory, first, second):
|
|
53
|
+
return factory(first, second)
|
|
54
|
+
|
|
55
|
+
def attempt_ApplicationExpression(self, expression, context):
|
|
56
|
+
"""Attempt to make an application expression. If the next tokens
|
|
57
|
+
are an argument in parens, then the argument expression is a
|
|
58
|
+
function being applied to the arguments. Otherwise, return the
|
|
59
|
+
argument expression."""
|
|
60
|
+
if self.has_priority(APP, context):
|
|
61
|
+
if self.inRange(0) and self.token(0) == Tokens.OPEN:
|
|
62
|
+
self.token() #swallow then open paren
|
|
63
|
+
argument = self.process_next_expression(APP)
|
|
64
|
+
self.assertNextToken(Tokens.CLOSE)
|
|
65
|
+
expression = ApplicationExpression(expression, argument, None)
|
|
66
|
+
return expression
|
|
67
|
+
|
|
68
|
+
def make_VariableExpression(self, name):
|
|
69
|
+
if name[0].isupper():
|
|
70
|
+
return VariableExpression(name)
|
|
71
|
+
else:
|
|
72
|
+
return ConstantExpression(name)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@python_2_unicode_compatible
|
|
76
|
+
class Expression(object):
|
|
77
|
+
|
|
78
|
+
_linear_logic_parser = LinearLogicParser()
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def fromstring(cls, s):
|
|
82
|
+
return cls._linear_logic_parser.parse(s)
|
|
83
|
+
|
|
84
|
+
def applyto(self, other, other_indices=None):
|
|
85
|
+
return ApplicationExpression(self, other, other_indices)
|
|
86
|
+
|
|
87
|
+
def __call__(self, other):
|
|
88
|
+
return self.applyto(other)
|
|
89
|
+
|
|
90
|
+
def __repr__(self):
|
|
91
|
+
return '<%s %s>' % (self.__class__.__name__, self)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@python_2_unicode_compatible
|
|
95
|
+
class AtomicExpression(Expression):
|
|
96
|
+
def __init__(self, name, dependencies=None):
|
|
97
|
+
"""
|
|
98
|
+
:param name: str for the constant name
|
|
99
|
+
:param dependencies: list of int for the indices on which this atom is dependent
|
|
100
|
+
"""
|
|
101
|
+
assert isinstance(name, string_types)
|
|
102
|
+
self.name = name
|
|
103
|
+
|
|
104
|
+
if not dependencies:
|
|
105
|
+
dependencies = []
|
|
106
|
+
self.dependencies = dependencies
|
|
107
|
+
|
|
108
|
+
def simplify(self, bindings=None):
|
|
109
|
+
"""
|
|
110
|
+
If 'self' is bound by 'bindings', return the atomic to which it is bound.
|
|
111
|
+
Otherwise, return self.
|
|
112
|
+
|
|
113
|
+
:param bindings: ``BindingDict`` A dictionary of bindings used to simplify
|
|
114
|
+
:return: ``AtomicExpression``
|
|
115
|
+
"""
|
|
116
|
+
if bindings and self in bindings:
|
|
117
|
+
return bindings[self]
|
|
118
|
+
else:
|
|
119
|
+
return self
|
|
120
|
+
|
|
121
|
+
def compile_pos(self, index_counter, glueFormulaFactory):
|
|
122
|
+
"""
|
|
123
|
+
From Iddo Lev's PhD Dissertation p108-109
|
|
124
|
+
|
|
125
|
+
:param index_counter: ``Counter`` for unique indices
|
|
126
|
+
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
|
|
127
|
+
:return: (``Expression``,set) for the compiled linear logic and any newly created glue formulas
|
|
128
|
+
"""
|
|
129
|
+
self.dependencies = []
|
|
130
|
+
return (self, [])
|
|
131
|
+
|
|
132
|
+
def compile_neg(self, index_counter, glueFormulaFactory):
|
|
133
|
+
"""
|
|
134
|
+
From Iddo Lev's PhD Dissertation p108-109
|
|
135
|
+
|
|
136
|
+
:param index_counter: ``Counter`` for unique indices
|
|
137
|
+
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
|
|
138
|
+
:return: (``Expression``,set) for the compiled linear logic and any newly created glue formulas
|
|
139
|
+
"""
|
|
140
|
+
self.dependencies = []
|
|
141
|
+
return (self, [])
|
|
142
|
+
|
|
143
|
+
def initialize_labels(self, fstruct):
|
|
144
|
+
self.name = fstruct.initialize_label(self.name.lower())
|
|
145
|
+
|
|
146
|
+
def __eq__(self, other):
|
|
147
|
+
return self.__class__ == other.__class__ and self.name == other.name
|
|
148
|
+
|
|
149
|
+
def __ne__(self, other):
|
|
150
|
+
return not self == other
|
|
151
|
+
|
|
152
|
+
def __str__(self):
|
|
153
|
+
accum = self.name
|
|
154
|
+
if self.dependencies:
|
|
155
|
+
accum += "%s" % self.dependencies
|
|
156
|
+
return accum
|
|
157
|
+
|
|
158
|
+
def __hash__(self):
|
|
159
|
+
return hash(self.name)
|
|
160
|
+
|
|
161
|
+
class ConstantExpression(AtomicExpression):
|
|
162
|
+
def unify(self, other, bindings):
|
|
163
|
+
"""
|
|
164
|
+
If 'other' is a constant, then it must be equal to 'self'. If 'other' is a variable,
|
|
165
|
+
then it must not be bound to anything other than 'self'.
|
|
166
|
+
|
|
167
|
+
:param other: ``Expression``
|
|
168
|
+
:param bindings: ``BindingDict`` A dictionary of all current bindings
|
|
169
|
+
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and any new binding
|
|
170
|
+
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
|
|
171
|
+
"""
|
|
172
|
+
assert isinstance(other, Expression)
|
|
173
|
+
if isinstance(other, VariableExpression):
|
|
174
|
+
try:
|
|
175
|
+
return bindings + BindingDict([(other, self)])
|
|
176
|
+
except VariableBindingException:
|
|
177
|
+
pass
|
|
178
|
+
elif self == other:
|
|
179
|
+
return bindings
|
|
180
|
+
raise UnificationException(self, other, bindings)
|
|
181
|
+
|
|
182
|
+
class VariableExpression(AtomicExpression):
|
|
183
|
+
def unify(self, other, bindings):
|
|
184
|
+
"""
|
|
185
|
+
'self' must not be bound to anything other than 'other'.
|
|
186
|
+
|
|
187
|
+
:param other: ``Expression``
|
|
188
|
+
:param bindings: ``BindingDict`` A dictionary of all current bindings
|
|
189
|
+
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and the new binding
|
|
190
|
+
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
|
|
191
|
+
"""
|
|
192
|
+
assert isinstance(other, Expression)
|
|
193
|
+
try:
|
|
194
|
+
if self == other:
|
|
195
|
+
return bindings
|
|
196
|
+
else:
|
|
197
|
+
return bindings + BindingDict([(self, other)])
|
|
198
|
+
except VariableBindingException:
|
|
199
|
+
raise UnificationException(self, other, bindings)
|
|
200
|
+
|
|
201
|
+
@python_2_unicode_compatible
|
|
202
|
+
class ImpExpression(Expression):
|
|
203
|
+
def __init__(self, antecedent, consequent):
|
|
204
|
+
"""
|
|
205
|
+
:param antecedent: ``Expression`` for the antecedent
|
|
206
|
+
:param consequent: ``Expression`` for the consequent
|
|
207
|
+
"""
|
|
208
|
+
assert isinstance(antecedent, Expression)
|
|
209
|
+
assert isinstance(consequent, Expression)
|
|
210
|
+
self.antecedent = antecedent
|
|
211
|
+
self.consequent = consequent
|
|
212
|
+
|
|
213
|
+
def simplify(self, bindings=None):
|
|
214
|
+
return self.__class__(self.antecedent.simplify(bindings), self.consequent.simplify(bindings))
|
|
215
|
+
|
|
216
|
+
def unify(self, other, bindings):
|
|
217
|
+
"""
|
|
218
|
+
Both the antecedent and consequent of 'self' and 'other' must unify.
|
|
219
|
+
|
|
220
|
+
:param other: ``ImpExpression``
|
|
221
|
+
:param bindings: ``BindingDict`` A dictionary of all current bindings
|
|
222
|
+
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and any new bindings
|
|
223
|
+
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
|
|
224
|
+
"""
|
|
225
|
+
assert isinstance(other, ImpExpression)
|
|
226
|
+
try:
|
|
227
|
+
return bindings + self.antecedent.unify(other.antecedent, bindings) + self.consequent.unify(other.consequent, bindings)
|
|
228
|
+
except VariableBindingException:
|
|
229
|
+
raise UnificationException(self, other, bindings)
|
|
230
|
+
|
|
231
|
+
def compile_pos(self, index_counter, glueFormulaFactory):
|
|
232
|
+
"""
|
|
233
|
+
From Iddo Lev's PhD Dissertation p108-109
|
|
234
|
+
|
|
235
|
+
:param index_counter: ``Counter`` for unique indices
|
|
236
|
+
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
|
|
237
|
+
:return: (``Expression``,set) for the compiled linear logic and any newly created glue formulas
|
|
238
|
+
"""
|
|
239
|
+
(a, a_new) = self.antecedent.compile_neg(index_counter, glueFormulaFactory)
|
|
240
|
+
(c, c_new) = self.consequent.compile_pos(index_counter, glueFormulaFactory)
|
|
241
|
+
return (ImpExpression(a,c), a_new + c_new)
|
|
242
|
+
|
|
243
|
+
def compile_neg(self, index_counter, glueFormulaFactory):
|
|
244
|
+
"""
|
|
245
|
+
From Iddo Lev's PhD Dissertation p108-109
|
|
246
|
+
|
|
247
|
+
:param index_counter: ``Counter`` for unique indices
|
|
248
|
+
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
|
|
249
|
+
:return: (``Expression``,list of ``GlueFormula``) for the compiled linear logic and any newly created glue formulas
|
|
250
|
+
"""
|
|
251
|
+
(a, a_new) = self.antecedent.compile_pos(index_counter, glueFormulaFactory)
|
|
252
|
+
(c, c_new) = self.consequent.compile_neg(index_counter, glueFormulaFactory)
|
|
253
|
+
fresh_index = index_counter.get()
|
|
254
|
+
c.dependencies.append(fresh_index)
|
|
255
|
+
new_v = glueFormulaFactory('v%s' % fresh_index, a, set([fresh_index]))
|
|
256
|
+
return (c, a_new + c_new + [new_v])
|
|
257
|
+
|
|
258
|
+
def initialize_labels(self, fstruct):
|
|
259
|
+
self.antecedent.initialize_labels(fstruct)
|
|
260
|
+
self.consequent.initialize_labels(fstruct)
|
|
261
|
+
|
|
262
|
+
def __eq__(self, other):
|
|
263
|
+
return self.__class__ == other.__class__ and \
|
|
264
|
+
self.antecedent == other.antecedent and self.consequent == other.consequent
|
|
265
|
+
|
|
266
|
+
def __ne__(self, other):
|
|
267
|
+
return not self == other
|
|
268
|
+
|
|
269
|
+
def __str__(self):
|
|
270
|
+
return "%s%s %s %s%s" % (
|
|
271
|
+
Tokens.OPEN, self.antecedent, Tokens.IMP, self.consequent, Tokens.CLOSE)
|
|
272
|
+
|
|
273
|
+
def __hash__(self):
|
|
274
|
+
return hash('%s%s%s' % (hash(self.antecedent), Tokens.IMP, hash(self.consequent)))
|
|
275
|
+
|
|
276
|
+
@python_2_unicode_compatible
|
|
277
|
+
class ApplicationExpression(Expression):
|
|
278
|
+
def __init__(self, function, argument, argument_indices=None):
|
|
279
|
+
"""
|
|
280
|
+
:param function: ``Expression`` for the function
|
|
281
|
+
:param argument: ``Expression`` for the argument
|
|
282
|
+
:param argument_indices: set for the indices of the glue formula from which the argument came
|
|
283
|
+
:raise LinearLogicApplicationException: If 'function' cannot be applied to 'argument' given 'argument_indices'.
|
|
284
|
+
"""
|
|
285
|
+
function_simp = function.simplify()
|
|
286
|
+
argument_simp = argument.simplify()
|
|
287
|
+
|
|
288
|
+
assert isinstance(function_simp, ImpExpression)
|
|
289
|
+
assert isinstance(argument_simp, Expression)
|
|
290
|
+
|
|
291
|
+
bindings = BindingDict()
|
|
292
|
+
|
|
293
|
+
try:
|
|
294
|
+
if isinstance(function, ApplicationExpression):
|
|
295
|
+
bindings += function.bindings
|
|
296
|
+
if isinstance(argument, ApplicationExpression):
|
|
297
|
+
bindings += argument.bindings
|
|
298
|
+
bindings += function_simp.antecedent.unify(argument_simp, bindings)
|
|
299
|
+
except UnificationException as e:
|
|
300
|
+
raise LinearLogicApplicationException('Cannot apply %s to %s. %s' % (function_simp, argument_simp, e))
|
|
301
|
+
|
|
302
|
+
# If you are running it on complied premises, more conditions apply
|
|
303
|
+
if argument_indices:
|
|
304
|
+
# A.dependencies of (A -o (B -o C)) must be a proper subset of argument_indices
|
|
305
|
+
if not set(function_simp.antecedent.dependencies) < argument_indices:
|
|
306
|
+
raise LinearLogicApplicationException('Dependencies unfulfilled when attempting to apply Linear Logic formula %s to %s' % (function_simp, argument_simp))
|
|
307
|
+
if set(function_simp.antecedent.dependencies) == argument_indices:
|
|
308
|
+
raise LinearLogicApplicationException('Dependencies not a proper subset of indices when attempting to apply Linear Logic formula %s to %s' % (function_simp, argument_simp))
|
|
309
|
+
|
|
310
|
+
self.function = function
|
|
311
|
+
self.argument = argument
|
|
312
|
+
self.bindings = bindings
|
|
313
|
+
|
|
314
|
+
def simplify(self, bindings=None):
|
|
315
|
+
"""
|
|
316
|
+
Since function is an implication, return its consequent. There should be
|
|
317
|
+
no need to check that the application is valid since the checking is done
|
|
318
|
+
by the constructor.
|
|
319
|
+
|
|
320
|
+
:param bindings: ``BindingDict`` A dictionary of bindings used to simplify
|
|
321
|
+
:return: ``Expression``
|
|
322
|
+
"""
|
|
323
|
+
if not bindings:
|
|
324
|
+
bindings = self.bindings
|
|
325
|
+
|
|
326
|
+
return self.function.simplify(bindings).consequent
|
|
327
|
+
|
|
328
|
+
def __eq__(self, other):
|
|
329
|
+
return self.__class__ == other.__class__ and \
|
|
330
|
+
self.function == other.function and self.argument == other.argument
|
|
331
|
+
|
|
332
|
+
def __ne__(self, other):
|
|
333
|
+
return not self == other
|
|
334
|
+
|
|
335
|
+
def __str__(self):
|
|
336
|
+
return "%s" % self.function + Tokens.OPEN + "%s" % self.argument + Tokens.CLOSE
|
|
337
|
+
|
|
338
|
+
def __hash__(self):
|
|
339
|
+
return hash('%s%s%s' % (hash(self.antecedent), Tokens.OPEN, hash(self.consequent)))
|
|
340
|
+
|
|
341
|
+
@python_2_unicode_compatible
|
|
342
|
+
class BindingDict(object):
|
|
343
|
+
def __init__(self, bindings=None):
|
|
344
|
+
"""
|
|
345
|
+
:param bindings:
|
|
346
|
+
list [(``VariableExpression``, ``AtomicExpression``)] to initialize the dictionary
|
|
347
|
+
dict {``VariableExpression``: ``AtomicExpression``} to initialize the dictionary
|
|
348
|
+
"""
|
|
349
|
+
self.d = {}
|
|
350
|
+
|
|
351
|
+
if isinstance(bindings, dict):
|
|
352
|
+
bindings = bindings.items()
|
|
353
|
+
|
|
354
|
+
if bindings:
|
|
355
|
+
for (v, b) in bindings:
|
|
356
|
+
self[v] = b
|
|
357
|
+
|
|
358
|
+
def __setitem__(self, variable, binding):
|
|
359
|
+
"""
|
|
360
|
+
A binding is consistent with the dict if its variable is not already bound, OR if its
|
|
361
|
+
variable is already bound to its argument.
|
|
362
|
+
|
|
363
|
+
:param variable: ``VariableExpression`` The variable bind
|
|
364
|
+
:param binding: ``Expression`` The expression to which 'variable' should be bound
|
|
365
|
+
:raise VariableBindingException: If the variable cannot be bound in this dictionary
|
|
366
|
+
"""
|
|
367
|
+
assert isinstance(variable, VariableExpression)
|
|
368
|
+
assert isinstance(binding, Expression)
|
|
369
|
+
|
|
370
|
+
assert variable != binding
|
|
371
|
+
|
|
372
|
+
existing = self.d.get(variable, None)
|
|
373
|
+
|
|
374
|
+
if not existing or binding == existing:
|
|
375
|
+
self.d[variable] = binding
|
|
376
|
+
else:
|
|
377
|
+
raise VariableBindingException('Variable %s already bound to another value' % (variable))
|
|
378
|
+
|
|
379
|
+
def __getitem__(self, variable):
|
|
380
|
+
"""
|
|
381
|
+
Return the expression to which 'variable' is bound
|
|
382
|
+
"""
|
|
383
|
+
assert isinstance(variable, VariableExpression)
|
|
384
|
+
|
|
385
|
+
intermediate = self.d[variable]
|
|
386
|
+
while intermediate:
|
|
387
|
+
try:
|
|
388
|
+
intermediate = self.d[intermediate]
|
|
389
|
+
except KeyError:
|
|
390
|
+
return intermediate
|
|
391
|
+
|
|
392
|
+
def __contains__(self, item):
|
|
393
|
+
return item in self.d
|
|
394
|
+
|
|
395
|
+
def __add__(self, other):
|
|
396
|
+
"""
|
|
397
|
+
:param other: ``BindingDict`` The dict with which to combine self
|
|
398
|
+
:return: ``BindingDict`` A new dict containing all the elements of both parameters
|
|
399
|
+
:raise VariableBindingException: If the parameter dictionaries are not consistent with each other
|
|
400
|
+
"""
|
|
401
|
+
try:
|
|
402
|
+
combined = BindingDict()
|
|
403
|
+
for v in self.d:
|
|
404
|
+
combined[v] = self.d[v]
|
|
405
|
+
for v in other.d:
|
|
406
|
+
combined[v] = other.d[v]
|
|
407
|
+
return combined
|
|
408
|
+
except VariableBindingException:
|
|
409
|
+
raise VariableBindingException('Attempting to add two contradicting'\
|
|
410
|
+
' VariableBindingsLists: %s, %s' % (self, other))
|
|
411
|
+
|
|
412
|
+
def __ne__(self, other):
|
|
413
|
+
return not self == other
|
|
414
|
+
|
|
415
|
+
def __eq__(self, other):
|
|
416
|
+
if not isinstance(other, BindingDict):
|
|
417
|
+
raise TypeError
|
|
418
|
+
return self.d == other.d
|
|
419
|
+
|
|
420
|
+
def __str__(self):
|
|
421
|
+
return '{' + ', '.join('%s: %s' % (v, self.d[v]) for v in self.d) + '}'
|
|
422
|
+
|
|
423
|
+
def __repr__(self):
|
|
424
|
+
return 'BindingDict: %s' % self
|
|
425
|
+
|
|
426
|
+
class VariableBindingException(Exception):
|
|
427
|
+
pass
|
|
428
|
+
|
|
429
|
+
class UnificationException(Exception):
|
|
430
|
+
def __init__(self, a, b, bindings):
|
|
431
|
+
Exception.__init__(self, 'Cannot unify %s with %s given %s' % (a, b, bindings))
|
|
432
|
+
|
|
433
|
+
class LinearLogicApplicationException(Exception):
|
|
434
|
+
pass
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
def demo():
|
|
438
|
+
lexpr = Expression.fromstring
|
|
439
|
+
|
|
440
|
+
print(lexpr(r'f'))
|
|
441
|
+
print(lexpr(r'(g -o f)'))
|
|
442
|
+
print(lexpr(r'((g -o G) -o G)'))
|
|
443
|
+
print(lexpr(r'g -o h -o f'))
|
|
444
|
+
print(lexpr(r'(g -o f)(g)').simplify())
|
|
445
|
+
print(lexpr(r'(H -o f)(g)').simplify())
|
|
446
|
+
print(lexpr(r'((g -o G) -o G)((g -o f))').simplify())
|
|
447
|
+
print(lexpr(r'(H -o H)((g -o f))').simplify())
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
if __name__ == '__main__':
|
|
451
|
+
demo()
|