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,67 +1,67 @@
|
|
|
1
|
-
.. Copyright (C) 2001-
|
|
2
|
-
.. For license information, see LICENSE.TXT
|
|
3
|
-
|
|
4
|
-
===============================================
|
|
5
|
-
Generating sentences from context-free grammars
|
|
6
|
-
===============================================
|
|
7
|
-
|
|
8
|
-
An example grammar:
|
|
9
|
-
|
|
10
|
-
>>> from nltk.parse.generate import generate, demo_grammar
|
|
11
|
-
>>> from nltk import CFG
|
|
12
|
-
>>> grammar = CFG.fromstring(demo_grammar)
|
|
13
|
-
>>> print(grammar)
|
|
14
|
-
Grammar with 13 productions (start state = S)
|
|
15
|
-
S -> NP VP
|
|
16
|
-
NP -> Det N
|
|
17
|
-
PP -> P NP
|
|
18
|
-
VP -> 'slept'
|
|
19
|
-
VP -> 'saw' NP
|
|
20
|
-
VP -> 'walked' PP
|
|
21
|
-
Det -> 'the'
|
|
22
|
-
Det -> 'a'
|
|
23
|
-
N -> 'man'
|
|
24
|
-
N -> 'park'
|
|
25
|
-
N -> 'dog'
|
|
26
|
-
P -> 'in'
|
|
27
|
-
P -> 'with'
|
|
28
|
-
|
|
29
|
-
The first 10 generated sentences:
|
|
30
|
-
|
|
31
|
-
>>> for sentence in generate(grammar, n=10):
|
|
32
|
-
... print(' '.join(sentence))
|
|
33
|
-
the man slept
|
|
34
|
-
the man saw the man
|
|
35
|
-
the man saw the park
|
|
36
|
-
the man saw the dog
|
|
37
|
-
the man saw a man
|
|
38
|
-
the man saw a park
|
|
39
|
-
the man saw a dog
|
|
40
|
-
the man walked in the man
|
|
41
|
-
the man walked in the park
|
|
42
|
-
the man walked in the dog
|
|
43
|
-
|
|
44
|
-
All sentences of max depth 4:
|
|
45
|
-
|
|
46
|
-
>>> for sentence in generate(grammar, depth=4):
|
|
47
|
-
... print(' '.join(sentence))
|
|
48
|
-
the man slept
|
|
49
|
-
the park slept
|
|
50
|
-
the dog slept
|
|
51
|
-
a man slept
|
|
52
|
-
a park slept
|
|
53
|
-
a dog slept
|
|
54
|
-
|
|
55
|
-
The number of sentences of different max depths:
|
|
56
|
-
|
|
57
|
-
>>> len(list(generate(grammar, depth=3)))
|
|
58
|
-
0
|
|
59
|
-
>>> len(list(generate(grammar, depth=4)))
|
|
60
|
-
6
|
|
61
|
-
>>> len(list(generate(grammar, depth=5)))
|
|
62
|
-
42
|
|
63
|
-
>>> len(list(generate(grammar, depth=6)))
|
|
64
|
-
114
|
|
65
|
-
>>> len(list(generate(grammar)))
|
|
66
|
-
114
|
|
67
|
-
|
|
1
|
+
.. Copyright (C) 2001-2018 NLTK Project
|
|
2
|
+
.. For license information, see LICENSE.TXT
|
|
3
|
+
|
|
4
|
+
===============================================
|
|
5
|
+
Generating sentences from context-free grammars
|
|
6
|
+
===============================================
|
|
7
|
+
|
|
8
|
+
An example grammar:
|
|
9
|
+
|
|
10
|
+
>>> from nltk.parse.generate import generate, demo_grammar
|
|
11
|
+
>>> from nltk import CFG
|
|
12
|
+
>>> grammar = CFG.fromstring(demo_grammar)
|
|
13
|
+
>>> print(grammar)
|
|
14
|
+
Grammar with 13 productions (start state = S)
|
|
15
|
+
S -> NP VP
|
|
16
|
+
NP -> Det N
|
|
17
|
+
PP -> P NP
|
|
18
|
+
VP -> 'slept'
|
|
19
|
+
VP -> 'saw' NP
|
|
20
|
+
VP -> 'walked' PP
|
|
21
|
+
Det -> 'the'
|
|
22
|
+
Det -> 'a'
|
|
23
|
+
N -> 'man'
|
|
24
|
+
N -> 'park'
|
|
25
|
+
N -> 'dog'
|
|
26
|
+
P -> 'in'
|
|
27
|
+
P -> 'with'
|
|
28
|
+
|
|
29
|
+
The first 10 generated sentences:
|
|
30
|
+
|
|
31
|
+
>>> for sentence in generate(grammar, n=10):
|
|
32
|
+
... print(' '.join(sentence))
|
|
33
|
+
the man slept
|
|
34
|
+
the man saw the man
|
|
35
|
+
the man saw the park
|
|
36
|
+
the man saw the dog
|
|
37
|
+
the man saw a man
|
|
38
|
+
the man saw a park
|
|
39
|
+
the man saw a dog
|
|
40
|
+
the man walked in the man
|
|
41
|
+
the man walked in the park
|
|
42
|
+
the man walked in the dog
|
|
43
|
+
|
|
44
|
+
All sentences of max depth 4:
|
|
45
|
+
|
|
46
|
+
>>> for sentence in generate(grammar, depth=4):
|
|
47
|
+
... print(' '.join(sentence))
|
|
48
|
+
the man slept
|
|
49
|
+
the park slept
|
|
50
|
+
the dog slept
|
|
51
|
+
a man slept
|
|
52
|
+
a park slept
|
|
53
|
+
a dog slept
|
|
54
|
+
|
|
55
|
+
The number of sentences of different max depths:
|
|
56
|
+
|
|
57
|
+
>>> len(list(generate(grammar, depth=3)))
|
|
58
|
+
0
|
|
59
|
+
>>> len(list(generate(grammar, depth=4)))
|
|
60
|
+
6
|
|
61
|
+
>>> len(list(generate(grammar, depth=5)))
|
|
62
|
+
42
|
|
63
|
+
>>> len(list(generate(grammar, depth=6)))
|
|
64
|
+
114
|
|
65
|
+
>>> len(list(generate(grammar)))
|
|
66
|
+
114
|
|
67
|
+
|
|
@@ -1,141 +1,140 @@
|
|
|
1
|
-
.. Copyright (C) 2001-
|
|
2
|
-
.. For license information, see LICENSE.TXT
|
|
3
|
-
|
|
4
|
-
=======================================
|
|
5
|
-
Demonstrate word embedding using Gensim
|
|
6
|
-
=======================================
|
|
7
|
-
|
|
8
|
-
We demonstrate three functions:
|
|
9
|
-
- Train the word embeddings using brown corpus;
|
|
10
|
-
- Load the pre-trained model and perform simple tasks; and
|
|
11
|
-
- Pruning the pre-trained binary model.
|
|
12
|
-
|
|
13
|
-
>>> import gensim
|
|
14
|
-
|
|
15
|
-
---------------
|
|
16
|
-
Train the model
|
|
17
|
-
---------------
|
|
18
|
-
|
|
19
|
-
Here we train a word embedding using the Brown Corpus:
|
|
20
|
-
|
|
21
|
-
>>> from nltk.corpus import brown
|
|
22
|
-
>>> model = gensim.models.Word2Vec(brown.sents())
|
|
23
|
-
|
|
24
|
-
It might take some time to train the model. So, after it is trained, it can be saved as follows:
|
|
25
|
-
|
|
26
|
-
>>> model.save('brown.embedding')
|
|
27
|
-
>>> new_model = gensim.models.Word2Vec.load('brown.embedding')
|
|
28
|
-
|
|
29
|
-
The model will be the list of words with their embedding. We can easily get the vector representation of a word.
|
|
30
|
-
>>> len(new_model['university'])
|
|
31
|
-
100
|
|
32
|
-
|
|
33
|
-
There are some supporting functions already implemented in Gensim to manipulate with word embeddings.
|
|
34
|
-
For example, to compute the cosine similarity between 2 words:
|
|
35
|
-
|
|
36
|
-
>>> new_model.similarity('university','school') > 0.3
|
|
37
|
-
True
|
|
38
|
-
|
|
39
|
-
---------------------------
|
|
40
|
-
Using the pre-trained model
|
|
41
|
-
---------------------------
|
|
42
|
-
|
|
43
|
-
NLTK includes a pre-trained model which is part of a model that is trained on 100 billion words from the Google News Dataset.
|
|
44
|
-
The full model is from https://code.google.com/p/word2vec/ (about 3 GB).
|
|
45
|
-
|
|
46
|
-
>>> from nltk.data import find
|
|
47
|
-
>>> word2vec_sample = str(find('models/word2vec_sample/pruned.word2vec.txt'))
|
|
48
|
-
>>> model = gensim.models.
|
|
49
|
-
|
|
50
|
-
We pruned the model to only include the most common words (~44k words).
|
|
51
|
-
|
|
52
|
-
>>> len(model.vocab)
|
|
53
|
-
43981
|
|
54
|
-
|
|
55
|
-
Each word is represented in the space of 300 dimensions:
|
|
56
|
-
|
|
57
|
-
>>> len(model['university'])
|
|
58
|
-
300
|
|
59
|
-
|
|
60
|
-
Finding the top n words that are similar to a target word is simple. The result is the list of n words with the score.
|
|
61
|
-
|
|
62
|
-
>>> model.most_similar(positive=['university'], topn = 3)
|
|
63
|
-
[(u'universities', 0.70039...), (u'faculty', 0.67809...), (u'undergraduate', 0.65870...)]
|
|
64
|
-
|
|
65
|
-
Finding a word that is not in a list is also supported, although, implementing this by yourself is simple.
|
|
66
|
-
|
|
67
|
-
>>> model.doesnt_match('breakfast cereal dinner lunch'.split())
|
|
68
|
-
'cereal'
|
|
69
|
-
|
|
70
|
-
Mikolov et al. (2013) figured out that word embedding captures much of syntactic and semantic regularities. For example,
|
|
71
|
-
the vector 'King - Man + Woman' is close to 'Queen' and 'Germany - Berlin + Paris' is close to 'France'.
|
|
72
|
-
|
|
73
|
-
>>> model.most_similar(positive=['woman','king'], negative=['man'], topn = 1)
|
|
74
|
-
[(u'queen', 0.71181...)]
|
|
75
|
-
|
|
76
|
-
>>> model.most_similar(positive=['Paris','Germany'], negative=['Berlin'], topn = 1)
|
|
77
|
-
[(u'France', 0.78840...)]
|
|
78
|
-
|
|
79
|
-
We can visualize the word embeddings using t-SNE (http://lvdmaaten.github.io/tsne/). For this demonstration, we visualize the first 1000 words.
|
|
80
|
-
|
|
81
|
-
| import numpy as np
|
|
82
|
-
| labels = []
|
|
83
|
-
| count = 0
|
|
84
|
-
| max_count = 1000
|
|
85
|
-
| X = np.zeros(shape=(max_count,len(model['university'])))
|
|
86
|
-
|
|
|
87
|
-
| for term in model.vocab:
|
|
88
|
-
| X[count] = model[term]
|
|
89
|
-
| labels.append(term)
|
|
90
|
-
| count+= 1
|
|
91
|
-
| if count >= max_count: break
|
|
92
|
-
|
|
|
93
|
-
| # It is recommended to use PCA first to reduce to ~50 dimensions
|
|
94
|
-
| from sklearn.decomposition import PCA
|
|
95
|
-
| pca = PCA(n_components=50)
|
|
96
|
-
| X_50 = pca.fit_transform(X)
|
|
97
|
-
|
|
|
98
|
-
| # Using TSNE to further reduce to 2 dimensions
|
|
99
|
-
| from sklearn.manifold import TSNE
|
|
100
|
-
| model_tsne = TSNE(n_components=2, random_state=0)
|
|
101
|
-
| Y = model_tsne.fit_transform(X_50)
|
|
102
|
-
|
|
|
103
|
-
| # Show the scatter plot
|
|
104
|
-
| import matplotlib.pyplot as plt
|
|
105
|
-
| plt.scatter(Y[:,0], Y[:,1], 20)
|
|
106
|
-
|
|
|
107
|
-
| # Add labels
|
|
108
|
-
| for label, x, y in zip(labels, Y[:, 0], Y[:, 1]):
|
|
109
|
-
| plt.annotate(label, xy = (x,y), xytext = (0, 0), textcoords = 'offset points', size = 10)
|
|
110
|
-
|
|
|
111
|
-
| plt.show()
|
|
112
|
-
|
|
113
|
-
------------------------------
|
|
114
|
-
Prune the trained binary model
|
|
115
|
-
------------------------------
|
|
116
|
-
|
|
117
|
-
Here is the supporting code to extract part of the binary model (GoogleNews-vectors-negative300.bin.gz) from https://code.google.com/p/word2vec/
|
|
118
|
-
We use this code to get the `word2vec_sample` model.
|
|
119
|
-
|
|
120
|
-
| import gensim
|
|
121
|
-
| from gensim.models.word2vec import Word2Vec
|
|
122
|
-
| # Load the binary model
|
|
123
|
-
| model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz', binary = True);
|
|
124
|
-
|
|
|
125
|
-
| # Only output word that appear in the Brown corpus
|
|
126
|
-
| from nltk.corpus import brown
|
|
127
|
-
| words = set(brown.words())
|
|
128
|
-
| print (len(words))
|
|
129
|
-
|
|
|
130
|
-
| # Output presented word to a temporary file
|
|
131
|
-
| out_file = 'pruned.word2vec.txt'
|
|
132
|
-
| f = open(out_file,'wb')
|
|
133
|
-
|
|
|
134
|
-
| word_presented = words.intersection(model.vocab.keys())
|
|
135
|
-
| f.write('{} {}\n'.format(len(word_presented),len(model['word'])))
|
|
136
|
-
|
|
|
137
|
-
| for word in word_presented:
|
|
138
|
-
| f.write('{} {}\n'.format(word, ' '.join(str(value) for value in model[word])))
|
|
139
|
-
|
|
|
140
|
-
| f.close()
|
|
141
|
-
|
|
1
|
+
.. Copyright (C) 2001-2018 NLTK Project
|
|
2
|
+
.. For license information, see LICENSE.TXT
|
|
3
|
+
|
|
4
|
+
=======================================
|
|
5
|
+
Demonstrate word embedding using Gensim
|
|
6
|
+
=======================================
|
|
7
|
+
|
|
8
|
+
We demonstrate three functions:
|
|
9
|
+
- Train the word embeddings using brown corpus;
|
|
10
|
+
- Load the pre-trained model and perform simple tasks; and
|
|
11
|
+
- Pruning the pre-trained binary model.
|
|
12
|
+
|
|
13
|
+
>>> import gensim
|
|
14
|
+
|
|
15
|
+
---------------
|
|
16
|
+
Train the model
|
|
17
|
+
---------------
|
|
18
|
+
|
|
19
|
+
Here we train a word embedding using the Brown Corpus:
|
|
20
|
+
|
|
21
|
+
>>> from nltk.corpus import brown
|
|
22
|
+
>>> model = gensim.models.Word2Vec(brown.sents())
|
|
23
|
+
|
|
24
|
+
It might take some time to train the model. So, after it is trained, it can be saved as follows:
|
|
25
|
+
|
|
26
|
+
>>> model.save('brown.embedding')
|
|
27
|
+
>>> new_model = gensim.models.Word2Vec.load('brown.embedding')
|
|
28
|
+
|
|
29
|
+
The model will be the list of words with their embedding. We can easily get the vector representation of a word.
|
|
30
|
+
>>> len(new_model['university'])
|
|
31
|
+
100
|
|
32
|
+
|
|
33
|
+
There are some supporting functions already implemented in Gensim to manipulate with word embeddings.
|
|
34
|
+
For example, to compute the cosine similarity between 2 words:
|
|
35
|
+
|
|
36
|
+
>>> new_model.similarity('university','school') > 0.3
|
|
37
|
+
True
|
|
38
|
+
|
|
39
|
+
---------------------------
|
|
40
|
+
Using the pre-trained model
|
|
41
|
+
---------------------------
|
|
42
|
+
|
|
43
|
+
NLTK includes a pre-trained model which is part of a model that is trained on 100 billion words from the Google News Dataset.
|
|
44
|
+
The full model is from https://code.google.com/p/word2vec/ (about 3 GB).
|
|
45
|
+
|
|
46
|
+
>>> from nltk.data import find
|
|
47
|
+
>>> word2vec_sample = str(find('models/word2vec_sample/pruned.word2vec.txt'))
|
|
48
|
+
>>> model = gensim.models.KeyedVectors.load_word2vec_format(word2vec_sample, binary=False)
|
|
49
|
+
|
|
50
|
+
We pruned the model to only include the most common words (~44k words).
|
|
51
|
+
|
|
52
|
+
>>> len(model.vocab)
|
|
53
|
+
43981
|
|
54
|
+
|
|
55
|
+
Each word is represented in the space of 300 dimensions:
|
|
56
|
+
|
|
57
|
+
>>> len(model['university'])
|
|
58
|
+
300
|
|
59
|
+
|
|
60
|
+
Finding the top n words that are similar to a target word is simple. The result is the list of n words with the score.
|
|
61
|
+
|
|
62
|
+
>>> model.most_similar(positive=['university'], topn = 3)
|
|
63
|
+
[(u'universities', 0.70039...), (u'faculty', 0.67809...), (u'undergraduate', 0.65870...)]
|
|
64
|
+
|
|
65
|
+
Finding a word that is not in a list is also supported, although, implementing this by yourself is simple.
|
|
66
|
+
|
|
67
|
+
>>> model.doesnt_match('breakfast cereal dinner lunch'.split())
|
|
68
|
+
'cereal'
|
|
69
|
+
|
|
70
|
+
Mikolov et al. (2013) figured out that word embedding captures much of syntactic and semantic regularities. For example,
|
|
71
|
+
the vector 'King - Man + Woman' is close to 'Queen' and 'Germany - Berlin + Paris' is close to 'France'.
|
|
72
|
+
|
|
73
|
+
>>> model.most_similar(positive=['woman','king'], negative=['man'], topn = 1)
|
|
74
|
+
[(u'queen', 0.71181...)]
|
|
75
|
+
|
|
76
|
+
>>> model.most_similar(positive=['Paris','Germany'], negative=['Berlin'], topn = 1)
|
|
77
|
+
[(u'France', 0.78840...)]
|
|
78
|
+
|
|
79
|
+
We can visualize the word embeddings using t-SNE (http://lvdmaaten.github.io/tsne/). For this demonstration, we visualize the first 1000 words.
|
|
80
|
+
|
|
81
|
+
| import numpy as np
|
|
82
|
+
| labels = []
|
|
83
|
+
| count = 0
|
|
84
|
+
| max_count = 1000
|
|
85
|
+
| X = np.zeros(shape=(max_count,len(model['university'])))
|
|
86
|
+
|
|
|
87
|
+
| for term in model.vocab:
|
|
88
|
+
| X[count] = model[term]
|
|
89
|
+
| labels.append(term)
|
|
90
|
+
| count+= 1
|
|
91
|
+
| if count >= max_count: break
|
|
92
|
+
|
|
|
93
|
+
| # It is recommended to use PCA first to reduce to ~50 dimensions
|
|
94
|
+
| from sklearn.decomposition import PCA
|
|
95
|
+
| pca = PCA(n_components=50)
|
|
96
|
+
| X_50 = pca.fit_transform(X)
|
|
97
|
+
|
|
|
98
|
+
| # Using TSNE to further reduce to 2 dimensions
|
|
99
|
+
| from sklearn.manifold import TSNE
|
|
100
|
+
| model_tsne = TSNE(n_components=2, random_state=0)
|
|
101
|
+
| Y = model_tsne.fit_transform(X_50)
|
|
102
|
+
|
|
|
103
|
+
| # Show the scatter plot
|
|
104
|
+
| import matplotlib.pyplot as plt
|
|
105
|
+
| plt.scatter(Y[:,0], Y[:,1], 20)
|
|
106
|
+
|
|
|
107
|
+
| # Add labels
|
|
108
|
+
| for label, x, y in zip(labels, Y[:, 0], Y[:, 1]):
|
|
109
|
+
| plt.annotate(label, xy = (x,y), xytext = (0, 0), textcoords = 'offset points', size = 10)
|
|
110
|
+
|
|
|
111
|
+
| plt.show()
|
|
112
|
+
|
|
113
|
+
------------------------------
|
|
114
|
+
Prune the trained binary model
|
|
115
|
+
------------------------------
|
|
116
|
+
|
|
117
|
+
Here is the supporting code to extract part of the binary model (GoogleNews-vectors-negative300.bin.gz) from https://code.google.com/p/word2vec/
|
|
118
|
+
We use this code to get the `word2vec_sample` model.
|
|
119
|
+
|
|
120
|
+
| import gensim
|
|
121
|
+
| from gensim.models.word2vec import Word2Vec
|
|
122
|
+
| # Load the binary model
|
|
123
|
+
| model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz', binary = True);
|
|
124
|
+
|
|
|
125
|
+
| # Only output word that appear in the Brown corpus
|
|
126
|
+
| from nltk.corpus import brown
|
|
127
|
+
| words = set(brown.words())
|
|
128
|
+
| print (len(words))
|
|
129
|
+
|
|
|
130
|
+
| # Output presented word to a temporary file
|
|
131
|
+
| out_file = 'pruned.word2vec.txt'
|
|
132
|
+
| f = open(out_file,'wb')
|
|
133
|
+
|
|
|
134
|
+
| word_presented = words.intersection(model.vocab.keys())
|
|
135
|
+
| f.write('{} {}\n'.format(len(word_presented),len(model['word'])))
|
|
136
|
+
|
|
|
137
|
+
| for word in word_presented:
|
|
138
|
+
| f.write('{} {}\n'.format(word, ' '.join(str(value) for value in model[word])))
|
|
139
|
+
|
|
|
140
|
+
| f.close()
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
from __future__ import absolute_import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from __future__ import absolute_import
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def setup_module(module):
|
|
6
|
+
from nose import SkipTest
|
|
7
|
+
try:
|
|
8
|
+
import gensim
|
|
9
|
+
except ImportError:
|
|
10
|
+
raise SkipTest("Gensim doctest requires gensim")
|