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,232 +1,231 @@
|
|
|
1
|
-
# Natural Language Toolkit: Text Segmentation Metrics
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
-
# Steven Bird <stevenbird1@gmail.com>
|
|
6
|
-
# David Doukhan <david.doukhan@gmail.com>
|
|
7
|
-
# URL: <http://nltk.org/>
|
|
8
|
-
# For license information, see LICENSE.TXT
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"""
|
|
13
|
-
Text Segmentation Metrics
|
|
14
|
-
|
|
15
|
-
1. Windowdiff
|
|
16
|
-
|
|
17
|
-
Pevzner, L., and Hearst, M., A Critique and Improvement of
|
|
18
|
-
an Evaluation Metric for Text Segmentation,
|
|
19
|
-
Computational Linguistics 28, 19-36
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
2. Generalized Hamming Distance
|
|
23
|
-
|
|
24
|
-
Bookstein A., Kulyukin V.A., Raita T.
|
|
25
|
-
Generalized Hamming Distance
|
|
26
|
-
Information Retrieval 5, 2002, pp 353-375
|
|
27
|
-
|
|
28
|
-
Baseline implementation in C++
|
|
29
|
-
http://digital.cs.usu.edu/~vkulyukin/vkweb/software/ghd/ghd.html
|
|
30
|
-
|
|
31
|
-
Study describing benefits of Generalized Hamming Distance Versus
|
|
32
|
-
WindowDiff for evaluating text segmentation tasks
|
|
33
|
-
Begsten, Y. Quel indice pour mesurer l'efficacite en segmentation de textes ?
|
|
34
|
-
TALN 2009
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
3. Pk text segmentation metric
|
|
38
|
-
|
|
39
|
-
Beeferman D., Berger A., Lafferty J. (1999)
|
|
40
|
-
Statistical Models for Text Segmentation
|
|
41
|
-
Machine Learning, 34, 177-210
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
try:
|
|
45
|
-
import numpy as np
|
|
46
|
-
except ImportError:
|
|
47
|
-
pass
|
|
48
|
-
|
|
49
|
-
from
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
>>>
|
|
60
|
-
>>>
|
|
61
|
-
>>>
|
|
62
|
-
'
|
|
63
|
-
|
|
64
|
-
'
|
|
65
|
-
|
|
66
|
-
'
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
73
|
-
:
|
|
74
|
-
:
|
|
75
|
-
:
|
|
76
|
-
:
|
|
77
|
-
:
|
|
78
|
-
:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
mat
|
|
101
|
-
mat[
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
>>>
|
|
138
|
-
0.5
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
1.0
|
|
143
|
-
|
|
144
|
-
1.0
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
:
|
|
152
|
-
:
|
|
153
|
-
:
|
|
154
|
-
:
|
|
155
|
-
:
|
|
156
|
-
:
|
|
157
|
-
:
|
|
158
|
-
:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
:
|
|
163
|
-
:
|
|
164
|
-
:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
'
|
|
196
|
-
|
|
197
|
-
'0
|
|
198
|
-
|
|
199
|
-
'
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
:
|
|
203
|
-
:
|
|
204
|
-
:
|
|
205
|
-
:
|
|
206
|
-
:
|
|
207
|
-
:
|
|
208
|
-
:
|
|
209
|
-
:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
1
|
+
# Natural Language Toolkit: Text Segmentation Metrics
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
+
# Steven Bird <stevenbird1@gmail.com>
|
|
6
|
+
# David Doukhan <david.doukhan@gmail.com>
|
|
7
|
+
# URL: <http://nltk.org/>
|
|
8
|
+
# For license information, see LICENSE.TXT
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
Text Segmentation Metrics
|
|
14
|
+
|
|
15
|
+
1. Windowdiff
|
|
16
|
+
|
|
17
|
+
Pevzner, L., and Hearst, M., A Critique and Improvement of
|
|
18
|
+
an Evaluation Metric for Text Segmentation,
|
|
19
|
+
Computational Linguistics 28, 19-36
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
2. Generalized Hamming Distance
|
|
23
|
+
|
|
24
|
+
Bookstein A., Kulyukin V.A., Raita T.
|
|
25
|
+
Generalized Hamming Distance
|
|
26
|
+
Information Retrieval 5, 2002, pp 353-375
|
|
27
|
+
|
|
28
|
+
Baseline implementation in C++
|
|
29
|
+
http://digital.cs.usu.edu/~vkulyukin/vkweb/software/ghd/ghd.html
|
|
30
|
+
|
|
31
|
+
Study describing benefits of Generalized Hamming Distance Versus
|
|
32
|
+
WindowDiff for evaluating text segmentation tasks
|
|
33
|
+
Begsten, Y. Quel indice pour mesurer l'efficacite en segmentation de textes ?
|
|
34
|
+
TALN 2009
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
3. Pk text segmentation metric
|
|
38
|
+
|
|
39
|
+
Beeferman D., Berger A., Lafferty J. (1999)
|
|
40
|
+
Statistical Models for Text Segmentation
|
|
41
|
+
Machine Learning, 34, 177-210
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
import numpy as np
|
|
46
|
+
except ImportError:
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
from six.moves import range
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def windowdiff(seg1, seg2, k, boundary="1", weighted=False):
|
|
53
|
+
"""
|
|
54
|
+
Compute the windowdiff score for a pair of segmentations. A
|
|
55
|
+
segmentation is any sequence over a vocabulary of two items
|
|
56
|
+
(e.g. "0", "1"), where the specified boundary value is used to
|
|
57
|
+
mark the edge of a segmentation.
|
|
58
|
+
|
|
59
|
+
>>> s1 = "000100000010"
|
|
60
|
+
>>> s2 = "000010000100"
|
|
61
|
+
>>> s3 = "100000010000"
|
|
62
|
+
>>> '%.2f' % windowdiff(s1, s1, 3)
|
|
63
|
+
'0.00'
|
|
64
|
+
>>> '%.2f' % windowdiff(s1, s2, 3)
|
|
65
|
+
'0.30'
|
|
66
|
+
>>> '%.2f' % windowdiff(s2, s3, 3)
|
|
67
|
+
'0.80'
|
|
68
|
+
|
|
69
|
+
:param seg1: a segmentation
|
|
70
|
+
:type seg1: str or list
|
|
71
|
+
:param seg2: a segmentation
|
|
72
|
+
:type seg2: str or list
|
|
73
|
+
:param k: window width
|
|
74
|
+
:type k: int
|
|
75
|
+
:param boundary: boundary value
|
|
76
|
+
:type boundary: str or int or bool
|
|
77
|
+
:param weighted: use the weighted variant of windowdiff
|
|
78
|
+
:type weighted: boolean
|
|
79
|
+
:rtype: float
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
if len(seg1) != len(seg2):
|
|
83
|
+
raise ValueError("Segmentations have unequal length")
|
|
84
|
+
if k > len(seg1):
|
|
85
|
+
raise ValueError("Window width k should be smaller or equal than segmentation lengths")
|
|
86
|
+
wd = 0
|
|
87
|
+
for i in range(len(seg1) - k + 1):
|
|
88
|
+
ndiff = abs(seg1[i:i+k].count(boundary) - seg2[i:i+k].count(boundary))
|
|
89
|
+
if weighted:
|
|
90
|
+
wd += ndiff
|
|
91
|
+
else:
|
|
92
|
+
wd += min(1, ndiff)
|
|
93
|
+
return wd / (len(seg1) - k + 1.)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# Generalized Hamming Distance
|
|
98
|
+
|
|
99
|
+
def _init_mat(nrows, ncols, ins_cost, del_cost):
|
|
100
|
+
mat = np.empty((nrows, ncols))
|
|
101
|
+
mat[0, :] = ins_cost * np.arange(ncols)
|
|
102
|
+
mat[:, 0] = del_cost * np.arange(nrows)
|
|
103
|
+
return mat
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _ghd_aux(mat, rowv, colv, ins_cost, del_cost, shift_cost_coeff):
|
|
107
|
+
for i, rowi in enumerate(rowv):
|
|
108
|
+
for j, colj in enumerate(colv):
|
|
109
|
+
shift_cost = shift_cost_coeff * abs(rowi - colj) + mat[i, j]
|
|
110
|
+
if rowi == colj:
|
|
111
|
+
# boundaries are at the same location, no transformation required
|
|
112
|
+
tcost = mat[i, j]
|
|
113
|
+
elif rowi > colj:
|
|
114
|
+
# boundary match through a deletion
|
|
115
|
+
tcost = del_cost + mat[i, j + 1]
|
|
116
|
+
else:
|
|
117
|
+
# boundary match through an insertion
|
|
118
|
+
tcost = ins_cost + mat[i + 1, j]
|
|
119
|
+
mat[i + 1, j + 1] = min(tcost, shift_cost)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def ghd(ref, hyp, ins_cost=2.0, del_cost=2.0, shift_cost_coeff=1.0, boundary='1'):
|
|
123
|
+
"""
|
|
124
|
+
Compute the Generalized Hamming Distance for a reference and a hypothetical
|
|
125
|
+
segmentation, corresponding to the cost related to the transformation
|
|
126
|
+
of the hypothetical segmentation into the reference segmentation
|
|
127
|
+
through boundary insertion, deletion and shift operations.
|
|
128
|
+
|
|
129
|
+
A segmentation is any sequence over a vocabulary of two items
|
|
130
|
+
(e.g. "0", "1"), where the specified boundary value is used to
|
|
131
|
+
mark the edge of a segmentation.
|
|
132
|
+
|
|
133
|
+
Recommended parameter values are a shift_cost_coeff of 2.
|
|
134
|
+
Associated with a ins_cost, and del_cost equal to the mean segment
|
|
135
|
+
length in the reference segmentation.
|
|
136
|
+
|
|
137
|
+
>>> # Same examples as Kulyukin C++ implementation
|
|
138
|
+
>>> ghd('1100100000', '1100010000', 1.0, 1.0, 0.5)
|
|
139
|
+
0.5
|
|
140
|
+
>>> ghd('1100100000', '1100000001', 1.0, 1.0, 0.5)
|
|
141
|
+
2.0
|
|
142
|
+
>>> ghd('011', '110', 1.0, 1.0, 0.5)
|
|
143
|
+
1.0
|
|
144
|
+
>>> ghd('1', '0', 1.0, 1.0, 0.5)
|
|
145
|
+
1.0
|
|
146
|
+
>>> ghd('111', '000', 1.0, 1.0, 0.5)
|
|
147
|
+
3.0
|
|
148
|
+
>>> ghd('000', '111', 1.0, 2.0, 0.5)
|
|
149
|
+
6.0
|
|
150
|
+
|
|
151
|
+
:param ref: the reference segmentation
|
|
152
|
+
:type ref: str or list
|
|
153
|
+
:param hyp: the hypothetical segmentation
|
|
154
|
+
:type hyp: str or list
|
|
155
|
+
:param ins_cost: insertion cost
|
|
156
|
+
:type ins_cost: float
|
|
157
|
+
:param del_cost: deletion cost
|
|
158
|
+
:type del_cost: float
|
|
159
|
+
:param shift_cost_coeff: constant used to compute the cost of a shift.
|
|
160
|
+
shift cost = shift_cost_coeff * |i - j| where i and j are
|
|
161
|
+
the positions indicating the shift
|
|
162
|
+
:type shift_cost_coeff: float
|
|
163
|
+
:param boundary: boundary value
|
|
164
|
+
:type boundary: str or int or bool
|
|
165
|
+
:rtype: float
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
ref_idx = [i for (i, val) in enumerate(ref) if val == boundary]
|
|
169
|
+
hyp_idx = [i for (i, val) in enumerate(hyp) if val == boundary]
|
|
170
|
+
|
|
171
|
+
nref_bound = len(ref_idx)
|
|
172
|
+
nhyp_bound = len(hyp_idx)
|
|
173
|
+
|
|
174
|
+
if nref_bound == 0 and nhyp_bound == 0:
|
|
175
|
+
return 0.0
|
|
176
|
+
elif nref_bound > 0 and nhyp_bound == 0:
|
|
177
|
+
return nref_bound * ins_cost
|
|
178
|
+
elif nref_bound == 0 and nhyp_bound > 0:
|
|
179
|
+
return nhyp_bound * del_cost
|
|
180
|
+
|
|
181
|
+
mat = _init_mat(nhyp_bound + 1, nref_bound + 1, ins_cost, del_cost)
|
|
182
|
+
_ghd_aux(mat, hyp_idx, ref_idx, ins_cost, del_cost, shift_cost_coeff)
|
|
183
|
+
return mat[-1, -1]
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
# Beeferman's Pk text segmentation evaluation metric
|
|
187
|
+
|
|
188
|
+
def pk(ref, hyp, k=None, boundary='1'):
|
|
189
|
+
"""
|
|
190
|
+
Compute the Pk metric for a pair of segmentations A segmentation
|
|
191
|
+
is any sequence over a vocabulary of two items (e.g. "0", "1"),
|
|
192
|
+
where the specified boundary value is used to mark the edge of a
|
|
193
|
+
segmentation.
|
|
194
|
+
|
|
195
|
+
>>> '%.2f' % pk('0100'*100, '1'*400, 2)
|
|
196
|
+
'0.50'
|
|
197
|
+
>>> '%.2f' % pk('0100'*100, '0'*400, 2)
|
|
198
|
+
'0.50'
|
|
199
|
+
>>> '%.2f' % pk('0100'*100, '0100'*100, 2)
|
|
200
|
+
'0.00'
|
|
201
|
+
|
|
202
|
+
:param ref: the reference segmentation
|
|
203
|
+
:type ref: str or list
|
|
204
|
+
:param hyp: the segmentation to evaluate
|
|
205
|
+
:type hyp: str or list
|
|
206
|
+
:param k: window size, if None, set to half of the average reference segment length
|
|
207
|
+
:type boundary: str or int or bool
|
|
208
|
+
:param boundary: boundary value
|
|
209
|
+
:type boundary: str or int or bool
|
|
210
|
+
:rtype: float
|
|
211
|
+
"""
|
|
212
|
+
|
|
213
|
+
if k is None:
|
|
214
|
+
k = int(round(len(ref) / (ref.count(boundary) * 2.)))
|
|
215
|
+
|
|
216
|
+
err = 0
|
|
217
|
+
for i in range(len(ref)-k +1):
|
|
218
|
+
r = ref[i:i+k].count(boundary) > 0
|
|
219
|
+
h = hyp[i:i+k].count(boundary) > 0
|
|
220
|
+
if r != h:
|
|
221
|
+
err += 1
|
|
222
|
+
return err / (len(ref)-k +1.)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# skip doctests if numpy is not installed
|
|
226
|
+
def setup_module(module):
|
|
227
|
+
from nose import SkipTest
|
|
228
|
+
try:
|
|
229
|
+
import numpy
|
|
230
|
+
except ImportError:
|
|
231
|
+
raise SkipTest("numpy is required for nltk.metrics.segmentation")
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# Natural Language Toolkit: Spearman Rank Correlation
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Joel Nothman <jnothman@student.usyd.edu.au>
|
|
5
|
-
# URL: <http://nltk.org>
|
|
6
|
-
# For license information, see LICENSE.TXT
|
|
7
|
-
from __future__ import division
|
|
8
|
-
|
|
9
|
-
"""
|
|
10
|
-
Tools for comparing ranked lists.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
def _rank_dists(ranks1, ranks2):
|
|
14
|
-
"""Finds the difference between the values in ranks1 and ranks2 for keys
|
|
15
|
-
present in both dicts. If the arguments are not dicts, they are converted
|
|
16
|
-
from (key, rank) sequences.
|
|
17
|
-
"""
|
|
18
|
-
ranks1 = dict(ranks1)
|
|
19
|
-
ranks2 = dict(ranks2)
|
|
20
|
-
for k in ranks1:
|
|
21
|
-
try:
|
|
22
|
-
yield k, ranks1[k] - ranks2[k]
|
|
23
|
-
except KeyError:
|
|
24
|
-
pass
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def spearman_correlation(ranks1, ranks2):
|
|
28
|
-
"""Returns the Spearman correlation coefficient for two rankings, which
|
|
29
|
-
should be dicts or sequences of (key, rank). The coefficient ranges from
|
|
30
|
-
-1.0 (ranks are opposite) to 1.0 (ranks are identical), and is only
|
|
31
|
-
calculated for keys in both rankings (for meaningful results, remove keys
|
|
32
|
-
present in only one list before ranking)."""
|
|
33
|
-
n = 0
|
|
34
|
-
res = 0
|
|
35
|
-
for k, d in _rank_dists(ranks1, ranks2):
|
|
36
|
-
res += d * d
|
|
37
|
-
n += 1
|
|
38
|
-
try:
|
|
39
|
-
return 1 - (6 * res / (n * (n*n - 1)))
|
|
40
|
-
except ZeroDivisionError:
|
|
41
|
-
# Result is undefined if only one item is ranked
|
|
42
|
-
return 0.0
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def ranks_from_sequence(seq):
|
|
46
|
-
"""Given a sequence, yields each element with an increasing rank, suitable
|
|
47
|
-
for use as an argument to ``spearman_correlation``.
|
|
48
|
-
"""
|
|
49
|
-
return ((k, i) for i, k in enumerate(seq))
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def ranks_from_scores(scores, rank_gap=1e-15):
|
|
53
|
-
"""Given a sequence of (key, score) tuples, yields each key with an
|
|
54
|
-
increasing rank, tying with previous key's rank if the difference between
|
|
55
|
-
their scores is less than rank_gap. Suitable for use as an argument to
|
|
56
|
-
``spearman_correlation``.
|
|
57
|
-
"""
|
|
58
|
-
prev_score = None
|
|
59
|
-
rank = 0
|
|
60
|
-
for i, (key, score) in enumerate(scores):
|
|
61
|
-
try:
|
|
62
|
-
if abs(score - prev_score) > rank_gap:
|
|
63
|
-
rank = i
|
|
64
|
-
except TypeError:
|
|
65
|
-
pass
|
|
66
|
-
|
|
67
|
-
yield key, rank
|
|
68
|
-
prev_score = score
|
|
69
|
-
|
|
1
|
+
# Natural Language Toolkit: Spearman Rank Correlation
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Joel Nothman <jnothman@student.usyd.edu.au>
|
|
5
|
+
# URL: <http://nltk.org>
|
|
6
|
+
# For license information, see LICENSE.TXT
|
|
7
|
+
from __future__ import division
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Tools for comparing ranked lists.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def _rank_dists(ranks1, ranks2):
|
|
14
|
+
"""Finds the difference between the values in ranks1 and ranks2 for keys
|
|
15
|
+
present in both dicts. If the arguments are not dicts, they are converted
|
|
16
|
+
from (key, rank) sequences.
|
|
17
|
+
"""
|
|
18
|
+
ranks1 = dict(ranks1)
|
|
19
|
+
ranks2 = dict(ranks2)
|
|
20
|
+
for k in ranks1:
|
|
21
|
+
try:
|
|
22
|
+
yield k, ranks1[k] - ranks2[k]
|
|
23
|
+
except KeyError:
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def spearman_correlation(ranks1, ranks2):
|
|
28
|
+
"""Returns the Spearman correlation coefficient for two rankings, which
|
|
29
|
+
should be dicts or sequences of (key, rank). The coefficient ranges from
|
|
30
|
+
-1.0 (ranks are opposite) to 1.0 (ranks are identical), and is only
|
|
31
|
+
calculated for keys in both rankings (for meaningful results, remove keys
|
|
32
|
+
present in only one list before ranking)."""
|
|
33
|
+
n = 0
|
|
34
|
+
res = 0
|
|
35
|
+
for k, d in _rank_dists(ranks1, ranks2):
|
|
36
|
+
res += d * d
|
|
37
|
+
n += 1
|
|
38
|
+
try:
|
|
39
|
+
return 1 - (6 * res / (n * (n*n - 1)))
|
|
40
|
+
except ZeroDivisionError:
|
|
41
|
+
# Result is undefined if only one item is ranked
|
|
42
|
+
return 0.0
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def ranks_from_sequence(seq):
|
|
46
|
+
"""Given a sequence, yields each element with an increasing rank, suitable
|
|
47
|
+
for use as an argument to ``spearman_correlation``.
|
|
48
|
+
"""
|
|
49
|
+
return ((k, i) for i, k in enumerate(seq))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def ranks_from_scores(scores, rank_gap=1e-15):
|
|
53
|
+
"""Given a sequence of (key, score) tuples, yields each key with an
|
|
54
|
+
increasing rank, tying with previous key's rank if the difference between
|
|
55
|
+
their scores is less than rank_gap. Suitable for use as an argument to
|
|
56
|
+
``spearman_correlation``.
|
|
57
|
+
"""
|
|
58
|
+
prev_score = None
|
|
59
|
+
rank = 0
|
|
60
|
+
for i, (key, score) in enumerate(scores):
|
|
61
|
+
try:
|
|
62
|
+
if abs(score - prev_score) > rank_gap:
|
|
63
|
+
rank = i
|
|
64
|
+
except TypeError:
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
yield key, rank
|
|
68
|
+
prev_score = score
|
|
69
|
+
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Natural Language Toolkit: Miscellaneous modules
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
-
# URL: <http://nltk.org/>
|
|
6
|
-
# For license information, see LICENSE.TXT
|
|
7
|
-
|
|
8
|
-
from nltk.misc.chomsky import generate_chomsky
|
|
9
|
-
from nltk.misc.wordfinder import word_finder
|
|
10
|
-
from nltk.misc.minimalset import MinimalSet
|
|
11
|
-
from nltk.misc.babelfish import babelize_shell
|
|
1
|
+
# Natural Language Toolkit: Miscellaneous modules
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
5
|
+
# URL: <http://nltk.org/>
|
|
6
|
+
# For license information, see LICENSE.TXT
|
|
7
|
+
|
|
8
|
+
from nltk.misc.chomsky import generate_chomsky
|
|
9
|
+
from nltk.misc.wordfinder import word_finder
|
|
10
|
+
from nltk.misc.minimalset import MinimalSet
|
|
11
|
+
from nltk.misc.babelfish import babelize_shell
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module previously provided an interface to Babelfish online
|
|
3
|
-
translation service; this service is no longer available; this
|
|
4
|
-
module is kept in NLTK source code in order to provide better error
|
|
5
|
-
messages for people following the NLTK Book 2.0.
|
|
6
|
-
"""
|
|
7
|
-
from __future__ import print_function
|
|
8
|
-
|
|
9
|
-
def babelize_shell():
|
|
10
|
-
print("Babelfish online translation service is no longer available.")
|
|
1
|
+
"""
|
|
2
|
+
This module previously provided an interface to Babelfish online
|
|
3
|
+
translation service; this service is no longer available; this
|
|
4
|
+
module is kept in NLTK source code in order to provide better error
|
|
5
|
+
messages for people following the NLTK Book 2.0.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import print_function
|
|
8
|
+
|
|
9
|
+
def babelize_shell():
|
|
10
|
+
print("Babelfish online translation service is no longer available.")
|