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
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit tests for nltk.tokenize.
|
|
4
|
+
See also nltk/test/tokenize.doctest
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import unicode_literals
|
|
8
|
+
from nltk.tokenize import TweetTokenizer, StanfordSegmenter, TreebankWordTokenizer
|
|
9
|
+
from nose import SkipTest
|
|
10
|
+
import unittest
|
|
11
|
+
import os
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestTokenize(unittest.TestCase):
|
|
15
|
+
|
|
16
|
+
def test_tweet_tokenizer(self):
|
|
17
|
+
"""
|
|
18
|
+
Test TweetTokenizer using words with special and accented characters.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
tokenizer = TweetTokenizer(strip_handles=True, reduce_len=True)
|
|
22
|
+
s9 = "@myke: Let's test these words: resumé España München français"
|
|
23
|
+
tokens = tokenizer.tokenize(s9)
|
|
24
|
+
expected = [':', "Let's", 'test', 'these', 'words', ':', 'resumé',
|
|
25
|
+
'España', 'München', 'français']
|
|
26
|
+
self.assertEqual(tokens, expected)
|
|
27
|
+
|
|
28
|
+
def test_stanford_segmenter_arabic(self):
|
|
29
|
+
"""
|
|
30
|
+
Test the Stanford Word Segmenter for Arabic (default config)
|
|
31
|
+
"""
|
|
32
|
+
try:
|
|
33
|
+
seg = StanfordSegmenter()
|
|
34
|
+
seg.default_config('ar')
|
|
35
|
+
sent = u'يبحث علم الحاسوب استخدام الحوسبة بجميع اشكالها لحل المشكلات'
|
|
36
|
+
segmented_sent = seg.segment(sent.split())
|
|
37
|
+
assert segmented_sent.split() == ['يبحث', 'علم', 'الحاسوب', 'استخدام',
|
|
38
|
+
'الحوسبة', 'ب', 'جميع', 'اشكال',
|
|
39
|
+
'ها', 'ل', 'حل', 'المشكلات']
|
|
40
|
+
except LookupError as e:
|
|
41
|
+
raise SkipTest(str(e))
|
|
42
|
+
|
|
43
|
+
def test_stanford_segmenter_chinese(self):
|
|
44
|
+
"""
|
|
45
|
+
Test the Stanford Word Segmenter for Chinese (default config)
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
seg = StanfordSegmenter()
|
|
49
|
+
seg.default_config('zh')
|
|
50
|
+
sent = u"这是斯坦福中文分词器测试"
|
|
51
|
+
segmented_sent = seg.segment(sent.split())
|
|
52
|
+
assert segmented_sent.split() == ['这', '是', '斯坦福',
|
|
53
|
+
'中文', '分词器', '测试']
|
|
54
|
+
except LookupError as e:
|
|
55
|
+
raise SkipTest(str(e))
|
|
56
|
+
|
|
57
|
+
def test_phone_tokenizer(self):
|
|
58
|
+
"""
|
|
59
|
+
Test a string that resembles a phone number but contains a newline
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
# Should be recognized as a phone number, albeit one with multiple spaces
|
|
63
|
+
tokenizer = TweetTokenizer()
|
|
64
|
+
test1 = "(393) 928 -3010"
|
|
65
|
+
expected = ['(393) 928 -3010']
|
|
66
|
+
result = tokenizer.tokenize(test1)
|
|
67
|
+
self.assertEqual(result, expected)
|
|
68
|
+
|
|
69
|
+
# Due to newline, first three elements aren't part of a phone number;
|
|
70
|
+
# fourth is
|
|
71
|
+
test2= "(393)\n928 -3010"
|
|
72
|
+
expected = ['(', '393', ')', "928 -3010"]
|
|
73
|
+
result = tokenizer.tokenize(test2)
|
|
74
|
+
self.assertEqual(result, expected)
|
|
75
|
+
|
|
76
|
+
def test_remove_handle(self):
|
|
77
|
+
"""
|
|
78
|
+
Test remove_handle() from casual.py with specially crafted edge cases
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
tokenizer = TweetTokenizer(strip_handles=True)
|
|
82
|
+
|
|
83
|
+
# Simple example. Handles with just numbers should be allowed
|
|
84
|
+
test1 = "@twitter hello @twi_tter_. hi @12345 @123news"
|
|
85
|
+
expected = ['hello', '.', 'hi']
|
|
86
|
+
result = tokenizer.tokenize(test1)
|
|
87
|
+
self.assertEqual(result, expected)
|
|
88
|
+
|
|
89
|
+
# Handles are allowed to follow any of the following characters
|
|
90
|
+
test2 = "@n`@n~@n(@n)@n-@n=@n+@n\\@n|@n[@n]@n{@n}@n;@n:@n'@n\"@n/@n?@n.@n,@n<@n>@n @n\n@n ñ@n.ü@n.ç@n."
|
|
91
|
+
expected = ['`', '~', '(', ')', '-', '=', '+', '\\', '|', '[', ']', '{', '}', ';', ':', "'", '"', '/', '?', '.', ',', '<', '>', 'ñ', '.', 'ü', '.', 'ç', '.']
|
|
92
|
+
result = tokenizer.tokenize(test2)
|
|
93
|
+
self.assertEqual(result, expected)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# Handles are NOT allowed to follow any of the following characters
|
|
97
|
+
test3 = "a@n j@n z@n A@n L@n Z@n 1@n 4@n 7@n 9@n 0@n _@n !@n @@n #@n $@n %@n &@n *@n"
|
|
98
|
+
expected = ['a', '@n', 'j', '@n', 'z', '@n', 'A', '@n', 'L', '@n', 'Z', '@n', '1', '@n', '4', '@n', '7', '@n', '9', '@n', '0', '@n', '_', '@n', '!', '@n', '@', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n']
|
|
99
|
+
result = tokenizer.tokenize(test3)
|
|
100
|
+
self.assertEqual(result, expected)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# Handles are allowed to precede the following characters
|
|
104
|
+
test4 = "@n!a @n#a @n$a @n%a @n&a @n*a"
|
|
105
|
+
expected = ['!', 'a', '#', 'a', '$', 'a', '%', 'a', '&', 'a', '*', 'a']
|
|
106
|
+
result = tokenizer.tokenize(test4)
|
|
107
|
+
self.assertEqual(result, expected)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# Tests interactions with special symbols and multiple @
|
|
111
|
+
test5 = "@n!@n @n#@n @n$@n @n%@n @n&@n @n*@n @n@n @@n @n@@n @n_@n @n7@n @nj@n"
|
|
112
|
+
expected = ['!', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n', '@n', '@n', '@', '@n', '@n', '@', '@n', '@n_', '@n', '@n7', '@n', '@nj', '@n']
|
|
113
|
+
result = tokenizer.tokenize(test5)
|
|
114
|
+
self.assertEqual(result, expected)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
# Tests that handles can have a max length of 20
|
|
118
|
+
test6 = "@abcdefghijklmnopqrstuvwxyz @abcdefghijklmnopqrst1234 @abcdefghijklmnopqrst_ @abcdefghijklmnopqrstendofhandle"
|
|
119
|
+
expected = ['uvwxyz', '1234', '_', 'endofhandle']
|
|
120
|
+
result = tokenizer.tokenize(test6)
|
|
121
|
+
self.assertEqual(result, expected)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# Edge case where an @ comes directly after a long handle
|
|
125
|
+
test7 = "@abcdefghijklmnopqrstu@abcde @abcdefghijklmnopqrst@abcde @abcdefghijklmnopqrst_@abcde @abcdefghijklmnopqrst5@abcde"
|
|
126
|
+
expected = ['u', '@abcde', '@abcdefghijklmnopqrst', '@abcde', '_', '@abcde', '5', '@abcde']
|
|
127
|
+
result = tokenizer.tokenize(test7)
|
|
128
|
+
self.assertEqual(result, expected)
|
|
129
|
+
|
|
130
|
+
def test_treebank_span_tokenizer(self):
|
|
131
|
+
"""
|
|
132
|
+
Test TreebankWordTokenizer.span_tokenize function
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
tokenizer = TreebankWordTokenizer()
|
|
136
|
+
|
|
137
|
+
# Test case in the docstring
|
|
138
|
+
test1 = "Good muffins cost $3.88\nin New (York). Please (buy) me\ntwo of them.\n(Thanks)."
|
|
139
|
+
expected = [
|
|
140
|
+
(0, 4), (5, 12), (13, 17), (18, 19), (19, 23),
|
|
141
|
+
(24, 26), (27, 30), (31, 32), (32, 36), (36, 37), (37, 38),
|
|
142
|
+
(40, 46), (47, 48), (48, 51), (51, 52), (53, 55), (56, 59),
|
|
143
|
+
(60, 62), (63, 68), (69, 70), (70, 76), (76, 77), (77, 78)
|
|
144
|
+
]
|
|
145
|
+
result = list(tokenizer.span_tokenize(test1))
|
|
146
|
+
self.assertEqual(result, expected)
|
|
147
|
+
|
|
148
|
+
# Test case with double quotation
|
|
149
|
+
test2 = "The DUP is similar to the \"religious right\" in the United States and takes a hardline stance on social issues"
|
|
150
|
+
expected = [
|
|
151
|
+
(0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
|
|
152
|
+
(27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
|
|
153
|
+
(65, 68), (69, 74), (75, 76), (77, 85), (86, 92), (93, 95), (96, 102),
|
|
154
|
+
(103, 109)
|
|
155
|
+
]
|
|
156
|
+
result = list(tokenizer.span_tokenize(test2))
|
|
157
|
+
self.assertEqual(result, expected)
|
|
158
|
+
|
|
159
|
+
# Test case with double qoutation as well as converted quotations
|
|
160
|
+
test3 = "The DUP is similar to the \"religious right\" in the United States and takes a ``hardline'' stance on social issues"
|
|
161
|
+
expected = [
|
|
162
|
+
(0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
|
|
163
|
+
(27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
|
|
164
|
+
(65, 68), (69, 74), (75, 76), (77, 79), (79, 87), (87, 89), (90, 96),
|
|
165
|
+
(97, 99), (100, 106), (107, 113)
|
|
166
|
+
]
|
|
167
|
+
result = list(tokenizer.span_tokenize(test3))
|
|
168
|
+
self.assertEqual(result, expected)
|
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
Tests for static parts of Twitter package
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import os
|
|
7
|
-
import unittest
|
|
8
|
-
from nose import SkipTest
|
|
9
|
-
|
|
10
|
-
try:
|
|
11
|
-
import twython
|
|
12
|
-
except ImportError as e:
|
|
13
|
-
raise SkipTest("The twython library has not been installed.")
|
|
14
|
-
|
|
15
|
-
from nltk.twitter import Authenticate
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class TestCredentials(unittest.TestCase):
|
|
19
|
-
"""
|
|
20
|
-
Tests that Twitter credentials information from file is handled correctly.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
def setUp(self):
|
|
24
|
-
self.subdir = os.path.join(os.path.dirname(__file__), 'files')
|
|
25
|
-
self.auth = Authenticate()
|
|
26
|
-
os.environ['TWITTER'] = 'twitter-files'
|
|
27
|
-
|
|
28
|
-
def test_environment(self):
|
|
29
|
-
"""
|
|
30
|
-
Test that environment variable has been read correctly.
|
|
31
|
-
"""
|
|
32
|
-
fn = os.path.basename(self.auth.creds_subdir)
|
|
33
|
-
self.assertEqual(fn, os.environ['TWITTER'])
|
|
34
|
-
|
|
35
|
-
def test_empty_subdir1(self):
|
|
36
|
-
"""
|
|
37
|
-
Setting subdir to empty path should raise an error.
|
|
38
|
-
"""
|
|
39
|
-
try:
|
|
40
|
-
self.auth.load_creds(subdir='')
|
|
41
|
-
# raises ValueError (zero length field name in format) for python 2.6
|
|
42
|
-
# OSError for the rest
|
|
43
|
-
except OSError:
|
|
44
|
-
pass
|
|
45
|
-
except ValueError:
|
|
46
|
-
pass
|
|
47
|
-
except Exception as e:
|
|
48
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
49
|
-
else:
|
|
50
|
-
self.fail('OSError exception not thrown.')
|
|
51
|
-
|
|
52
|
-
def test_empty_subdir2(self):
|
|
53
|
-
"""
|
|
54
|
-
Setting subdir to `None` should raise an error.
|
|
55
|
-
"""
|
|
56
|
-
self.auth.creds_subdir = None
|
|
57
|
-
try:
|
|
58
|
-
self.auth.load_creds()
|
|
59
|
-
except ValueError:
|
|
60
|
-
pass
|
|
61
|
-
except Exception as e:
|
|
62
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
63
|
-
else:
|
|
64
|
-
self.fail('ValueError exception not thrown.')
|
|
65
|
-
|
|
66
|
-
def test_missingdir(self):
|
|
67
|
-
"""
|
|
68
|
-
Setting subdir to nonexistent directory should raise an error.
|
|
69
|
-
"""
|
|
70
|
-
try:
|
|
71
|
-
self.auth.load_creds(subdir='/nosuchdir')
|
|
72
|
-
# raises ValueError (zero length field name in format) for python 2.6
|
|
73
|
-
# OSError for the rest
|
|
74
|
-
except OSError:
|
|
75
|
-
pass
|
|
76
|
-
except ValueError:
|
|
77
|
-
pass
|
|
78
|
-
except Exception as e:
|
|
79
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
80
|
-
else:
|
|
81
|
-
self.fail('OSError exception not thrown.')
|
|
82
|
-
|
|
83
|
-
def test_missingfile1(self):
|
|
84
|
-
"""
|
|
85
|
-
Defaults for authentication will fail since 'credentials.txt' not
|
|
86
|
-
present in default subdir, as read from `os.environ['TWITTER']`.
|
|
87
|
-
"""
|
|
88
|
-
try:
|
|
89
|
-
self.auth.load_creds()
|
|
90
|
-
# raises ValueError (zero length field name in format) for python 2.6
|
|
91
|
-
# OSError for the rest
|
|
92
|
-
except OSError:
|
|
93
|
-
pass
|
|
94
|
-
except ValueError:
|
|
95
|
-
pass
|
|
96
|
-
except Exception as e:
|
|
97
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
98
|
-
else:
|
|
99
|
-
self.fail('OSError exception not thrown.')
|
|
100
|
-
|
|
101
|
-
def test_missingfile2(self):
|
|
102
|
-
"""
|
|
103
|
-
Credentials file 'foobar' cannot be found in default subdir.
|
|
104
|
-
"""
|
|
105
|
-
try:
|
|
106
|
-
self.auth.load_creds(creds_file='foobar')
|
|
107
|
-
# raises ValueError (zero length field name in format) for python 2.6
|
|
108
|
-
# OSError for the rest
|
|
109
|
-
except OSError:
|
|
110
|
-
pass
|
|
111
|
-
except ValueError:
|
|
112
|
-
pass
|
|
113
|
-
except Exception as e:
|
|
114
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
115
|
-
else:
|
|
116
|
-
self.fail('OSError exception not thrown.')
|
|
117
|
-
|
|
118
|
-
def test_incomplete_file(self):
|
|
119
|
-
"""
|
|
120
|
-
Credentials file 'bad_oauth1-1.txt' is incomplete
|
|
121
|
-
"""
|
|
122
|
-
try:
|
|
123
|
-
self.auth.load_creds(creds_file='bad_oauth1-1.txt',
|
|
124
|
-
subdir=self.subdir)
|
|
125
|
-
except ValueError:
|
|
126
|
-
pass
|
|
127
|
-
except Exception as e:
|
|
128
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
129
|
-
else:
|
|
130
|
-
self.fail('ValueError exception not thrown.')
|
|
131
|
-
|
|
132
|
-
def test_malformed_file1(self):
|
|
133
|
-
"""
|
|
134
|
-
First key in credentials file 'bad_oauth1-2.txt' is ill-formed
|
|
135
|
-
"""
|
|
136
|
-
try:
|
|
137
|
-
self.auth.load_creds(creds_file='bad_oauth1-2.txt',
|
|
138
|
-
subdir=self.subdir)
|
|
139
|
-
except ValueError:
|
|
140
|
-
pass
|
|
141
|
-
except Exception as e:
|
|
142
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
143
|
-
else:
|
|
144
|
-
self.fail('ValueError exception not thrown.')
|
|
145
|
-
|
|
146
|
-
def test_malformed_file2(self):
|
|
147
|
-
"""
|
|
148
|
-
First key in credentials file 'bad_oauth1-2.txt' is ill-formed
|
|
149
|
-
"""
|
|
150
|
-
try:
|
|
151
|
-
self.auth.load_creds(creds_file='bad_oauth1-3.txt',
|
|
152
|
-
subdir=self.subdir)
|
|
153
|
-
except ValueError:
|
|
154
|
-
pass
|
|
155
|
-
except Exception as e:
|
|
156
|
-
self.fail('Unexpected exception thrown: %s' % e)
|
|
157
|
-
else:
|
|
158
|
-
self.fail('ValueError exception not thrown.')
|
|
159
|
-
|
|
160
|
-
def test_correct_path(self):
|
|
161
|
-
"""
|
|
162
|
-
Path to default credentials file is well-formed, given specified
|
|
163
|
-
subdir.
|
|
164
|
-
"""
|
|
165
|
-
self.auth.load_creds(subdir=self.subdir)
|
|
166
|
-
self.auth.creds_fullpath = os.path.join(self.subdir, self.auth.creds_file)
|
|
167
|
-
|
|
168
|
-
def test_correct_file1(self):
|
|
169
|
-
"""
|
|
170
|
-
Default credentials file is identified
|
|
171
|
-
"""
|
|
172
|
-
self.auth.load_creds(subdir=self.subdir)
|
|
173
|
-
self.assertEqual(self.auth.creds_file, 'credentials.txt')
|
|
174
|
-
|
|
175
|
-
def test_correct_file2(self):
|
|
176
|
-
"""
|
|
177
|
-
Default credentials file has been read correctluy
|
|
178
|
-
"""
|
|
179
|
-
oauth = self.auth.load_creds(subdir=self.subdir)
|
|
180
|
-
self.assertEqual(oauth['app_key'], 'a')
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if __name__ == '__main__':
|
|
184
|
-
unittest.main()
|
|
185
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Tests for static parts of Twitter package
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import unittest
|
|
8
|
+
from nose import SkipTest
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
import twython
|
|
12
|
+
except ImportError as e:
|
|
13
|
+
raise SkipTest("The twython library has not been installed.")
|
|
14
|
+
|
|
15
|
+
from nltk.twitter import Authenticate
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestCredentials(unittest.TestCase):
|
|
19
|
+
"""
|
|
20
|
+
Tests that Twitter credentials information from file is handled correctly.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def setUp(self):
|
|
24
|
+
self.subdir = os.path.join(os.path.dirname(__file__), 'files')
|
|
25
|
+
self.auth = Authenticate()
|
|
26
|
+
os.environ['TWITTER'] = 'twitter-files'
|
|
27
|
+
|
|
28
|
+
def test_environment(self):
|
|
29
|
+
"""
|
|
30
|
+
Test that environment variable has been read correctly.
|
|
31
|
+
"""
|
|
32
|
+
fn = os.path.basename(self.auth.creds_subdir)
|
|
33
|
+
self.assertEqual(fn, os.environ['TWITTER'])
|
|
34
|
+
|
|
35
|
+
def test_empty_subdir1(self):
|
|
36
|
+
"""
|
|
37
|
+
Setting subdir to empty path should raise an error.
|
|
38
|
+
"""
|
|
39
|
+
try:
|
|
40
|
+
self.auth.load_creds(subdir='')
|
|
41
|
+
# raises ValueError (zero length field name in format) for python 2.6
|
|
42
|
+
# OSError for the rest
|
|
43
|
+
except OSError:
|
|
44
|
+
pass
|
|
45
|
+
except ValueError:
|
|
46
|
+
pass
|
|
47
|
+
except Exception as e:
|
|
48
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
49
|
+
else:
|
|
50
|
+
self.fail('OSError exception not thrown.')
|
|
51
|
+
|
|
52
|
+
def test_empty_subdir2(self):
|
|
53
|
+
"""
|
|
54
|
+
Setting subdir to `None` should raise an error.
|
|
55
|
+
"""
|
|
56
|
+
self.auth.creds_subdir = None
|
|
57
|
+
try:
|
|
58
|
+
self.auth.load_creds()
|
|
59
|
+
except ValueError:
|
|
60
|
+
pass
|
|
61
|
+
except Exception as e:
|
|
62
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
63
|
+
else:
|
|
64
|
+
self.fail('ValueError exception not thrown.')
|
|
65
|
+
|
|
66
|
+
def test_missingdir(self):
|
|
67
|
+
"""
|
|
68
|
+
Setting subdir to nonexistent directory should raise an error.
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
self.auth.load_creds(subdir='/nosuchdir')
|
|
72
|
+
# raises ValueError (zero length field name in format) for python 2.6
|
|
73
|
+
# OSError for the rest
|
|
74
|
+
except OSError:
|
|
75
|
+
pass
|
|
76
|
+
except ValueError:
|
|
77
|
+
pass
|
|
78
|
+
except Exception as e:
|
|
79
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
80
|
+
else:
|
|
81
|
+
self.fail('OSError exception not thrown.')
|
|
82
|
+
|
|
83
|
+
def test_missingfile1(self):
|
|
84
|
+
"""
|
|
85
|
+
Defaults for authentication will fail since 'credentials.txt' not
|
|
86
|
+
present in default subdir, as read from `os.environ['TWITTER']`.
|
|
87
|
+
"""
|
|
88
|
+
try:
|
|
89
|
+
self.auth.load_creds()
|
|
90
|
+
# raises ValueError (zero length field name in format) for python 2.6
|
|
91
|
+
# OSError for the rest
|
|
92
|
+
except OSError:
|
|
93
|
+
pass
|
|
94
|
+
except ValueError:
|
|
95
|
+
pass
|
|
96
|
+
except Exception as e:
|
|
97
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
98
|
+
else:
|
|
99
|
+
self.fail('OSError exception not thrown.')
|
|
100
|
+
|
|
101
|
+
def test_missingfile2(self):
|
|
102
|
+
"""
|
|
103
|
+
Credentials file 'foobar' cannot be found in default subdir.
|
|
104
|
+
"""
|
|
105
|
+
try:
|
|
106
|
+
self.auth.load_creds(creds_file='foobar')
|
|
107
|
+
# raises ValueError (zero length field name in format) for python 2.6
|
|
108
|
+
# OSError for the rest
|
|
109
|
+
except OSError:
|
|
110
|
+
pass
|
|
111
|
+
except ValueError:
|
|
112
|
+
pass
|
|
113
|
+
except Exception as e:
|
|
114
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
115
|
+
else:
|
|
116
|
+
self.fail('OSError exception not thrown.')
|
|
117
|
+
|
|
118
|
+
def test_incomplete_file(self):
|
|
119
|
+
"""
|
|
120
|
+
Credentials file 'bad_oauth1-1.txt' is incomplete
|
|
121
|
+
"""
|
|
122
|
+
try:
|
|
123
|
+
self.auth.load_creds(creds_file='bad_oauth1-1.txt',
|
|
124
|
+
subdir=self.subdir)
|
|
125
|
+
except ValueError:
|
|
126
|
+
pass
|
|
127
|
+
except Exception as e:
|
|
128
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
129
|
+
else:
|
|
130
|
+
self.fail('ValueError exception not thrown.')
|
|
131
|
+
|
|
132
|
+
def test_malformed_file1(self):
|
|
133
|
+
"""
|
|
134
|
+
First key in credentials file 'bad_oauth1-2.txt' is ill-formed
|
|
135
|
+
"""
|
|
136
|
+
try:
|
|
137
|
+
self.auth.load_creds(creds_file='bad_oauth1-2.txt',
|
|
138
|
+
subdir=self.subdir)
|
|
139
|
+
except ValueError:
|
|
140
|
+
pass
|
|
141
|
+
except Exception as e:
|
|
142
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
143
|
+
else:
|
|
144
|
+
self.fail('ValueError exception not thrown.')
|
|
145
|
+
|
|
146
|
+
def test_malformed_file2(self):
|
|
147
|
+
"""
|
|
148
|
+
First key in credentials file 'bad_oauth1-2.txt' is ill-formed
|
|
149
|
+
"""
|
|
150
|
+
try:
|
|
151
|
+
self.auth.load_creds(creds_file='bad_oauth1-3.txt',
|
|
152
|
+
subdir=self.subdir)
|
|
153
|
+
except ValueError:
|
|
154
|
+
pass
|
|
155
|
+
except Exception as e:
|
|
156
|
+
self.fail('Unexpected exception thrown: %s' % e)
|
|
157
|
+
else:
|
|
158
|
+
self.fail('ValueError exception not thrown.')
|
|
159
|
+
|
|
160
|
+
def test_correct_path(self):
|
|
161
|
+
"""
|
|
162
|
+
Path to default credentials file is well-formed, given specified
|
|
163
|
+
subdir.
|
|
164
|
+
"""
|
|
165
|
+
self.auth.load_creds(subdir=self.subdir)
|
|
166
|
+
self.auth.creds_fullpath = os.path.join(self.subdir, self.auth.creds_file)
|
|
167
|
+
|
|
168
|
+
def test_correct_file1(self):
|
|
169
|
+
"""
|
|
170
|
+
Default credentials file is identified
|
|
171
|
+
"""
|
|
172
|
+
self.auth.load_creds(subdir=self.subdir)
|
|
173
|
+
self.assertEqual(self.auth.creds_file, 'credentials.txt')
|
|
174
|
+
|
|
175
|
+
def test_correct_file2(self):
|
|
176
|
+
"""
|
|
177
|
+
Default credentials file has been read correctluy
|
|
178
|
+
"""
|
|
179
|
+
oauth = self.auth.load_creds(subdir=self.subdir)
|
|
180
|
+
self.assertEqual(oauth['app_key'], 'a')
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
if __name__ == '__main__':
|
|
184
|
+
unittest.main()
|
|
185
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit tests for nltk.corpus.wordnet
|
|
4
|
+
See also nltk/test/wordnet.doctest
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import unicode_literals
|
|
8
|
+
from nose import SkipTest
|
|
9
|
+
import unittest
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from nltk.corpus.reader.wordnet import WordNetCorpusReader
|
|
13
|
+
from nltk.corpus import wordnet as wn
|
|
14
|
+
from nltk.corpus import wordnet_ic as wnic
|
|
15
|
+
from nltk.data import find as find_data
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
wn.ensure_loaded()
|
|
19
|
+
S = wn.synset
|
|
20
|
+
L = wn.lemma
|
|
21
|
+
|
|
22
|
+
class WordnNetDemo(unittest.TestCase):
|
|
23
|
+
|
|
24
|
+
def test_retrieve_synset(self):
|
|
25
|
+
move_synset = S('go.v.21')
|
|
26
|
+
self.assertEqual(move_synset.name(), "move.v.15")
|
|
27
|
+
self.assertEqual(move_synset.lemma_names(), ['move', 'go'])
|
|
28
|
+
self.assertEqual(move_synset.definition(), "have a turn; make one's move in a game")
|
|
29
|
+
self.assertEqual(move_synset.examples(), ['Can I go now?'])
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_retrieve_synsets(self):
|
|
33
|
+
self.assertEqual(sorted(wn.synsets('zap', pos='n')),
|
|
34
|
+
[S('zap.n.01')])
|
|
35
|
+
self.assertEqual(sorted(wn.synsets('zap', pos='v')),
|
|
36
|
+
[S('microwave.v.01'), S('nuke.v.01'), S('zap.v.01'), S('zap.v.02')])
|
|
37
|
+
|
|
38
|
+
def test_hyperhyponyms(self):
|
|
39
|
+
# Not every synset as hypernyms()
|
|
40
|
+
self.assertEqual(S('travel.v.01').hypernyms(), [])
|
|
41
|
+
self.assertEqual(S('travel.v.02').hypernyms(),
|
|
42
|
+
[S('travel.v.03')])
|
|
43
|
+
self.assertEqual(S('travel.v.03').hypernyms(), [])
|
|
44
|
+
|
|
45
|
+
# Test hyper-/hyponyms.
|
|
46
|
+
self.assertEqual(S('breakfast.n.1').hypernyms(), [S('meal.n.01')])
|
|
47
|
+
first_five_meal_hypo = [S('banquet.n.02'), S('bite.n.04'), S('breakfast.n.01'), S('brunch.n.01'), S('buffet.n.02')]
|
|
48
|
+
self.assertEqual(sorted(S('meal.n.1').hyponyms()[:5]), first_five_meal_hypo)
|
|
49
|
+
self.assertEqual(S('Austen.n.1').instance_hypernyms(), [S('writer.n.01')])
|
|
50
|
+
first_five_composer_hypo = [S('ambrose.n.01'), S('bach.n.01'), S('barber.n.01'), S('bartok.n.01'), S('beethoven.n.01')]
|
|
51
|
+
self.assertEqual(S('composer.n.1').instance_hyponyms()[:5], first_five_composer_hypo)
|
|
52
|
+
|
|
53
|
+
# Test root hyper-/hyponyms
|
|
54
|
+
self.assertEqual(S('person.n.01').root_hypernyms(), [S('entity.n.01')])
|
|
55
|
+
self.assertEqual(S('sail.v.01').root_hypernyms(), [S('travel.v.01')])
|
|
56
|
+
self.assertEqual(S('fall.v.12').root_hypernyms(), [S('act.v.01'), S('fall.v.17')])
|
|
57
|
+
|
|
58
|
+
def test_derivationally_related_forms(self):
|
|
59
|
+
# Test `derivationally_related_forms()`
|
|
60
|
+
self.assertEqual(L('zap.v.03.nuke').derivationally_related_forms(),
|
|
61
|
+
[L('atomic_warhead.n.01.nuke')])
|
|
62
|
+
self.assertEqual(L('zap.v.03.atomize').derivationally_related_forms(),
|
|
63
|
+
[L('atomization.n.02.atomization')])
|
|
64
|
+
self.assertEqual(L('zap.v.03.atomise').derivationally_related_forms(),
|
|
65
|
+
[L('atomization.n.02.atomisation')])
|
|
66
|
+
self.assertEqual(L('zap.v.03.zap').derivationally_related_forms(),
|
|
67
|
+
[])
|
|
68
|
+
|
|
69
|
+
def test_meronyms_holonyms(self):
|
|
70
|
+
# Test meronyms, holonyms.
|
|
71
|
+
self.assertEqual(S('dog.n.01').member_holonyms(), [S('canis.n.01'), S('pack.n.06')])
|
|
72
|
+
self.assertEqual(S('dog.n.01').part_meronyms(), [S('flag.n.07')])
|
|
73
|
+
|
|
74
|
+
self.assertEqual(S('faculty.n.2').member_meronyms(),
|
|
75
|
+
[S('professor.n.01')])
|
|
76
|
+
self.assertEqual(S('copilot.n.1').member_holonyms(),
|
|
77
|
+
[S('crew.n.01')])
|
|
78
|
+
|
|
79
|
+
self.assertEqual(S('table.n.2').part_meronyms(),
|
|
80
|
+
[S('leg.n.03'), S('tabletop.n.01'), S('tableware.n.01')])
|
|
81
|
+
self.assertEqual(S('course.n.7').part_holonyms(),
|
|
82
|
+
[S('meal.n.01')])
|
|
83
|
+
|
|
84
|
+
self.assertEqual(S('water.n.1').substance_meronyms(),
|
|
85
|
+
[S('hydrogen.n.01'), S('oxygen.n.01')])
|
|
86
|
+
self.assertEqual(S('gin.n.1').substance_holonyms(),
|
|
87
|
+
[S('gin_and_it.n.01'), S('gin_and_tonic.n.01'),
|
|
88
|
+
S('martini.n.01'), S('pink_lady.n.01')])
|
|
89
|
+
|
|
90
|
+
def test_antonyms(self):
|
|
91
|
+
# Test antonyms.
|
|
92
|
+
self.assertEqual(L('leader.n.1.leader').antonyms(), [L('follower.n.01.follower')])
|
|
93
|
+
self.assertEqual(L('increase.v.1.increase').antonyms(), [L('decrease.v.01.decrease')])
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_misc_relations(self):
|
|
97
|
+
# Test misc relations.
|
|
98
|
+
self.assertEqual(S('snore.v.1').entailments(), [S('sleep.v.01')])
|
|
99
|
+
self.assertEqual(S('heavy.a.1').similar_tos(),
|
|
100
|
+
[S('dense.s.03'), S('doughy.s.01'),
|
|
101
|
+
S('heavier-than-air.s.01'), S('hefty.s.02'),
|
|
102
|
+
S('massive.s.04'), S('non-buoyant.s.01'),
|
|
103
|
+
S('ponderous.s.02')])
|
|
104
|
+
self.assertEqual(S('light.a.1').attributes(), [S('weight.n.01')])
|
|
105
|
+
self.assertEqual(S('heavy.a.1').attributes(), [S('weight.n.01')])
|
|
106
|
+
|
|
107
|
+
# Test pertainyms.
|
|
108
|
+
self.assertEqual(L('English.a.1.English').pertainyms(),
|
|
109
|
+
[L('england.n.01.England')])
|
|
110
|
+
|
|
111
|
+
def test_lch(self):
|
|
112
|
+
# Test LCH.
|
|
113
|
+
self.assertEqual(S('person.n.01').lowest_common_hypernyms(S('dog.n.01')),
|
|
114
|
+
[S('organism.n.01')])
|
|
115
|
+
self.assertEqual(S('woman.n.01').lowest_common_hypernyms(S('girlfriend.n.02')),
|
|
116
|
+
[S('woman.n.01')])
|
|
117
|
+
|
|
118
|
+
def test_domains(self):
|
|
119
|
+
# Test domains.
|
|
120
|
+
self.assertEqual(S('code.n.03').topic_domains(), [S('computer_science.n.01')])
|
|
121
|
+
self.assertEqual(S('pukka.a.01').region_domains(), [S('india.n.01')])
|
|
122
|
+
self.assertEqual(S('freaky.a.01').usage_domains(), [S('slang.n.02')])
|
|
123
|
+
|
|
124
|
+
def test_wordnet_similarities(self):
|
|
125
|
+
# Path based similarities.
|
|
126
|
+
self.assertAlmostEqual(S('cat.n.01').path_similarity(S('cat.n.01')), 1.0)
|
|
127
|
+
self.assertAlmostEqual(S('dog.n.01').path_similarity(S('cat.n.01')), 0.2)
|
|
128
|
+
self.assertAlmostEqual(S('dog.n.01').lch_similarity(S('cat.n.01')), 2.028, places=3)
|
|
129
|
+
self.assertAlmostEqual(S('dog.n.01').wup_similarity(S('cat.n.01')), 0.8571, places=3)
|
|
130
|
+
# Information Content similarities.
|
|
131
|
+
brown_ic = wnic.ic('ic-brown.dat')
|
|
132
|
+
self.assertAlmostEqual(S('dog.n.01').jcn_similarity(S('cat.n.01'), brown_ic), 0.4497, places=3)
|
|
133
|
+
semcor_ic = wnic.ic('ic-semcor.dat')
|
|
134
|
+
self.assertAlmostEqual(S('dog.n.01').lin_similarity(S('cat.n.01'), semcor_ic), 0.8863, places=3)
|