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,157 +1,157 @@
|
|
|
1
|
-
# Natural Language Toolkit: List Sorting
|
|
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
|
-
"""
|
|
9
|
-
This module provides a variety of list sorting algorithms, to
|
|
10
|
-
illustrate the many different algorithms (recipes) for solving a
|
|
11
|
-
problem, and how to analyze algorithms experimentally.
|
|
12
|
-
"""
|
|
13
|
-
from __future__ import print_function, division
|
|
14
|
-
|
|
15
|
-
# These algorithms are taken from:
|
|
16
|
-
# Levitin (2004) The Design and Analysis of Algorithms
|
|
17
|
-
|
|
18
|
-
##################################################################
|
|
19
|
-
# Selection Sort
|
|
20
|
-
##################################################################
|
|
21
|
-
|
|
22
|
-
def selection(a):
|
|
23
|
-
"""
|
|
24
|
-
Selection Sort: scan the list to find its smallest element, then
|
|
25
|
-
swap it with the first element. The remainder of the list is one
|
|
26
|
-
element smaller; apply the same method to this list, and so on.
|
|
27
|
-
"""
|
|
28
|
-
count = 0
|
|
29
|
-
|
|
30
|
-
for i in range(len(a) - 1):
|
|
31
|
-
min = i
|
|
32
|
-
|
|
33
|
-
for j in range(i+1, len(a)):
|
|
34
|
-
if a[j] < a[min]:
|
|
35
|
-
min = j
|
|
36
|
-
|
|
37
|
-
count += 1
|
|
38
|
-
|
|
39
|
-
a[min],a[i] = a[i],a[min]
|
|
40
|
-
|
|
41
|
-
return count
|
|
42
|
-
|
|
43
|
-
##################################################################
|
|
44
|
-
# Bubble Sort
|
|
45
|
-
##################################################################
|
|
46
|
-
|
|
47
|
-
def bubble(a):
|
|
48
|
-
"""
|
|
49
|
-
Bubble Sort: compare adjacent elements of the list left-to-right,
|
|
50
|
-
and swap them if they are out of order. After one pass through
|
|
51
|
-
the list swapping adjacent items, the largest item will be in
|
|
52
|
-
the rightmost position. The remainder is one element smaller;
|
|
53
|
-
apply the same method to this list, and so on.
|
|
54
|
-
"""
|
|
55
|
-
count = 0
|
|
56
|
-
for i in range(len(a)-1):
|
|
57
|
-
for j in range(len(a)-i-1):
|
|
58
|
-
if a[j+1] < a[j]:
|
|
59
|
-
a[j],a[j+1] = a[j+1],a[j]
|
|
60
|
-
count += 1
|
|
61
|
-
return count
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
##################################################################
|
|
65
|
-
# Merge Sort
|
|
66
|
-
##################################################################
|
|
67
|
-
|
|
68
|
-
def _merge_lists(b, c):
|
|
69
|
-
count = 0
|
|
70
|
-
i = j = 0
|
|
71
|
-
a = []
|
|
72
|
-
while (i < len(b) and j < len(c)):
|
|
73
|
-
count += 1
|
|
74
|
-
if b[i] <= c[j]:
|
|
75
|
-
a.append(b[i])
|
|
76
|
-
i += 1
|
|
77
|
-
else:
|
|
78
|
-
a.append(c[j])
|
|
79
|
-
j += 1
|
|
80
|
-
if i == len(b):
|
|
81
|
-
a += c[j:]
|
|
82
|
-
else:
|
|
83
|
-
a += b[i:]
|
|
84
|
-
return a, count
|
|
85
|
-
|
|
86
|
-
def merge(a):
|
|
87
|
-
"""
|
|
88
|
-
Merge Sort: split the list in half, and sort each half, then
|
|
89
|
-
combine the sorted halves.
|
|
90
|
-
"""
|
|
91
|
-
count = 0
|
|
92
|
-
if len(a) > 1:
|
|
93
|
-
midpoint = len(a) // 2
|
|
94
|
-
b = a[:midpoint]
|
|
95
|
-
c = a[midpoint:]
|
|
96
|
-
count_b = merge(b)
|
|
97
|
-
count_c = merge(c)
|
|
98
|
-
result, count_a = _merge_lists(b, c)
|
|
99
|
-
a[:] = result # copy the result back into a.
|
|
100
|
-
count = count_a + count_b + count_c
|
|
101
|
-
return count
|
|
102
|
-
|
|
103
|
-
##################################################################
|
|
104
|
-
# Quick Sort
|
|
105
|
-
##################################################################
|
|
106
|
-
|
|
107
|
-
def _partition(a, l, r):
|
|
108
|
-
p = a[l]; i = l; j = r+1
|
|
109
|
-
count = 0
|
|
110
|
-
while True:
|
|
111
|
-
while i < r:
|
|
112
|
-
i += 1
|
|
113
|
-
if a[i] >= p: break
|
|
114
|
-
while j > l:
|
|
115
|
-
j -= 1
|
|
116
|
-
if j < l or a[j] <= p: break
|
|
117
|
-
a[i],a[j] = a[j],a[i] # swap
|
|
118
|
-
count += 1
|
|
119
|
-
if i >= j: break
|
|
120
|
-
a[i],a[j] = a[j],a[i] # undo last swap
|
|
121
|
-
a[l],a[j] = a[j],a[l]
|
|
122
|
-
return j, count
|
|
123
|
-
|
|
124
|
-
def _quick(a, l, r):
|
|
125
|
-
count = 0
|
|
126
|
-
if l<r:
|
|
127
|
-
s, count = _partition(a, l, r)
|
|
128
|
-
count += _quick(a, l, s-1)
|
|
129
|
-
count += _quick(a, s+1, r)
|
|
130
|
-
return count
|
|
131
|
-
|
|
132
|
-
def quick(a):
|
|
133
|
-
return _quick(a, 0, len(a)-1)
|
|
134
|
-
|
|
135
|
-
##################################################################
|
|
136
|
-
# Demonstration
|
|
137
|
-
##################################################################
|
|
138
|
-
|
|
139
|
-
def demo():
|
|
140
|
-
from random import shuffle
|
|
141
|
-
|
|
142
|
-
for size in (10, 20, 50, 100, 200, 500, 1000):
|
|
143
|
-
a = list(range(size))
|
|
144
|
-
|
|
145
|
-
# various sort methods
|
|
146
|
-
shuffle(a); count_selection = selection(a)
|
|
147
|
-
shuffle(a); count_bubble = bubble(a)
|
|
148
|
-
shuffle(a); count_merge = merge(a)
|
|
149
|
-
shuffle(a); count_quick = quick(a)
|
|
150
|
-
|
|
151
|
-
print((("size=%5d: selection=%8d, bubble=%8d, "
|
|
152
|
-
"merge=%6d, quick=%6d") %
|
|
153
|
-
(size, count_selection, count_bubble,
|
|
154
|
-
count_merge, count_quick)))
|
|
155
|
-
|
|
156
|
-
if __name__ == '__main__':
|
|
157
|
-
demo()
|
|
1
|
+
# Natural Language Toolkit: List Sorting
|
|
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
|
+
"""
|
|
9
|
+
This module provides a variety of list sorting algorithms, to
|
|
10
|
+
illustrate the many different algorithms (recipes) for solving a
|
|
11
|
+
problem, and how to analyze algorithms experimentally.
|
|
12
|
+
"""
|
|
13
|
+
from __future__ import print_function, division
|
|
14
|
+
|
|
15
|
+
# These algorithms are taken from:
|
|
16
|
+
# Levitin (2004) The Design and Analysis of Algorithms
|
|
17
|
+
|
|
18
|
+
##################################################################
|
|
19
|
+
# Selection Sort
|
|
20
|
+
##################################################################
|
|
21
|
+
|
|
22
|
+
def selection(a):
|
|
23
|
+
"""
|
|
24
|
+
Selection Sort: scan the list to find its smallest element, then
|
|
25
|
+
swap it with the first element. The remainder of the list is one
|
|
26
|
+
element smaller; apply the same method to this list, and so on.
|
|
27
|
+
"""
|
|
28
|
+
count = 0
|
|
29
|
+
|
|
30
|
+
for i in range(len(a) - 1):
|
|
31
|
+
min = i
|
|
32
|
+
|
|
33
|
+
for j in range(i+1, len(a)):
|
|
34
|
+
if a[j] < a[min]:
|
|
35
|
+
min = j
|
|
36
|
+
|
|
37
|
+
count += 1
|
|
38
|
+
|
|
39
|
+
a[min],a[i] = a[i],a[min]
|
|
40
|
+
|
|
41
|
+
return count
|
|
42
|
+
|
|
43
|
+
##################################################################
|
|
44
|
+
# Bubble Sort
|
|
45
|
+
##################################################################
|
|
46
|
+
|
|
47
|
+
def bubble(a):
|
|
48
|
+
"""
|
|
49
|
+
Bubble Sort: compare adjacent elements of the list left-to-right,
|
|
50
|
+
and swap them if they are out of order. After one pass through
|
|
51
|
+
the list swapping adjacent items, the largest item will be in
|
|
52
|
+
the rightmost position. The remainder is one element smaller;
|
|
53
|
+
apply the same method to this list, and so on.
|
|
54
|
+
"""
|
|
55
|
+
count = 0
|
|
56
|
+
for i in range(len(a)-1):
|
|
57
|
+
for j in range(len(a)-i-1):
|
|
58
|
+
if a[j+1] < a[j]:
|
|
59
|
+
a[j],a[j+1] = a[j+1],a[j]
|
|
60
|
+
count += 1
|
|
61
|
+
return count
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
##################################################################
|
|
65
|
+
# Merge Sort
|
|
66
|
+
##################################################################
|
|
67
|
+
|
|
68
|
+
def _merge_lists(b, c):
|
|
69
|
+
count = 0
|
|
70
|
+
i = j = 0
|
|
71
|
+
a = []
|
|
72
|
+
while (i < len(b) and j < len(c)):
|
|
73
|
+
count += 1
|
|
74
|
+
if b[i] <= c[j]:
|
|
75
|
+
a.append(b[i])
|
|
76
|
+
i += 1
|
|
77
|
+
else:
|
|
78
|
+
a.append(c[j])
|
|
79
|
+
j += 1
|
|
80
|
+
if i == len(b):
|
|
81
|
+
a += c[j:]
|
|
82
|
+
else:
|
|
83
|
+
a += b[i:]
|
|
84
|
+
return a, count
|
|
85
|
+
|
|
86
|
+
def merge(a):
|
|
87
|
+
"""
|
|
88
|
+
Merge Sort: split the list in half, and sort each half, then
|
|
89
|
+
combine the sorted halves.
|
|
90
|
+
"""
|
|
91
|
+
count = 0
|
|
92
|
+
if len(a) > 1:
|
|
93
|
+
midpoint = len(a) // 2
|
|
94
|
+
b = a[:midpoint]
|
|
95
|
+
c = a[midpoint:]
|
|
96
|
+
count_b = merge(b)
|
|
97
|
+
count_c = merge(c)
|
|
98
|
+
result, count_a = _merge_lists(b, c)
|
|
99
|
+
a[:] = result # copy the result back into a.
|
|
100
|
+
count = count_a + count_b + count_c
|
|
101
|
+
return count
|
|
102
|
+
|
|
103
|
+
##################################################################
|
|
104
|
+
# Quick Sort
|
|
105
|
+
##################################################################
|
|
106
|
+
|
|
107
|
+
def _partition(a, l, r):
|
|
108
|
+
p = a[l]; i = l; j = r+1
|
|
109
|
+
count = 0
|
|
110
|
+
while True:
|
|
111
|
+
while i < r:
|
|
112
|
+
i += 1
|
|
113
|
+
if a[i] >= p: break
|
|
114
|
+
while j > l:
|
|
115
|
+
j -= 1
|
|
116
|
+
if j < l or a[j] <= p: break
|
|
117
|
+
a[i],a[j] = a[j],a[i] # swap
|
|
118
|
+
count += 1
|
|
119
|
+
if i >= j: break
|
|
120
|
+
a[i],a[j] = a[j],a[i] # undo last swap
|
|
121
|
+
a[l],a[j] = a[j],a[l]
|
|
122
|
+
return j, count
|
|
123
|
+
|
|
124
|
+
def _quick(a, l, r):
|
|
125
|
+
count = 0
|
|
126
|
+
if l<r:
|
|
127
|
+
s, count = _partition(a, l, r)
|
|
128
|
+
count += _quick(a, l, s-1)
|
|
129
|
+
count += _quick(a, s+1, r)
|
|
130
|
+
return count
|
|
131
|
+
|
|
132
|
+
def quick(a):
|
|
133
|
+
return _quick(a, 0, len(a)-1)
|
|
134
|
+
|
|
135
|
+
##################################################################
|
|
136
|
+
# Demonstration
|
|
137
|
+
##################################################################
|
|
138
|
+
|
|
139
|
+
def demo():
|
|
140
|
+
from random import shuffle
|
|
141
|
+
|
|
142
|
+
for size in (10, 20, 50, 100, 200, 500, 1000):
|
|
143
|
+
a = list(range(size))
|
|
144
|
+
|
|
145
|
+
# various sort methods
|
|
146
|
+
shuffle(a); count_selection = selection(a)
|
|
147
|
+
shuffle(a); count_bubble = bubble(a)
|
|
148
|
+
shuffle(a); count_merge = merge(a)
|
|
149
|
+
shuffle(a); count_quick = quick(a)
|
|
150
|
+
|
|
151
|
+
print((("size=%5d: selection=%8d, bubble=%8d, "
|
|
152
|
+
"merge=%6d, quick=%6d") %
|
|
153
|
+
(size, count_selection, count_bubble,
|
|
154
|
+
count_merge, count_quick)))
|
|
155
|
+
|
|
156
|
+
if __name__ == '__main__':
|
|
157
|
+
demo()
|
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
# Natural Language Toolkit: Word Finder
|
|
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
|
-
# Simplified from PHP version by Robert Klein <brathna@gmail.com>
|
|
9
|
-
# http://fswordfinder.sourceforge.net/
|
|
10
|
-
from __future__ import print_function
|
|
11
|
-
|
|
12
|
-
import random
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# reverse a word with probability 0.5
|
|
16
|
-
def revword(word):
|
|
17
|
-
if random.randint(1,2) == 1:
|
|
18
|
-
return word[::-1]
|
|
19
|
-
return word
|
|
20
|
-
|
|
21
|
-
# try to insert word at position x,y; direction encoded in xf,yf
|
|
22
|
-
def step(word, x, xf, y, yf, grid):
|
|
23
|
-
for i in range(len(word)):
|
|
24
|
-
if grid[xf(i)][yf(i)] != "" and grid[xf(i)][yf(i)] != word[i]:
|
|
25
|
-
return False
|
|
26
|
-
for i in range(len(word)):
|
|
27
|
-
grid[xf(i)][yf(i)] = word[i]
|
|
28
|
-
return True
|
|
29
|
-
|
|
30
|
-
# try to insert word at position x,y, in direction dir
|
|
31
|
-
def check(word, dir, x, y, grid, rows, cols):
|
|
32
|
-
if dir==1:
|
|
33
|
-
if x-len(word)<0 or y-len(word)<0:
|
|
34
|
-
return False
|
|
35
|
-
return step(word, x, lambda i:x-i, y, lambda i:y-i, grid)
|
|
36
|
-
elif dir==2:
|
|
37
|
-
if x-len(word)<0:
|
|
38
|
-
return False
|
|
39
|
-
return step(word, x, lambda i:x-i, y, lambda i:y, grid)
|
|
40
|
-
elif dir==3:
|
|
41
|
-
if x-len(word)<0 or y+(len(word)-1)>=cols:
|
|
42
|
-
return False
|
|
43
|
-
return step(word, x, lambda i:x-i, y, lambda i:y+i, grid)
|
|
44
|
-
elif dir==4:
|
|
45
|
-
if y-len(word)<0:
|
|
46
|
-
return False
|
|
47
|
-
return step(word, x, lambda i:x, y, lambda i:y-i, grid)
|
|
48
|
-
|
|
49
|
-
def wordfinder(words, rows=20, cols=20, attempts=50,
|
|
50
|
-
alph='ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
|
|
51
|
-
"""
|
|
52
|
-
Attempt to arrange words into a letter-grid with the specified
|
|
53
|
-
number of rows and columns. Try each word in several positions
|
|
54
|
-
and directions, until it can be fitted into the grid, or the
|
|
55
|
-
maximum number of allowable attempts is exceeded. Returns a tuple
|
|
56
|
-
consisting of the grid and the words that were successfully
|
|
57
|
-
placed.
|
|
58
|
-
|
|
59
|
-
:param words: the list of words to be put into the grid
|
|
60
|
-
:type words: list
|
|
61
|
-
:param rows: the number of rows in the grid
|
|
62
|
-
:type rows: int
|
|
63
|
-
:param cols: the number of columns in the grid
|
|
64
|
-
:type cols: int
|
|
65
|
-
:param attempts: the number of times to attempt placing a word
|
|
66
|
-
:type attempts: int
|
|
67
|
-
:param alph: the alphabet, to be used for filling blank cells
|
|
68
|
-
:type alph: list
|
|
69
|
-
:rtype: tuple
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
# place longer words first
|
|
73
|
-
words = sorted(words, key=len, reverse=True)
|
|
74
|
-
|
|
75
|
-
grid = [] # the letter grid
|
|
76
|
-
used = [] # the words we used
|
|
77
|
-
|
|
78
|
-
# initialize the grid
|
|
79
|
-
for i in range(rows):
|
|
80
|
-
grid.append([""] * cols)
|
|
81
|
-
|
|
82
|
-
# try to place each word
|
|
83
|
-
for word in words:
|
|
84
|
-
word = word.strip().upper() # normalize
|
|
85
|
-
save = word # keep a record of the word
|
|
86
|
-
word = revword(word)
|
|
87
|
-
for attempt in range(attempts):
|
|
88
|
-
r = random.randint(0, len(word))
|
|
89
|
-
dir = random.choice([1,2,3,4])
|
|
90
|
-
x = random.randint(0,rows)
|
|
91
|
-
y = random.randint(0,cols)
|
|
92
|
-
if dir==1: x+=r; y+=r
|
|
93
|
-
elif dir==2: x+=r
|
|
94
|
-
elif dir==3: x+=r; y-=r
|
|
95
|
-
elif dir==4: y+=r
|
|
96
|
-
if 0<=x<rows and 0<=y<cols:
|
|
97
|
-
if check(word, dir, x, y, grid, rows, cols):
|
|
98
|
-
# used.append((save, dir, x, y, word))
|
|
99
|
-
used.append(save)
|
|
100
|
-
break
|
|
101
|
-
|
|
102
|
-
# Fill up the remaining spaces
|
|
103
|
-
for i in range(rows):
|
|
104
|
-
for j in range(cols):
|
|
105
|
-
if grid[i][j] == '':
|
|
106
|
-
grid[i][j] = random.choice(alph)
|
|
107
|
-
|
|
108
|
-
return grid, used
|
|
109
|
-
|
|
110
|
-
def word_finder():
|
|
111
|
-
from nltk.corpus import words
|
|
112
|
-
wordlist = words.words()
|
|
113
|
-
random.shuffle(wordlist)
|
|
114
|
-
wordlist = wordlist[:200]
|
|
115
|
-
wordlist = [w for w in wordlist if 3 <= len(w) <= 12]
|
|
116
|
-
grid, used = wordfinder(wordlist)
|
|
117
|
-
|
|
118
|
-
print("Word Finder\n")
|
|
119
|
-
for i in range(len(grid)):
|
|
120
|
-
for j in range(len(grid[i])):
|
|
121
|
-
print(grid[i][j], end=' ')
|
|
122
|
-
print()
|
|
123
|
-
print()
|
|
124
|
-
|
|
125
|
-
for i in range(len(used)):
|
|
126
|
-
print("%d:" % (i+1), used[i])
|
|
127
|
-
|
|
128
|
-
if __name__ == '__main__':
|
|
129
|
-
word_finder()
|
|
1
|
+
# Natural Language Toolkit: Word Finder
|
|
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
|
+
# Simplified from PHP version by Robert Klein <brathna@gmail.com>
|
|
9
|
+
# http://fswordfinder.sourceforge.net/
|
|
10
|
+
from __future__ import print_function
|
|
11
|
+
|
|
12
|
+
import random
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# reverse a word with probability 0.5
|
|
16
|
+
def revword(word):
|
|
17
|
+
if random.randint(1,2) == 1:
|
|
18
|
+
return word[::-1]
|
|
19
|
+
return word
|
|
20
|
+
|
|
21
|
+
# try to insert word at position x,y; direction encoded in xf,yf
|
|
22
|
+
def step(word, x, xf, y, yf, grid):
|
|
23
|
+
for i in range(len(word)):
|
|
24
|
+
if grid[xf(i)][yf(i)] != "" and grid[xf(i)][yf(i)] != word[i]:
|
|
25
|
+
return False
|
|
26
|
+
for i in range(len(word)):
|
|
27
|
+
grid[xf(i)][yf(i)] = word[i]
|
|
28
|
+
return True
|
|
29
|
+
|
|
30
|
+
# try to insert word at position x,y, in direction dir
|
|
31
|
+
def check(word, dir, x, y, grid, rows, cols):
|
|
32
|
+
if dir==1:
|
|
33
|
+
if x-len(word)<0 or y-len(word)<0:
|
|
34
|
+
return False
|
|
35
|
+
return step(word, x, lambda i:x-i, y, lambda i:y-i, grid)
|
|
36
|
+
elif dir==2:
|
|
37
|
+
if x-len(word)<0:
|
|
38
|
+
return False
|
|
39
|
+
return step(word, x, lambda i:x-i, y, lambda i:y, grid)
|
|
40
|
+
elif dir==3:
|
|
41
|
+
if x-len(word)<0 or y+(len(word)-1)>=cols:
|
|
42
|
+
return False
|
|
43
|
+
return step(word, x, lambda i:x-i, y, lambda i:y+i, grid)
|
|
44
|
+
elif dir==4:
|
|
45
|
+
if y-len(word)<0:
|
|
46
|
+
return False
|
|
47
|
+
return step(word, x, lambda i:x, y, lambda i:y-i, grid)
|
|
48
|
+
|
|
49
|
+
def wordfinder(words, rows=20, cols=20, attempts=50,
|
|
50
|
+
alph='ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
|
|
51
|
+
"""
|
|
52
|
+
Attempt to arrange words into a letter-grid with the specified
|
|
53
|
+
number of rows and columns. Try each word in several positions
|
|
54
|
+
and directions, until it can be fitted into the grid, or the
|
|
55
|
+
maximum number of allowable attempts is exceeded. Returns a tuple
|
|
56
|
+
consisting of the grid and the words that were successfully
|
|
57
|
+
placed.
|
|
58
|
+
|
|
59
|
+
:param words: the list of words to be put into the grid
|
|
60
|
+
:type words: list
|
|
61
|
+
:param rows: the number of rows in the grid
|
|
62
|
+
:type rows: int
|
|
63
|
+
:param cols: the number of columns in the grid
|
|
64
|
+
:type cols: int
|
|
65
|
+
:param attempts: the number of times to attempt placing a word
|
|
66
|
+
:type attempts: int
|
|
67
|
+
:param alph: the alphabet, to be used for filling blank cells
|
|
68
|
+
:type alph: list
|
|
69
|
+
:rtype: tuple
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
# place longer words first
|
|
73
|
+
words = sorted(words, key=len, reverse=True)
|
|
74
|
+
|
|
75
|
+
grid = [] # the letter grid
|
|
76
|
+
used = [] # the words we used
|
|
77
|
+
|
|
78
|
+
# initialize the grid
|
|
79
|
+
for i in range(rows):
|
|
80
|
+
grid.append([""] * cols)
|
|
81
|
+
|
|
82
|
+
# try to place each word
|
|
83
|
+
for word in words:
|
|
84
|
+
word = word.strip().upper() # normalize
|
|
85
|
+
save = word # keep a record of the word
|
|
86
|
+
word = revword(word)
|
|
87
|
+
for attempt in range(attempts):
|
|
88
|
+
r = random.randint(0, len(word))
|
|
89
|
+
dir = random.choice([1,2,3,4])
|
|
90
|
+
x = random.randint(0,rows)
|
|
91
|
+
y = random.randint(0,cols)
|
|
92
|
+
if dir==1: x+=r; y+=r
|
|
93
|
+
elif dir==2: x+=r
|
|
94
|
+
elif dir==3: x+=r; y-=r
|
|
95
|
+
elif dir==4: y+=r
|
|
96
|
+
if 0<=x<rows and 0<=y<cols:
|
|
97
|
+
if check(word, dir, x, y, grid, rows, cols):
|
|
98
|
+
# used.append((save, dir, x, y, word))
|
|
99
|
+
used.append(save)
|
|
100
|
+
break
|
|
101
|
+
|
|
102
|
+
# Fill up the remaining spaces
|
|
103
|
+
for i in range(rows):
|
|
104
|
+
for j in range(cols):
|
|
105
|
+
if grid[i][j] == '':
|
|
106
|
+
grid[i][j] = random.choice(alph)
|
|
107
|
+
|
|
108
|
+
return grid, used
|
|
109
|
+
|
|
110
|
+
def word_finder():
|
|
111
|
+
from nltk.corpus import words
|
|
112
|
+
wordlist = words.words()
|
|
113
|
+
random.shuffle(wordlist)
|
|
114
|
+
wordlist = wordlist[:200]
|
|
115
|
+
wordlist = [w for w in wordlist if 3 <= len(w) <= 12]
|
|
116
|
+
grid, used = wordfinder(wordlist)
|
|
117
|
+
|
|
118
|
+
print("Word Finder\n")
|
|
119
|
+
for i in range(len(grid)):
|
|
120
|
+
for j in range(len(grid[i])):
|
|
121
|
+
print(grid[i][j], end=' ')
|
|
122
|
+
print()
|
|
123
|
+
print()
|
|
124
|
+
|
|
125
|
+
for i in range(len(used)):
|
|
126
|
+
print("%d:" % (i+1), used[i])
|
|
127
|
+
|
|
128
|
+
if __name__ == '__main__':
|
|
129
|
+
word_finder()
|