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,249 +1,249 @@
|
|
|
1
|
-
# Natural Language Toolkit: Semantic Interpretation
|
|
2
|
-
#
|
|
3
|
-
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2001-
|
|
6
|
-
# URL: <http://nltk.org/>
|
|
7
|
-
# For license information, see LICENSE.TXT
|
|
8
|
-
|
|
9
|
-
"""
|
|
10
|
-
Utility functions for batch-processing sentences: parsing and
|
|
11
|
-
extraction of the semantic representation of the root node of the the
|
|
12
|
-
syntax tree, followed by evaluation of the semantic representation in
|
|
13
|
-
a first-order model.
|
|
14
|
-
"""
|
|
15
|
-
from __future__ import print_function, unicode_literals
|
|
16
|
-
|
|
17
|
-
import codecs
|
|
18
|
-
from nltk.sem import evaluate
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
##############################################################
|
|
22
|
-
## Utility functions for connecting parse output to semantics
|
|
23
|
-
##############################################################
|
|
24
|
-
|
|
25
|
-
def parse_sents(inputs, grammar, trace=0):
|
|
26
|
-
"""
|
|
27
|
-
Convert input sentences into syntactic trees.
|
|
28
|
-
|
|
29
|
-
:param inputs: sentences to be parsed
|
|
30
|
-
:type inputs: list(str)
|
|
31
|
-
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
32
|
-
:type grammar: nltk.grammar.FeatureGrammar
|
|
33
|
-
:rtype: list(nltk.tree.Tree) or dict(list(str)): list(Tree)
|
|
34
|
-
:return: a mapping from input sentences to a list of ``Tree``s
|
|
35
|
-
"""
|
|
36
|
-
# put imports here to avoid circult dependencies
|
|
37
|
-
from nltk.grammar import FeatureGrammar
|
|
38
|
-
from nltk.parse import FeatureChartParser, load_parser
|
|
39
|
-
|
|
40
|
-
if isinstance(grammar, FeatureGrammar):
|
|
41
|
-
cp = FeatureChartParser(grammar)
|
|
42
|
-
else:
|
|
43
|
-
cp = load_parser(grammar, trace=trace)
|
|
44
|
-
parses = []
|
|
45
|
-
for sent in inputs:
|
|
46
|
-
tokens = sent.split() # use a tokenizer?
|
|
47
|
-
syntrees = list(cp.parse(tokens))
|
|
48
|
-
parses.append(syntrees)
|
|
49
|
-
return parses
|
|
50
|
-
|
|
51
|
-
def root_semrep(syntree, semkey='SEM'):
|
|
52
|
-
"""
|
|
53
|
-
Find the semantic representation at the root of a tree.
|
|
54
|
-
|
|
55
|
-
:param syntree: a parse ``Tree``
|
|
56
|
-
:param semkey: the feature label to use for the root semantics in the tree
|
|
57
|
-
:return: the semantic representation at the root of a ``Tree``
|
|
58
|
-
:rtype: sem.Expression
|
|
59
|
-
"""
|
|
60
|
-
from nltk.grammar import FeatStructNonterminal
|
|
61
|
-
|
|
62
|
-
node = syntree.label()
|
|
63
|
-
assert isinstance(node, FeatStructNonterminal)
|
|
64
|
-
try:
|
|
65
|
-
return node[semkey]
|
|
66
|
-
except KeyError:
|
|
67
|
-
print(node, end=' ')
|
|
68
|
-
print("has no specification for the feature %s" % semkey)
|
|
69
|
-
raise
|
|
70
|
-
|
|
71
|
-
def interpret_sents(inputs, grammar, semkey='SEM', trace=0):
|
|
72
|
-
"""
|
|
73
|
-
Add the semantic representation to each syntactic parse tree
|
|
74
|
-
of each input sentence.
|
|
75
|
-
|
|
76
|
-
:param inputs: a list of sentences
|
|
77
|
-
:type inputs: list(str)
|
|
78
|
-
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
79
|
-
:type grammar: nltk.grammar.FeatureGrammar
|
|
80
|
-
:return: a mapping from sentences to lists of pairs (parse-tree, semantic-representations)
|
|
81
|
-
:rtype: list(list(tuple(nltk.tree.Tree, nltk.sem.logic.ConstantExpression)))
|
|
82
|
-
"""
|
|
83
|
-
return [[(syn, root_semrep(syn, semkey)) for syn in syntrees]
|
|
84
|
-
for syntrees in parse_sents(inputs, grammar, trace=trace)]
|
|
85
|
-
|
|
86
|
-
def evaluate_sents(inputs, grammar, model, assignment, trace=0):
|
|
87
|
-
"""
|
|
88
|
-
Add the truth-in-a-model value to each semantic representation
|
|
89
|
-
for each syntactic parse of each input sentences.
|
|
90
|
-
|
|
91
|
-
:param inputs: a list of sentences
|
|
92
|
-
:type inputs: list(str)
|
|
93
|
-
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
94
|
-
:type grammar: nltk.grammar.FeatureGrammar
|
|
95
|
-
:return: a mapping from sentences to lists of triples (parse-tree, semantic-representations, evaluation-in-model)
|
|
96
|
-
:rtype: list(list(tuple(nltk.tree.Tree, nltk.sem.logic.ConstantExpression, bool or dict(str): bool)))
|
|
97
|
-
"""
|
|
98
|
-
return [[(syn, sem, model.evaluate("%s" % sem, assignment, trace=trace))
|
|
99
|
-
for (syn, sem) in interpretations]
|
|
100
|
-
for interpretations in interpret_sents(inputs, grammar)]
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def demo_model0():
|
|
104
|
-
global m0, g0
|
|
105
|
-
#Initialize a valuation of non-logical constants."""
|
|
106
|
-
v = [('john', 'b1'),
|
|
107
|
-
('mary', 'g1'),
|
|
108
|
-
('suzie', 'g2'),
|
|
109
|
-
('fido', 'd1'),
|
|
110
|
-
('tess', 'd2'),
|
|
111
|
-
('noosa', 'n'),
|
|
112
|
-
('girl', set(['g1', 'g2'])),
|
|
113
|
-
('boy', set(['b1', 'b2'])),
|
|
114
|
-
('dog', set(['d1', 'd2'])),
|
|
115
|
-
('bark', set(['d1', 'd2'])),
|
|
116
|
-
('walk', set(['b1', 'g2', 'd1'])),
|
|
117
|
-
('chase', set([('b1', 'g1'), ('b2', 'g1'), ('g1', 'd1'), ('g2', 'd2')])),
|
|
118
|
-
('see', set([('b1', 'g1'), ('b2', 'd2'), ('g1', 'b1'),('d2', 'b1'), ('g2', 'n')])),
|
|
119
|
-
('in', set([('b1', 'n'), ('b2', 'n'), ('d2', 'n')])),
|
|
120
|
-
('with', set([('b1', 'g1'), ('g1', 'b1'), ('d1', 'b1'), ('b1', 'd1')]))
|
|
121
|
-
]
|
|
122
|
-
#Read in the data from ``v``
|
|
123
|
-
val = evaluate.Valuation(v)
|
|
124
|
-
#Bind ``dom`` to the ``domain`` property of ``val``
|
|
125
|
-
dom = val.domain
|
|
126
|
-
#Initialize a model with parameters ``dom`` and ``val``.
|
|
127
|
-
m0 = evaluate.Model(dom, val)
|
|
128
|
-
#Initialize a variable assignment with parameter ``dom``
|
|
129
|
-
g0 = evaluate.Assignment(dom)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
def read_sents(filename, encoding='utf8'):
|
|
133
|
-
with codecs.open(filename, 'r', encoding) as fp:
|
|
134
|
-
sents = [l.rstrip() for l in fp]
|
|
135
|
-
|
|
136
|
-
# get rid of blank lines
|
|
137
|
-
sents = [l for l in sents if len(l) > 0]
|
|
138
|
-
sents = [l for l in sents if not l[0] == '#']
|
|
139
|
-
return sents
|
|
140
|
-
|
|
141
|
-
def demo_legacy_grammar():
|
|
142
|
-
"""
|
|
143
|
-
Check that interpret_sents() is compatible with legacy grammars that use
|
|
144
|
-
a lowercase 'sem' feature.
|
|
145
|
-
|
|
146
|
-
Define 'test.fcfg' to be the following
|
|
147
|
-
|
|
148
|
-
"""
|
|
149
|
-
from nltk.grammar import FeatureGrammar
|
|
150
|
-
|
|
151
|
-
g = FeatureGrammar.fromstring("""
|
|
152
|
-
% start S
|
|
153
|
-
S[sem=<hello>] -> 'hello'
|
|
154
|
-
""")
|
|
155
|
-
print("Reading grammar: %s" % g)
|
|
156
|
-
print("*" * 20)
|
|
157
|
-
for reading in interpret_sents(['hello'], g, semkey='sem'):
|
|
158
|
-
syn, sem = reading[0]
|
|
159
|
-
print()
|
|
160
|
-
print("output: ", sem)
|
|
161
|
-
|
|
162
|
-
def demo():
|
|
163
|
-
import sys
|
|
164
|
-
from optparse import OptionParser
|
|
165
|
-
description = \
|
|
166
|
-
"""
|
|
167
|
-
Parse and evaluate some sentences.
|
|
168
|
-
"""
|
|
169
|
-
|
|
170
|
-
opts = OptionParser(description=description)
|
|
171
|
-
|
|
172
|
-
opts.set_defaults(evaluate=True, beta=True, syntrace=0,
|
|
173
|
-
semtrace=0, demo='default', grammar='', sentences='')
|
|
174
|
-
|
|
175
|
-
opts.add_option("-d", "--demo", dest="demo",
|
|
176
|
-
help="choose demo D; omit this for the default demo, or specify 'chat80'", metavar="D")
|
|
177
|
-
opts.add_option("-g", "--gram", dest="grammar",
|
|
178
|
-
help="read in grammar G", metavar="G")
|
|
179
|
-
opts.add_option("-m", "--model", dest="model",
|
|
180
|
-
help="import model M (omit '.py' suffix)", metavar="M")
|
|
181
|
-
opts.add_option("-s", "--sentences", dest="sentences",
|
|
182
|
-
help="read in a file of test sentences S", metavar="S")
|
|
183
|
-
opts.add_option("-e", "--no-eval", action="store_false", dest="evaluate",
|
|
184
|
-
help="just do a syntactic analysis")
|
|
185
|
-
opts.add_option("-b", "--no-beta-reduction", action="store_false",
|
|
186
|
-
dest="beta", help="don't carry out beta-reduction")
|
|
187
|
-
opts.add_option("-t", "--syntrace", action="count", dest="syntrace",
|
|
188
|
-
help="set syntactic tracing on; requires '-e' option")
|
|
189
|
-
opts.add_option("-T", "--semtrace", action="count", dest="semtrace",
|
|
190
|
-
help="set semantic tracing on")
|
|
191
|
-
|
|
192
|
-
(options, args) = opts.parse_args()
|
|
193
|
-
|
|
194
|
-
SPACER = '-' * 30
|
|
195
|
-
|
|
196
|
-
demo_model0()
|
|
197
|
-
|
|
198
|
-
sents = [
|
|
199
|
-
'Fido sees a boy with Mary',
|
|
200
|
-
'John sees Mary',
|
|
201
|
-
'every girl chases a dog',
|
|
202
|
-
'every boy chases a girl',
|
|
203
|
-
'John walks with a girl in Noosa',
|
|
204
|
-
'who walks']
|
|
205
|
-
|
|
206
|
-
gramfile = 'grammars/sample_grammars/sem2.fcfg'
|
|
207
|
-
|
|
208
|
-
if options.sentences:
|
|
209
|
-
sentsfile = options.sentences
|
|
210
|
-
if options.grammar:
|
|
211
|
-
gramfile = options.grammar
|
|
212
|
-
if options.model:
|
|
213
|
-
exec("import %s as model" % options.model)
|
|
214
|
-
|
|
215
|
-
if sents is None:
|
|
216
|
-
sents = read_sents(sentsfile)
|
|
217
|
-
|
|
218
|
-
# Set model and assignment
|
|
219
|
-
model = m0
|
|
220
|
-
g = g0
|
|
221
|
-
|
|
222
|
-
if options.evaluate:
|
|
223
|
-
evaluations = \
|
|
224
|
-
evaluate_sents(sents, gramfile, model, g, trace=options.semtrace)
|
|
225
|
-
else:
|
|
226
|
-
semreps = \
|
|
227
|
-
interpret_sents(sents, gramfile, trace=options.syntrace)
|
|
228
|
-
|
|
229
|
-
for i, sent in enumerate(sents):
|
|
230
|
-
n = 1
|
|
231
|
-
print('\nSentence: %s' % sent)
|
|
232
|
-
print(SPACER)
|
|
233
|
-
if options.evaluate:
|
|
234
|
-
|
|
235
|
-
for (syntree, semrep, value) in evaluations[i]:
|
|
236
|
-
if isinstance(value, dict):
|
|
237
|
-
value = set(value.keys())
|
|
238
|
-
print('%d: %s' % (n, semrep))
|
|
239
|
-
print(value)
|
|
240
|
-
n += 1
|
|
241
|
-
else:
|
|
242
|
-
|
|
243
|
-
for (syntree, semrep) in semreps[i]:
|
|
244
|
-
print('%d: %s' % (n, semrep))
|
|
245
|
-
n += 1
|
|
246
|
-
|
|
247
|
-
if __name__ == "__main__":
|
|
248
|
-
demo()
|
|
249
|
-
demo_legacy_grammar()
|
|
1
|
+
# Natural Language Toolkit: Semantic Interpretation
|
|
2
|
+
#
|
|
3
|
+
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
6
|
+
# URL: <http://nltk.org/>
|
|
7
|
+
# For license information, see LICENSE.TXT
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Utility functions for batch-processing sentences: parsing and
|
|
11
|
+
extraction of the semantic representation of the root node of the the
|
|
12
|
+
syntax tree, followed by evaluation of the semantic representation in
|
|
13
|
+
a first-order model.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import print_function, unicode_literals
|
|
16
|
+
|
|
17
|
+
import codecs
|
|
18
|
+
from nltk.sem import evaluate
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
##############################################################
|
|
22
|
+
## Utility functions for connecting parse output to semantics
|
|
23
|
+
##############################################################
|
|
24
|
+
|
|
25
|
+
def parse_sents(inputs, grammar, trace=0):
|
|
26
|
+
"""
|
|
27
|
+
Convert input sentences into syntactic trees.
|
|
28
|
+
|
|
29
|
+
:param inputs: sentences to be parsed
|
|
30
|
+
:type inputs: list(str)
|
|
31
|
+
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
32
|
+
:type grammar: nltk.grammar.FeatureGrammar
|
|
33
|
+
:rtype: list(nltk.tree.Tree) or dict(list(str)): list(Tree)
|
|
34
|
+
:return: a mapping from input sentences to a list of ``Tree``s
|
|
35
|
+
"""
|
|
36
|
+
# put imports here to avoid circult dependencies
|
|
37
|
+
from nltk.grammar import FeatureGrammar
|
|
38
|
+
from nltk.parse import FeatureChartParser, load_parser
|
|
39
|
+
|
|
40
|
+
if isinstance(grammar, FeatureGrammar):
|
|
41
|
+
cp = FeatureChartParser(grammar)
|
|
42
|
+
else:
|
|
43
|
+
cp = load_parser(grammar, trace=trace)
|
|
44
|
+
parses = []
|
|
45
|
+
for sent in inputs:
|
|
46
|
+
tokens = sent.split() # use a tokenizer?
|
|
47
|
+
syntrees = list(cp.parse(tokens))
|
|
48
|
+
parses.append(syntrees)
|
|
49
|
+
return parses
|
|
50
|
+
|
|
51
|
+
def root_semrep(syntree, semkey='SEM'):
|
|
52
|
+
"""
|
|
53
|
+
Find the semantic representation at the root of a tree.
|
|
54
|
+
|
|
55
|
+
:param syntree: a parse ``Tree``
|
|
56
|
+
:param semkey: the feature label to use for the root semantics in the tree
|
|
57
|
+
:return: the semantic representation at the root of a ``Tree``
|
|
58
|
+
:rtype: sem.Expression
|
|
59
|
+
"""
|
|
60
|
+
from nltk.grammar import FeatStructNonterminal
|
|
61
|
+
|
|
62
|
+
node = syntree.label()
|
|
63
|
+
assert isinstance(node, FeatStructNonterminal)
|
|
64
|
+
try:
|
|
65
|
+
return node[semkey]
|
|
66
|
+
except KeyError:
|
|
67
|
+
print(node, end=' ')
|
|
68
|
+
print("has no specification for the feature %s" % semkey)
|
|
69
|
+
raise
|
|
70
|
+
|
|
71
|
+
def interpret_sents(inputs, grammar, semkey='SEM', trace=0):
|
|
72
|
+
"""
|
|
73
|
+
Add the semantic representation to each syntactic parse tree
|
|
74
|
+
of each input sentence.
|
|
75
|
+
|
|
76
|
+
:param inputs: a list of sentences
|
|
77
|
+
:type inputs: list(str)
|
|
78
|
+
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
79
|
+
:type grammar: nltk.grammar.FeatureGrammar
|
|
80
|
+
:return: a mapping from sentences to lists of pairs (parse-tree, semantic-representations)
|
|
81
|
+
:rtype: list(list(tuple(nltk.tree.Tree, nltk.sem.logic.ConstantExpression)))
|
|
82
|
+
"""
|
|
83
|
+
return [[(syn, root_semrep(syn, semkey)) for syn in syntrees]
|
|
84
|
+
for syntrees in parse_sents(inputs, grammar, trace=trace)]
|
|
85
|
+
|
|
86
|
+
def evaluate_sents(inputs, grammar, model, assignment, trace=0):
|
|
87
|
+
"""
|
|
88
|
+
Add the truth-in-a-model value to each semantic representation
|
|
89
|
+
for each syntactic parse of each input sentences.
|
|
90
|
+
|
|
91
|
+
:param inputs: a list of sentences
|
|
92
|
+
:type inputs: list(str)
|
|
93
|
+
:param grammar: ``FeatureGrammar`` or name of feature-based grammar
|
|
94
|
+
:type grammar: nltk.grammar.FeatureGrammar
|
|
95
|
+
:return: a mapping from sentences to lists of triples (parse-tree, semantic-representations, evaluation-in-model)
|
|
96
|
+
:rtype: list(list(tuple(nltk.tree.Tree, nltk.sem.logic.ConstantExpression, bool or dict(str): bool)))
|
|
97
|
+
"""
|
|
98
|
+
return [[(syn, sem, model.evaluate("%s" % sem, assignment, trace=trace))
|
|
99
|
+
for (syn, sem) in interpretations]
|
|
100
|
+
for interpretations in interpret_sents(inputs, grammar)]
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def demo_model0():
|
|
104
|
+
global m0, g0
|
|
105
|
+
#Initialize a valuation of non-logical constants."""
|
|
106
|
+
v = [('john', 'b1'),
|
|
107
|
+
('mary', 'g1'),
|
|
108
|
+
('suzie', 'g2'),
|
|
109
|
+
('fido', 'd1'),
|
|
110
|
+
('tess', 'd2'),
|
|
111
|
+
('noosa', 'n'),
|
|
112
|
+
('girl', set(['g1', 'g2'])),
|
|
113
|
+
('boy', set(['b1', 'b2'])),
|
|
114
|
+
('dog', set(['d1', 'd2'])),
|
|
115
|
+
('bark', set(['d1', 'd2'])),
|
|
116
|
+
('walk', set(['b1', 'g2', 'd1'])),
|
|
117
|
+
('chase', set([('b1', 'g1'), ('b2', 'g1'), ('g1', 'd1'), ('g2', 'd2')])),
|
|
118
|
+
('see', set([('b1', 'g1'), ('b2', 'd2'), ('g1', 'b1'),('d2', 'b1'), ('g2', 'n')])),
|
|
119
|
+
('in', set([('b1', 'n'), ('b2', 'n'), ('d2', 'n')])),
|
|
120
|
+
('with', set([('b1', 'g1'), ('g1', 'b1'), ('d1', 'b1'), ('b1', 'd1')]))
|
|
121
|
+
]
|
|
122
|
+
#Read in the data from ``v``
|
|
123
|
+
val = evaluate.Valuation(v)
|
|
124
|
+
#Bind ``dom`` to the ``domain`` property of ``val``
|
|
125
|
+
dom = val.domain
|
|
126
|
+
#Initialize a model with parameters ``dom`` and ``val``.
|
|
127
|
+
m0 = evaluate.Model(dom, val)
|
|
128
|
+
#Initialize a variable assignment with parameter ``dom``
|
|
129
|
+
g0 = evaluate.Assignment(dom)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def read_sents(filename, encoding='utf8'):
|
|
133
|
+
with codecs.open(filename, 'r', encoding) as fp:
|
|
134
|
+
sents = [l.rstrip() for l in fp]
|
|
135
|
+
|
|
136
|
+
# get rid of blank lines
|
|
137
|
+
sents = [l for l in sents if len(l) > 0]
|
|
138
|
+
sents = [l for l in sents if not l[0] == '#']
|
|
139
|
+
return sents
|
|
140
|
+
|
|
141
|
+
def demo_legacy_grammar():
|
|
142
|
+
"""
|
|
143
|
+
Check that interpret_sents() is compatible with legacy grammars that use
|
|
144
|
+
a lowercase 'sem' feature.
|
|
145
|
+
|
|
146
|
+
Define 'test.fcfg' to be the following
|
|
147
|
+
|
|
148
|
+
"""
|
|
149
|
+
from nltk.grammar import FeatureGrammar
|
|
150
|
+
|
|
151
|
+
g = FeatureGrammar.fromstring("""
|
|
152
|
+
% start S
|
|
153
|
+
S[sem=<hello>] -> 'hello'
|
|
154
|
+
""")
|
|
155
|
+
print("Reading grammar: %s" % g)
|
|
156
|
+
print("*" * 20)
|
|
157
|
+
for reading in interpret_sents(['hello'], g, semkey='sem'):
|
|
158
|
+
syn, sem = reading[0]
|
|
159
|
+
print()
|
|
160
|
+
print("output: ", sem)
|
|
161
|
+
|
|
162
|
+
def demo():
|
|
163
|
+
import sys
|
|
164
|
+
from optparse import OptionParser
|
|
165
|
+
description = \
|
|
166
|
+
"""
|
|
167
|
+
Parse and evaluate some sentences.
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
opts = OptionParser(description=description)
|
|
171
|
+
|
|
172
|
+
opts.set_defaults(evaluate=True, beta=True, syntrace=0,
|
|
173
|
+
semtrace=0, demo='default', grammar='', sentences='')
|
|
174
|
+
|
|
175
|
+
opts.add_option("-d", "--demo", dest="demo",
|
|
176
|
+
help="choose demo D; omit this for the default demo, or specify 'chat80'", metavar="D")
|
|
177
|
+
opts.add_option("-g", "--gram", dest="grammar",
|
|
178
|
+
help="read in grammar G", metavar="G")
|
|
179
|
+
opts.add_option("-m", "--model", dest="model",
|
|
180
|
+
help="import model M (omit '.py' suffix)", metavar="M")
|
|
181
|
+
opts.add_option("-s", "--sentences", dest="sentences",
|
|
182
|
+
help="read in a file of test sentences S", metavar="S")
|
|
183
|
+
opts.add_option("-e", "--no-eval", action="store_false", dest="evaluate",
|
|
184
|
+
help="just do a syntactic analysis")
|
|
185
|
+
opts.add_option("-b", "--no-beta-reduction", action="store_false",
|
|
186
|
+
dest="beta", help="don't carry out beta-reduction")
|
|
187
|
+
opts.add_option("-t", "--syntrace", action="count", dest="syntrace",
|
|
188
|
+
help="set syntactic tracing on; requires '-e' option")
|
|
189
|
+
opts.add_option("-T", "--semtrace", action="count", dest="semtrace",
|
|
190
|
+
help="set semantic tracing on")
|
|
191
|
+
|
|
192
|
+
(options, args) = opts.parse_args()
|
|
193
|
+
|
|
194
|
+
SPACER = '-' * 30
|
|
195
|
+
|
|
196
|
+
demo_model0()
|
|
197
|
+
|
|
198
|
+
sents = [
|
|
199
|
+
'Fido sees a boy with Mary',
|
|
200
|
+
'John sees Mary',
|
|
201
|
+
'every girl chases a dog',
|
|
202
|
+
'every boy chases a girl',
|
|
203
|
+
'John walks with a girl in Noosa',
|
|
204
|
+
'who walks']
|
|
205
|
+
|
|
206
|
+
gramfile = 'grammars/sample_grammars/sem2.fcfg'
|
|
207
|
+
|
|
208
|
+
if options.sentences:
|
|
209
|
+
sentsfile = options.sentences
|
|
210
|
+
if options.grammar:
|
|
211
|
+
gramfile = options.grammar
|
|
212
|
+
if options.model:
|
|
213
|
+
exec("import %s as model" % options.model)
|
|
214
|
+
|
|
215
|
+
if sents is None:
|
|
216
|
+
sents = read_sents(sentsfile)
|
|
217
|
+
|
|
218
|
+
# Set model and assignment
|
|
219
|
+
model = m0
|
|
220
|
+
g = g0
|
|
221
|
+
|
|
222
|
+
if options.evaluate:
|
|
223
|
+
evaluations = \
|
|
224
|
+
evaluate_sents(sents, gramfile, model, g, trace=options.semtrace)
|
|
225
|
+
else:
|
|
226
|
+
semreps = \
|
|
227
|
+
interpret_sents(sents, gramfile, trace=options.syntrace)
|
|
228
|
+
|
|
229
|
+
for i, sent in enumerate(sents):
|
|
230
|
+
n = 1
|
|
231
|
+
print('\nSentence: %s' % sent)
|
|
232
|
+
print(SPACER)
|
|
233
|
+
if options.evaluate:
|
|
234
|
+
|
|
235
|
+
for (syntree, semrep, value) in evaluations[i]:
|
|
236
|
+
if isinstance(value, dict):
|
|
237
|
+
value = set(value.keys())
|
|
238
|
+
print('%d: %s' % (n, semrep))
|
|
239
|
+
print(value)
|
|
240
|
+
n += 1
|
|
241
|
+
else:
|
|
242
|
+
|
|
243
|
+
for (syntree, semrep) in semreps[i]:
|
|
244
|
+
print('%d: %s' % (n, semrep))
|
|
245
|
+
n += 1
|
|
246
|
+
|
|
247
|
+
if __name__ == "__main__":
|
|
248
|
+
demo()
|
|
249
|
+
demo_legacy_grammar()
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Natural Language Toolkit: Sentiment Analysis
|
|
3
|
-
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
5
|
-
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
6
|
-
# URL: <http://nltk.org/>
|
|
7
|
-
# For license information, see LICENSE.TXT
|
|
8
|
-
|
|
9
|
-
"""
|
|
10
|
-
NLTK Sentiment Analysis Package
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
from nltk.sentiment.sentiment_analyzer import SentimentAnalyzer
|
|
14
|
-
from nltk.sentiment.vader import SentimentIntensityAnalyzer
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: Sentiment Analysis
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
|
+
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
6
|
+
# URL: <http://nltk.org/>
|
|
7
|
+
# For license information, see LICENSE.TXT
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
NLTK Sentiment Analysis Package
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
from nltk.sentiment.sentiment_analyzer import SentimentAnalyzer
|
|
14
|
+
from nltk.sentiment.vader import SentimentIntensityAnalyzer
|