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,39 +1,39 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Natural Language Toolkit: Transformation-based learning
|
|
3
|
-
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
5
|
-
# Author: Marcus Uneson <marcus.uneson@gmail.com>
|
|
6
|
-
# based on previous (nltk2) version by
|
|
7
|
-
# Christopher Maloof, Edward Loper, Steven Bird
|
|
8
|
-
# URL: <http://nltk.org/>
|
|
9
|
-
# For license information, see LICENSE.TXT
|
|
10
|
-
|
|
11
|
-
from __future__ import print_function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# returns a list of errors in string format
|
|
15
|
-
|
|
16
|
-
def error_list(train_sents, test_sents):
|
|
17
|
-
"""
|
|
18
|
-
Returns a list of human-readable strings indicating the errors in the
|
|
19
|
-
given tagging of the corpus.
|
|
20
|
-
|
|
21
|
-
:param train_sents: The correct tagging of the corpus
|
|
22
|
-
:type train_sents: list(tuple)
|
|
23
|
-
:param test_sents: The tagged corpus
|
|
24
|
-
:type test_sents: list(tuple)
|
|
25
|
-
"""
|
|
26
|
-
hdr = (('%25s | %s | %s\n' + '-'*26+'+'+'-'*24+'+'+'-'*26) %
|
|
27
|
-
('left context', 'word/test->gold'.center(22), 'right context'))
|
|
28
|
-
errors = [hdr]
|
|
29
|
-
for (train_sent, test_sent) in zip(train_sents, test_sents):
|
|
30
|
-
for wordnum, (word, train_pos) in enumerate(train_sent):
|
|
31
|
-
test_pos = test_sent[wordnum][1]
|
|
32
|
-
if train_pos != test_pos:
|
|
33
|
-
left = ' '.join('%s/%s' % w for w in train_sent[:wordnum])
|
|
34
|
-
right = ' '.join('%s/%s' % w for w in train_sent[wordnum+1:])
|
|
35
|
-
mid = '%s/%s->%s' % (word, test_pos, train_pos)
|
|
36
|
-
errors.append('%25s | %s | %s' %
|
|
37
|
-
(left[-25:], mid.center(22), right[:25]))
|
|
38
|
-
|
|
39
|
-
return errors
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: Transformation-based learning
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
|
+
# Author: Marcus Uneson <marcus.uneson@gmail.com>
|
|
6
|
+
# based on previous (nltk2) version by
|
|
7
|
+
# Christopher Maloof, Edward Loper, Steven Bird
|
|
8
|
+
# URL: <http://nltk.org/>
|
|
9
|
+
# For license information, see LICENSE.TXT
|
|
10
|
+
|
|
11
|
+
from __future__ import print_function
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# returns a list of errors in string format
|
|
15
|
+
|
|
16
|
+
def error_list(train_sents, test_sents):
|
|
17
|
+
"""
|
|
18
|
+
Returns a list of human-readable strings indicating the errors in the
|
|
19
|
+
given tagging of the corpus.
|
|
20
|
+
|
|
21
|
+
:param train_sents: The correct tagging of the corpus
|
|
22
|
+
:type train_sents: list(tuple)
|
|
23
|
+
:param test_sents: The tagged corpus
|
|
24
|
+
:type test_sents: list(tuple)
|
|
25
|
+
"""
|
|
26
|
+
hdr = (('%25s | %s | %s\n' + '-'*26+'+'+'-'*24+'+'+'-'*26) %
|
|
27
|
+
('left context', 'word/test->gold'.center(22), 'right context'))
|
|
28
|
+
errors = [hdr]
|
|
29
|
+
for (train_sent, test_sent) in zip(train_sents, test_sents):
|
|
30
|
+
for wordnum, (word, train_pos) in enumerate(train_sent):
|
|
31
|
+
test_pos = test_sent[wordnum][1]
|
|
32
|
+
if train_pos != test_pos:
|
|
33
|
+
left = ' '.join('%s/%s' % w for w in train_sent[:wordnum])
|
|
34
|
+
right = ' '.join('%s/%s' % w for w in train_sent[wordnum+1:])
|
|
35
|
+
mid = '%s/%s->%s' % (word, test_pos, train_pos)
|
|
36
|
+
errors.append('%25s | %s | %s' %
|
|
37
|
+
(left[-25:], mid.center(22), right[:25]))
|
|
38
|
+
|
|
39
|
+
return errors
|
|
@@ -1,261 +1,259 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Natural Language Toolkit: Transformation-based learning
|
|
3
|
-
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
5
|
-
# Author: Marcus Uneson <marcus.uneson@gmail.com>
|
|
6
|
-
# based on previous (nltk2) version by
|
|
7
|
-
# Christopher Maloof, Edward Loper, Steven Bird
|
|
8
|
-
# URL: <http://nltk.org/>
|
|
9
|
-
# For license information, see LICENSE.TXT
|
|
10
|
-
|
|
11
|
-
from __future__ import division, print_function, unicode_literals
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
for
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
json_tag = 'nltk.tbl.Feature'
|
|
37
|
-
PROPERTY_NAME = None
|
|
38
|
-
|
|
39
|
-
def __init__(self, positions, end=None):
|
|
40
|
-
"""
|
|
41
|
-
Construct a Feature which may apply at C{positions}.
|
|
42
|
-
|
|
43
|
-
#For instance, importing some concrete subclasses (Feature is abstract)
|
|
44
|
-
>>> from nltk.tag.brill import Word, Pos
|
|
45
|
-
|
|
46
|
-
#Feature Word, applying at one of [-2, -1]
|
|
47
|
-
>>> Word([-2,-1])
|
|
48
|
-
Word([-2, -1])
|
|
49
|
-
|
|
50
|
-
#Positions need not be contiguous
|
|
51
|
-
>>> Word([-2,-1, 1])
|
|
52
|
-
Word([-2, -1, 1])
|
|
53
|
-
|
|
54
|
-
#Contiguous ranges can alternatively be specified giving the
|
|
55
|
-
#two endpoints (inclusive)
|
|
56
|
-
>>> Pos(-3, -1)
|
|
57
|
-
Pos([-3, -2, -1])
|
|
58
|
-
|
|
59
|
-
#In two-arg form, start <= end is enforced
|
|
60
|
-
>>> Pos(2, 1)
|
|
61
|
-
Traceback (most recent call last):
|
|
62
|
-
File "<stdin>", line 1, in <module>
|
|
63
|
-
File "nltk/tbl/template.py", line 306, in __init__
|
|
64
|
-
raise TypeError
|
|
65
|
-
ValueError: illegal interval specification: (start=2, end=1)
|
|
66
|
-
|
|
67
|
-
:type positions: list of int
|
|
68
|
-
:param positions: the positions at which this features should apply
|
|
69
|
-
:raises ValueError: illegal position specifications
|
|
70
|
-
|
|
71
|
-
An alternative calling convention, for contiguous positions only,
|
|
72
|
-
is Feature(start, end):
|
|
73
|
-
|
|
74
|
-
:type start: int
|
|
75
|
-
:param start: start of range where this feature should apply
|
|
76
|
-
:type end: int
|
|
77
|
-
:param end: end of range (NOTE: inclusive!) where this feature should apply
|
|
78
|
-
|
|
79
|
-
"""
|
|
80
|
-
self.positions = None # to avoid warnings
|
|
81
|
-
if end is None:
|
|
82
|
-
self.positions = tuple(sorted(set([int(i) for i in positions])))
|
|
83
|
-
else: # positions was actually not a list, but only the start index
|
|
84
|
-
try:
|
|
85
|
-
if positions > end:
|
|
86
|
-
raise TypeError
|
|
87
|
-
self.positions = tuple(range(positions, end+1))
|
|
88
|
-
except TypeError:
|
|
89
|
-
# let any kind of erroneous spec raise ValueError
|
|
90
|
-
raise ValueError("illegal interval specification: (start={0}, end={1})".format(positions, end))
|
|
91
|
-
|
|
92
|
-
# set property name given in subclass, or otherwise name of subclass
|
|
93
|
-
self.PROPERTY_NAME = self.__class__.PROPERTY_NAME or self.__class__.__name__
|
|
94
|
-
|
|
95
|
-
def encode_json_obj(self):
|
|
96
|
-
return self.positions
|
|
97
|
-
|
|
98
|
-
@classmethod
|
|
99
|
-
def decode_json_obj(cls, obj):
|
|
100
|
-
positions = obj
|
|
101
|
-
return cls(positions)
|
|
102
|
-
|
|
103
|
-
def __repr__(self):
|
|
104
|
-
return "%s(%r)" % (
|
|
105
|
-
self.__class__.__name__, list(self.positions))
|
|
106
|
-
|
|
107
|
-
@classmethod
|
|
108
|
-
def expand(cls, starts, winlens, excludezero=False):
|
|
109
|
-
"""
|
|
110
|
-
Return a list of features, one for each start point in starts
|
|
111
|
-
and for each window length in winlen. If excludezero is True,
|
|
112
|
-
no Features containing 0 in its positions will be generated
|
|
113
|
-
(many tbl trainers have a special representation for the
|
|
114
|
-
target feature at [0])
|
|
115
|
-
|
|
116
|
-
For instance, importing a concrete subclass (Feature is abstract)
|
|
117
|
-
>>> from nltk.tag.brill import Word
|
|
118
|
-
|
|
119
|
-
First argument gives the possible start positions, second the
|
|
120
|
-
possible window lengths
|
|
121
|
-
>>> Word.expand([-3,-2,-1], [1])
|
|
122
|
-
[Word([-3]), Word([-2]), Word([-1])]
|
|
123
|
-
|
|
124
|
-
>>> Word.expand([-2,-1], [1])
|
|
125
|
-
[Word([-2]), Word([-1])]
|
|
126
|
-
|
|
127
|
-
>>> Word.expand([-3,-2,-1], [1,2])
|
|
128
|
-
[Word([-3]), Word([-2]), Word([-1]), Word([-3, -2]), Word([-2, -1])]
|
|
129
|
-
|
|
130
|
-
>>> Word.expand([-2,-1], [1])
|
|
131
|
-
[Word([-2]), Word([-1])]
|
|
132
|
-
|
|
133
|
-
a third optional argument excludes all Features whose positions contain zero
|
|
134
|
-
>>> Word.expand([-2,-1,0], [1,2], excludezero=False)
|
|
135
|
-
[Word([-2]), Word([-1]), Word([0]), Word([-2, -1]), Word([-1, 0])]
|
|
136
|
-
|
|
137
|
-
>>> Word.expand([-2,-1,0], [1,2], excludezero=True)
|
|
138
|
-
[Word([-2]), Word([-1]), Word([-2, -1])]
|
|
139
|
-
|
|
140
|
-
All window lengths must be positive
|
|
141
|
-
>>> Word.expand([-2,-1], [0])
|
|
142
|
-
Traceback (most recent call last):
|
|
143
|
-
File "<stdin>", line 1, in <module>
|
|
144
|
-
File "nltk/tag/tbl/template.py", line 371, in expand
|
|
145
|
-
:param starts: where to start looking for Feature
|
|
146
|
-
ValueError: non-positive window length in [0]
|
|
147
|
-
|
|
148
|
-
:param starts: where to start looking for Feature
|
|
149
|
-
:type starts: list of ints
|
|
150
|
-
:param winlens: window lengths where to look for Feature
|
|
151
|
-
:type starts: list of ints
|
|
152
|
-
:param excludezero: do not output any Feature with 0 in any of its positions.
|
|
153
|
-
:type excludezero: bool
|
|
154
|
-
:returns: list of Features
|
|
155
|
-
:raises ValueError: for non-positive window lengths
|
|
156
|
-
"""
|
|
157
|
-
if not all(x > 0 for x in winlens):
|
|
158
|
-
raise ValueError("non-positive window length in {0}".format(winlens))
|
|
159
|
-
xs = (starts[i:i+w] for w in winlens for i in range(len(starts)-w+1))
|
|
160
|
-
return [cls(x) for x in xs if not (excludezero and 0 in x)]
|
|
161
|
-
|
|
162
|
-
def issuperset(self, other):
|
|
163
|
-
"""
|
|
164
|
-
Return True if this Feature always returns True when other does
|
|
165
|
-
|
|
166
|
-
More precisely, return True if this feature refers to the same property as other;
|
|
167
|
-
and this Feature looks at all positions that other does (and possibly
|
|
168
|
-
other positions in addition).
|
|
169
|
-
|
|
170
|
-
#For instance, importing a concrete subclass (Feature is abstract)
|
|
171
|
-
>>> from nltk.tag.brill import Word, Pos
|
|
172
|
-
|
|
173
|
-
>>> Word([-3,-2,-1]).issuperset(Word([-3,-2]))
|
|
174
|
-
True
|
|
175
|
-
|
|
176
|
-
>>> Word([-3,-2,-1]).issuperset(Word([-3,-2, 0]))
|
|
177
|
-
False
|
|
178
|
-
|
|
179
|
-
#Feature subclasses must agree
|
|
180
|
-
>>> Word([-3,-2,-1]).issuperset(Pos([-3,-2]))
|
|
181
|
-
False
|
|
182
|
-
|
|
183
|
-
:param other: feature with which to compare
|
|
184
|
-
:type other: (subclass of) Feature
|
|
185
|
-
:return: True if this feature is superset, otherwise False
|
|
186
|
-
:rtype: bool
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
"""
|
|
190
|
-
return self.__class__ is other.__class__ and set(self.positions) >= set(other.positions)
|
|
191
|
-
|
|
192
|
-
def intersects(self, other):
|
|
193
|
-
"""
|
|
194
|
-
Return True if the positions of this Feature intersects with those of other
|
|
195
|
-
|
|
196
|
-
More precisely, return True if this feature refers to the same property as other;
|
|
197
|
-
and there is some overlap in the positions they look at.
|
|
198
|
-
|
|
199
|
-
#For instance, importing a concrete subclass (Feature is abstract)
|
|
200
|
-
>>> from nltk.tag.brill import Word, Pos
|
|
201
|
-
|
|
202
|
-
>>> Word([-3,-2,-1]).intersects(Word([-3,-2]))
|
|
203
|
-
True
|
|
204
|
-
|
|
205
|
-
>>> Word([-3,-2,-1]).intersects(Word([-3,-2, 0]))
|
|
206
|
-
True
|
|
207
|
-
|
|
208
|
-
>>> Word([-3,-2,-1]).intersects(Word([0]))
|
|
209
|
-
False
|
|
210
|
-
|
|
211
|
-
#Feature subclasses must agree
|
|
212
|
-
>>> Word([-3,-2,-1]).intersects(Pos([-3,-2]))
|
|
213
|
-
False
|
|
214
|
-
|
|
215
|
-
:param other: feature with which to compare
|
|
216
|
-
:type other: (subclass of) Feature
|
|
217
|
-
:return: True if feature classes agree and there is some overlap in the positions they look at
|
|
218
|
-
:rtype: bool
|
|
219
|
-
"""
|
|
220
|
-
|
|
221
|
-
return bool((self.__class__ is other.__class__ and set(self.positions) & set(other.positions)))
|
|
222
|
-
|
|
223
|
-
# Rich comparisons for Features. With @functools.total_ordering (Python 2.7+),
|
|
224
|
-
# it will be enough to define __lt__ and __eq__
|
|
225
|
-
def __eq__(self, other):
|
|
226
|
-
return (self.__class__ is other.__class__ and self.positions == other.positions)
|
|
227
|
-
|
|
228
|
-
def __lt__(self, other):
|
|
229
|
-
return (
|
|
230
|
-
self.__class__.__name__ < other.__class__.__name__ or
|
|
231
|
-
# self.positions is a sorted tuple of ints
|
|
232
|
-
self.positions < other.positions
|
|
233
|
-
)
|
|
234
|
-
|
|
235
|
-
def __ne__(self, other):
|
|
236
|
-
return not (self == other)
|
|
237
|
-
|
|
238
|
-
def __gt__(self, other):
|
|
239
|
-
return other < self
|
|
240
|
-
|
|
241
|
-
def __ge__(self, other):
|
|
242
|
-
return not self < other
|
|
243
|
-
|
|
244
|
-
def __le__(self, other):
|
|
245
|
-
return self < other or self == other
|
|
246
|
-
|
|
247
|
-
@staticmethod
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
:
|
|
254
|
-
:
|
|
255
|
-
:
|
|
256
|
-
:
|
|
257
|
-
:
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: Transformation-based learning
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
|
+
# Author: Marcus Uneson <marcus.uneson@gmail.com>
|
|
6
|
+
# based on previous (nltk2) version by
|
|
7
|
+
# Christopher Maloof, Edward Loper, Steven Bird
|
|
8
|
+
# URL: <http://nltk.org/>
|
|
9
|
+
# For license information, see LICENSE.TXT
|
|
10
|
+
|
|
11
|
+
from __future__ import division, print_function, unicode_literals
|
|
12
|
+
from abc import ABCMeta, abstractmethod
|
|
13
|
+
from six import add_metaclass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@add_metaclass(ABCMeta)
|
|
17
|
+
class Feature(object):
|
|
18
|
+
"""
|
|
19
|
+
An abstract base class for Features. A Feature is a combination of
|
|
20
|
+
a specific property-computing method and a list of relative positions
|
|
21
|
+
to apply that method to.
|
|
22
|
+
|
|
23
|
+
The property-computing method, M{extract_property(tokens, index)},
|
|
24
|
+
must be implemented by every subclass. It extracts or computes a specific
|
|
25
|
+
property for the token at the current index. Typical extract_property()
|
|
26
|
+
methods return features such as the token text or tag; but more involved
|
|
27
|
+
methods may consider the entire sequence M{tokens} and
|
|
28
|
+
for instance compute the length of the sentence the token belongs to.
|
|
29
|
+
|
|
30
|
+
In addition, the subclass may have a PROPERTY_NAME, which is how
|
|
31
|
+
it will be printed (in Rules and Templates, etc). If not given, defaults
|
|
32
|
+
to the classname.
|
|
33
|
+
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
json_tag = 'nltk.tbl.Feature'
|
|
37
|
+
PROPERTY_NAME = None
|
|
38
|
+
|
|
39
|
+
def __init__(self, positions, end=None):
|
|
40
|
+
"""
|
|
41
|
+
Construct a Feature which may apply at C{positions}.
|
|
42
|
+
|
|
43
|
+
#For instance, importing some concrete subclasses (Feature is abstract)
|
|
44
|
+
>>> from nltk.tag.brill import Word, Pos
|
|
45
|
+
|
|
46
|
+
#Feature Word, applying at one of [-2, -1]
|
|
47
|
+
>>> Word([-2,-1])
|
|
48
|
+
Word([-2, -1])
|
|
49
|
+
|
|
50
|
+
#Positions need not be contiguous
|
|
51
|
+
>>> Word([-2,-1, 1])
|
|
52
|
+
Word([-2, -1, 1])
|
|
53
|
+
|
|
54
|
+
#Contiguous ranges can alternatively be specified giving the
|
|
55
|
+
#two endpoints (inclusive)
|
|
56
|
+
>>> Pos(-3, -1)
|
|
57
|
+
Pos([-3, -2, -1])
|
|
58
|
+
|
|
59
|
+
#In two-arg form, start <= end is enforced
|
|
60
|
+
>>> Pos(2, 1)
|
|
61
|
+
Traceback (most recent call last):
|
|
62
|
+
File "<stdin>", line 1, in <module>
|
|
63
|
+
File "nltk/tbl/template.py", line 306, in __init__
|
|
64
|
+
raise TypeError
|
|
65
|
+
ValueError: illegal interval specification: (start=2, end=1)
|
|
66
|
+
|
|
67
|
+
:type positions: list of int
|
|
68
|
+
:param positions: the positions at which this features should apply
|
|
69
|
+
:raises ValueError: illegal position specifications
|
|
70
|
+
|
|
71
|
+
An alternative calling convention, for contiguous positions only,
|
|
72
|
+
is Feature(start, end):
|
|
73
|
+
|
|
74
|
+
:type start: int
|
|
75
|
+
:param start: start of range where this feature should apply
|
|
76
|
+
:type end: int
|
|
77
|
+
:param end: end of range (NOTE: inclusive!) where this feature should apply
|
|
78
|
+
|
|
79
|
+
"""
|
|
80
|
+
self.positions = None # to avoid warnings
|
|
81
|
+
if end is None:
|
|
82
|
+
self.positions = tuple(sorted(set([int(i) for i in positions])))
|
|
83
|
+
else: # positions was actually not a list, but only the start index
|
|
84
|
+
try:
|
|
85
|
+
if positions > end:
|
|
86
|
+
raise TypeError
|
|
87
|
+
self.positions = tuple(range(positions, end+1))
|
|
88
|
+
except TypeError:
|
|
89
|
+
# let any kind of erroneous spec raise ValueError
|
|
90
|
+
raise ValueError("illegal interval specification: (start={0}, end={1})".format(positions, end))
|
|
91
|
+
|
|
92
|
+
# set property name given in subclass, or otherwise name of subclass
|
|
93
|
+
self.PROPERTY_NAME = self.__class__.PROPERTY_NAME or self.__class__.__name__
|
|
94
|
+
|
|
95
|
+
def encode_json_obj(self):
|
|
96
|
+
return self.positions
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def decode_json_obj(cls, obj):
|
|
100
|
+
positions = obj
|
|
101
|
+
return cls(positions)
|
|
102
|
+
|
|
103
|
+
def __repr__(self):
|
|
104
|
+
return "%s(%r)" % (
|
|
105
|
+
self.__class__.__name__, list(self.positions))
|
|
106
|
+
|
|
107
|
+
@classmethod
|
|
108
|
+
def expand(cls, starts, winlens, excludezero=False):
|
|
109
|
+
"""
|
|
110
|
+
Return a list of features, one for each start point in starts
|
|
111
|
+
and for each window length in winlen. If excludezero is True,
|
|
112
|
+
no Features containing 0 in its positions will be generated
|
|
113
|
+
(many tbl trainers have a special representation for the
|
|
114
|
+
target feature at [0])
|
|
115
|
+
|
|
116
|
+
For instance, importing a concrete subclass (Feature is abstract)
|
|
117
|
+
>>> from nltk.tag.brill import Word
|
|
118
|
+
|
|
119
|
+
First argument gives the possible start positions, second the
|
|
120
|
+
possible window lengths
|
|
121
|
+
>>> Word.expand([-3,-2,-1], [1])
|
|
122
|
+
[Word([-3]), Word([-2]), Word([-1])]
|
|
123
|
+
|
|
124
|
+
>>> Word.expand([-2,-1], [1])
|
|
125
|
+
[Word([-2]), Word([-1])]
|
|
126
|
+
|
|
127
|
+
>>> Word.expand([-3,-2,-1], [1,2])
|
|
128
|
+
[Word([-3]), Word([-2]), Word([-1]), Word([-3, -2]), Word([-2, -1])]
|
|
129
|
+
|
|
130
|
+
>>> Word.expand([-2,-1], [1])
|
|
131
|
+
[Word([-2]), Word([-1])]
|
|
132
|
+
|
|
133
|
+
a third optional argument excludes all Features whose positions contain zero
|
|
134
|
+
>>> Word.expand([-2,-1,0], [1,2], excludezero=False)
|
|
135
|
+
[Word([-2]), Word([-1]), Word([0]), Word([-2, -1]), Word([-1, 0])]
|
|
136
|
+
|
|
137
|
+
>>> Word.expand([-2,-1,0], [1,2], excludezero=True)
|
|
138
|
+
[Word([-2]), Word([-1]), Word([-2, -1])]
|
|
139
|
+
|
|
140
|
+
All window lengths must be positive
|
|
141
|
+
>>> Word.expand([-2,-1], [0])
|
|
142
|
+
Traceback (most recent call last):
|
|
143
|
+
File "<stdin>", line 1, in <module>
|
|
144
|
+
File "nltk/tag/tbl/template.py", line 371, in expand
|
|
145
|
+
:param starts: where to start looking for Feature
|
|
146
|
+
ValueError: non-positive window length in [0]
|
|
147
|
+
|
|
148
|
+
:param starts: where to start looking for Feature
|
|
149
|
+
:type starts: list of ints
|
|
150
|
+
:param winlens: window lengths where to look for Feature
|
|
151
|
+
:type starts: list of ints
|
|
152
|
+
:param excludezero: do not output any Feature with 0 in any of its positions.
|
|
153
|
+
:type excludezero: bool
|
|
154
|
+
:returns: list of Features
|
|
155
|
+
:raises ValueError: for non-positive window lengths
|
|
156
|
+
"""
|
|
157
|
+
if not all(x > 0 for x in winlens):
|
|
158
|
+
raise ValueError("non-positive window length in {0}".format(winlens))
|
|
159
|
+
xs = (starts[i:i+w] for w in winlens for i in range(len(starts)-w+1))
|
|
160
|
+
return [cls(x) for x in xs if not (excludezero and 0 in x)]
|
|
161
|
+
|
|
162
|
+
def issuperset(self, other):
|
|
163
|
+
"""
|
|
164
|
+
Return True if this Feature always returns True when other does
|
|
165
|
+
|
|
166
|
+
More precisely, return True if this feature refers to the same property as other;
|
|
167
|
+
and this Feature looks at all positions that other does (and possibly
|
|
168
|
+
other positions in addition).
|
|
169
|
+
|
|
170
|
+
#For instance, importing a concrete subclass (Feature is abstract)
|
|
171
|
+
>>> from nltk.tag.brill import Word, Pos
|
|
172
|
+
|
|
173
|
+
>>> Word([-3,-2,-1]).issuperset(Word([-3,-2]))
|
|
174
|
+
True
|
|
175
|
+
|
|
176
|
+
>>> Word([-3,-2,-1]).issuperset(Word([-3,-2, 0]))
|
|
177
|
+
False
|
|
178
|
+
|
|
179
|
+
#Feature subclasses must agree
|
|
180
|
+
>>> Word([-3,-2,-1]).issuperset(Pos([-3,-2]))
|
|
181
|
+
False
|
|
182
|
+
|
|
183
|
+
:param other: feature with which to compare
|
|
184
|
+
:type other: (subclass of) Feature
|
|
185
|
+
:return: True if this feature is superset, otherwise False
|
|
186
|
+
:rtype: bool
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
"""
|
|
190
|
+
return self.__class__ is other.__class__ and set(self.positions) >= set(other.positions)
|
|
191
|
+
|
|
192
|
+
def intersects(self, other):
|
|
193
|
+
"""
|
|
194
|
+
Return True if the positions of this Feature intersects with those of other
|
|
195
|
+
|
|
196
|
+
More precisely, return True if this feature refers to the same property as other;
|
|
197
|
+
and there is some overlap in the positions they look at.
|
|
198
|
+
|
|
199
|
+
#For instance, importing a concrete subclass (Feature is abstract)
|
|
200
|
+
>>> from nltk.tag.brill import Word, Pos
|
|
201
|
+
|
|
202
|
+
>>> Word([-3,-2,-1]).intersects(Word([-3,-2]))
|
|
203
|
+
True
|
|
204
|
+
|
|
205
|
+
>>> Word([-3,-2,-1]).intersects(Word([-3,-2, 0]))
|
|
206
|
+
True
|
|
207
|
+
|
|
208
|
+
>>> Word([-3,-2,-1]).intersects(Word([0]))
|
|
209
|
+
False
|
|
210
|
+
|
|
211
|
+
#Feature subclasses must agree
|
|
212
|
+
>>> Word([-3,-2,-1]).intersects(Pos([-3,-2]))
|
|
213
|
+
False
|
|
214
|
+
|
|
215
|
+
:param other: feature with which to compare
|
|
216
|
+
:type other: (subclass of) Feature
|
|
217
|
+
:return: True if feature classes agree and there is some overlap in the positions they look at
|
|
218
|
+
:rtype: bool
|
|
219
|
+
"""
|
|
220
|
+
|
|
221
|
+
return bool((self.__class__ is other.__class__ and set(self.positions) & set(other.positions)))
|
|
222
|
+
|
|
223
|
+
# Rich comparisons for Features. With @functools.total_ordering (Python 2.7+),
|
|
224
|
+
# it will be enough to define __lt__ and __eq__
|
|
225
|
+
def __eq__(self, other):
|
|
226
|
+
return (self.__class__ is other.__class__ and self.positions == other.positions)
|
|
227
|
+
|
|
228
|
+
def __lt__(self, other):
|
|
229
|
+
return (
|
|
230
|
+
self.__class__.__name__ < other.__class__.__name__ or
|
|
231
|
+
# self.positions is a sorted tuple of ints
|
|
232
|
+
self.positions < other.positions
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
def __ne__(self, other):
|
|
236
|
+
return not (self == other)
|
|
237
|
+
|
|
238
|
+
def __gt__(self, other):
|
|
239
|
+
return other < self
|
|
240
|
+
|
|
241
|
+
def __ge__(self, other):
|
|
242
|
+
return not self < other
|
|
243
|
+
|
|
244
|
+
def __le__(self, other):
|
|
245
|
+
return self < other or self == other
|
|
246
|
+
|
|
247
|
+
@staticmethod
|
|
248
|
+
@abstractmethod
|
|
249
|
+
def extract_property(tokens, index):
|
|
250
|
+
"""
|
|
251
|
+
Any subclass of Feature must define static method extract_property(tokens, index)
|
|
252
|
+
|
|
253
|
+
:param tokens: the sequence of tokens
|
|
254
|
+
:type tokens: list of tokens
|
|
255
|
+
:param index: the current index
|
|
256
|
+
:type index: int
|
|
257
|
+
:return: feature value
|
|
258
|
+
:rtype: any (but usually scalar)
|
|
259
|
+
"""
|