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,165 +1,165 @@
|
|
|
1
|
-
# Natural Language Toolkit: PanLex Corpus Reader
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: David Kamholz <kamholz@panlex.org>
|
|
5
|
-
# URL: <http://nltk.org/>
|
|
6
|
-
# For license information, see LICENSE.TXT
|
|
7
|
-
|
|
8
|
-
"""
|
|
9
|
-
CorpusReader for PanLex Lite, a stripped down version of PanLex distributed
|
|
10
|
-
as an SQLite database. See the README.txt in the panlex_lite corpus directory
|
|
11
|
-
for more information on PanLex Lite.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import os
|
|
15
|
-
import sqlite3
|
|
16
|
-
|
|
17
|
-
from nltk.corpus.reader.api import CorpusReader
|
|
18
|
-
|
|
19
|
-
class PanLexLiteCorpusReader(CorpusReader):
|
|
20
|
-
MEANING_Q = """
|
|
21
|
-
SELECT dnx2.mn, dnx2.uq, dnx2.ap, dnx2.ui, ex2.tt, ex2.lv
|
|
22
|
-
FROM dnx
|
|
23
|
-
JOIN ex ON (ex.ex = dnx.ex)
|
|
24
|
-
JOIN dnx dnx2 ON (dnx2.mn = dnx.mn)
|
|
25
|
-
JOIN ex ex2 ON (ex2.ex = dnx2.ex)
|
|
26
|
-
WHERE dnx.ex != dnx2.ex AND ex.tt = ? AND ex.lv = ?
|
|
27
|
-
ORDER BY dnx2.uq DESC
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
TRANSLATION_Q = """
|
|
31
|
-
SELECT s.tt, sum(s.uq) AS trq FROM (
|
|
32
|
-
SELECT ex2.tt, max(dnx.uq) AS uq
|
|
33
|
-
FROM dnx
|
|
34
|
-
JOIN ex ON (ex.ex = dnx.ex)
|
|
35
|
-
JOIN dnx dnx2 ON (dnx2.mn = dnx.mn)
|
|
36
|
-
JOIN ex ex2 ON (ex2.ex = dnx2.ex)
|
|
37
|
-
WHERE dnx.ex != dnx2.ex AND ex.lv = ? AND ex.tt = ? AND ex2.lv = ?
|
|
38
|
-
GROUP BY ex2.tt, dnx.ui
|
|
39
|
-
) s
|
|
40
|
-
GROUP BY s.tt
|
|
41
|
-
ORDER BY trq DESC, s.tt
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
def __init__(self, root):
|
|
45
|
-
self._c = sqlite3.connect(os.path.join(root, 'db.sqlite')).cursor()
|
|
46
|
-
|
|
47
|
-
self._uid_lv = {}
|
|
48
|
-
self._lv_uid = {}
|
|
49
|
-
|
|
50
|
-
for row in self._c.execute('SELECT uid, lv FROM lv'):
|
|
51
|
-
self._uid_lv[row[0]] = row[1]
|
|
52
|
-
self._lv_uid[row[1]] = row[0]
|
|
53
|
-
|
|
54
|
-
def language_varieties(self, lc=None):
|
|
55
|
-
"""
|
|
56
|
-
Return a list of PanLex language varieties.
|
|
57
|
-
|
|
58
|
-
:param lc: ISO 639 alpha-3 code. If specified, filters returned varieties
|
|
59
|
-
by this code. If unspecified, all varieties are returned.
|
|
60
|
-
:return: the specified language varieties as a list of tuples. The first
|
|
61
|
-
element is the language variety's seven-character uniform identifier,
|
|
62
|
-
and the second element is its default name.
|
|
63
|
-
:rtype: list(tuple)
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
if lc == None:
|
|
67
|
-
return self._c.execute('SELECT uid, tt FROM lv ORDER BY uid').fetchall()
|
|
68
|
-
else:
|
|
69
|
-
return self._c.execute('SELECT uid, tt FROM lv WHERE lc = ? ORDER BY uid', (lc,)).fetchall()
|
|
70
|
-
|
|
71
|
-
def meanings(self, expr_uid, expr_tt):
|
|
72
|
-
"""
|
|
73
|
-
Return a list of meanings for an expression.
|
|
74
|
-
|
|
75
|
-
:param expr_uid: the expression's language variety, as a seven-character
|
|
76
|
-
uniform identifier.
|
|
77
|
-
:param expr_tt: the expression's text.
|
|
78
|
-
:return: a list of Meaning objects.
|
|
79
|
-
:rtype: list(Meaning)
|
|
80
|
-
"""
|
|
81
|
-
|
|
82
|
-
expr_lv = self._uid_lv[expr_uid]
|
|
83
|
-
|
|
84
|
-
mn_info = {}
|
|
85
|
-
|
|
86
|
-
for i in self._c.execute(self.MEANING_Q, (expr_tt, expr_lv)):
|
|
87
|
-
mn = i[0]
|
|
88
|
-
uid = self._lv_uid[i[5]]
|
|
89
|
-
|
|
90
|
-
if not mn in mn_info:
|
|
91
|
-
mn_info[mn] = { 'uq': i[1], 'ap': i[2], 'ui': i[3], 'ex': { expr_uid: [expr_tt] } }
|
|
92
|
-
|
|
93
|
-
if not uid in mn_info[mn]['ex']:
|
|
94
|
-
mn_info[mn]['ex'][uid] = []
|
|
95
|
-
|
|
96
|
-
mn_info[mn]['ex'][uid].append(i[4])
|
|
97
|
-
|
|
98
|
-
return [ Meaning(mn, mn_info[mn]) for mn in mn_info ]
|
|
99
|
-
|
|
100
|
-
def translations(self, from_uid, from_tt, to_uid):
|
|
101
|
-
"""
|
|
102
|
-
Return a list of translations for an expression into a single language
|
|
103
|
-
variety.
|
|
104
|
-
|
|
105
|
-
:param from_uid: the source expression's language variety, as a
|
|
106
|
-
seven-character uniform identifier.
|
|
107
|
-
:param from_tt: the source expression's text.
|
|
108
|
-
:param to_uid: the target language variety, as a seven-character
|
|
109
|
-
uniform identifier.
|
|
110
|
-
:return a list of translation tuples. The first element is the expression
|
|
111
|
-
text and the second element is the translation quality.
|
|
112
|
-
:rtype: list(tuple)
|
|
113
|
-
"""
|
|
114
|
-
|
|
115
|
-
from_lv = self._uid_lv[from_uid]
|
|
116
|
-
to_lv = self._uid_lv[to_uid]
|
|
117
|
-
|
|
118
|
-
return self._c.execute(self.TRANSLATION_Q, (from_lv, from_tt, to_lv)).fetchall()
|
|
119
|
-
|
|
120
|
-
class Meaning(dict):
|
|
121
|
-
"""
|
|
122
|
-
Represents a single PanLex meaning. A meaning is a translation set derived
|
|
123
|
-
from a single source.
|
|
124
|
-
"""
|
|
125
|
-
|
|
126
|
-
def __init__(self, mn, attr):
|
|
127
|
-
super(Meaning, self).__init__(**attr)
|
|
128
|
-
self['mn'] = mn
|
|
129
|
-
|
|
130
|
-
def id(self):
|
|
131
|
-
"""
|
|
132
|
-
:return: the meaning's id.
|
|
133
|
-
:rtype: int
|
|
134
|
-
"""
|
|
135
|
-
return self['mn']
|
|
136
|
-
|
|
137
|
-
def quality(self):
|
|
138
|
-
"""
|
|
139
|
-
:return: the meaning's source's quality (0=worst, 9=best).
|
|
140
|
-
:rtype: int
|
|
141
|
-
"""
|
|
142
|
-
return self['uq']
|
|
143
|
-
|
|
144
|
-
def source(self):
|
|
145
|
-
"""
|
|
146
|
-
:return: the meaning's source id.
|
|
147
|
-
:rtype: int
|
|
148
|
-
"""
|
|
149
|
-
return self['ap']
|
|
150
|
-
|
|
151
|
-
def source_group(self):
|
|
152
|
-
"""
|
|
153
|
-
:return: the meaning's source group id.
|
|
154
|
-
:rtype: int
|
|
155
|
-
"""
|
|
156
|
-
return self['ui']
|
|
157
|
-
|
|
158
|
-
def expressions(self):
|
|
159
|
-
"""
|
|
160
|
-
:return: the meaning's expressions as a dictionary whose keys are language
|
|
161
|
-
variety uniform identifiers and whose values are lists of expression
|
|
162
|
-
texts.
|
|
163
|
-
:rtype: dict
|
|
164
|
-
"""
|
|
165
|
-
return self['ex']
|
|
1
|
+
# Natural Language Toolkit: PanLex Corpus Reader
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: David Kamholz <kamholz@panlex.org>
|
|
5
|
+
# URL: <http://nltk.org/>
|
|
6
|
+
# For license information, see LICENSE.TXT
|
|
7
|
+
|
|
8
|
+
"""
|
|
9
|
+
CorpusReader for PanLex Lite, a stripped down version of PanLex distributed
|
|
10
|
+
as an SQLite database. See the README.txt in the panlex_lite corpus directory
|
|
11
|
+
for more information on PanLex Lite.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import sqlite3
|
|
16
|
+
|
|
17
|
+
from nltk.corpus.reader.api import CorpusReader
|
|
18
|
+
|
|
19
|
+
class PanLexLiteCorpusReader(CorpusReader):
|
|
20
|
+
MEANING_Q = """
|
|
21
|
+
SELECT dnx2.mn, dnx2.uq, dnx2.ap, dnx2.ui, ex2.tt, ex2.lv
|
|
22
|
+
FROM dnx
|
|
23
|
+
JOIN ex ON (ex.ex = dnx.ex)
|
|
24
|
+
JOIN dnx dnx2 ON (dnx2.mn = dnx.mn)
|
|
25
|
+
JOIN ex ex2 ON (ex2.ex = dnx2.ex)
|
|
26
|
+
WHERE dnx.ex != dnx2.ex AND ex.tt = ? AND ex.lv = ?
|
|
27
|
+
ORDER BY dnx2.uq DESC
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
TRANSLATION_Q = """
|
|
31
|
+
SELECT s.tt, sum(s.uq) AS trq FROM (
|
|
32
|
+
SELECT ex2.tt, max(dnx.uq) AS uq
|
|
33
|
+
FROM dnx
|
|
34
|
+
JOIN ex ON (ex.ex = dnx.ex)
|
|
35
|
+
JOIN dnx dnx2 ON (dnx2.mn = dnx.mn)
|
|
36
|
+
JOIN ex ex2 ON (ex2.ex = dnx2.ex)
|
|
37
|
+
WHERE dnx.ex != dnx2.ex AND ex.lv = ? AND ex.tt = ? AND ex2.lv = ?
|
|
38
|
+
GROUP BY ex2.tt, dnx.ui
|
|
39
|
+
) s
|
|
40
|
+
GROUP BY s.tt
|
|
41
|
+
ORDER BY trq DESC, s.tt
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
def __init__(self, root):
|
|
45
|
+
self._c = sqlite3.connect(os.path.join(root, 'db.sqlite')).cursor()
|
|
46
|
+
|
|
47
|
+
self._uid_lv = {}
|
|
48
|
+
self._lv_uid = {}
|
|
49
|
+
|
|
50
|
+
for row in self._c.execute('SELECT uid, lv FROM lv'):
|
|
51
|
+
self._uid_lv[row[0]] = row[1]
|
|
52
|
+
self._lv_uid[row[1]] = row[0]
|
|
53
|
+
|
|
54
|
+
def language_varieties(self, lc=None):
|
|
55
|
+
"""
|
|
56
|
+
Return a list of PanLex language varieties.
|
|
57
|
+
|
|
58
|
+
:param lc: ISO 639 alpha-3 code. If specified, filters returned varieties
|
|
59
|
+
by this code. If unspecified, all varieties are returned.
|
|
60
|
+
:return: the specified language varieties as a list of tuples. The first
|
|
61
|
+
element is the language variety's seven-character uniform identifier,
|
|
62
|
+
and the second element is its default name.
|
|
63
|
+
:rtype: list(tuple)
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
if lc == None:
|
|
67
|
+
return self._c.execute('SELECT uid, tt FROM lv ORDER BY uid').fetchall()
|
|
68
|
+
else:
|
|
69
|
+
return self._c.execute('SELECT uid, tt FROM lv WHERE lc = ? ORDER BY uid', (lc,)).fetchall()
|
|
70
|
+
|
|
71
|
+
def meanings(self, expr_uid, expr_tt):
|
|
72
|
+
"""
|
|
73
|
+
Return a list of meanings for an expression.
|
|
74
|
+
|
|
75
|
+
:param expr_uid: the expression's language variety, as a seven-character
|
|
76
|
+
uniform identifier.
|
|
77
|
+
:param expr_tt: the expression's text.
|
|
78
|
+
:return: a list of Meaning objects.
|
|
79
|
+
:rtype: list(Meaning)
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
expr_lv = self._uid_lv[expr_uid]
|
|
83
|
+
|
|
84
|
+
mn_info = {}
|
|
85
|
+
|
|
86
|
+
for i in self._c.execute(self.MEANING_Q, (expr_tt, expr_lv)):
|
|
87
|
+
mn = i[0]
|
|
88
|
+
uid = self._lv_uid[i[5]]
|
|
89
|
+
|
|
90
|
+
if not mn in mn_info:
|
|
91
|
+
mn_info[mn] = { 'uq': i[1], 'ap': i[2], 'ui': i[3], 'ex': { expr_uid: [expr_tt] } }
|
|
92
|
+
|
|
93
|
+
if not uid in mn_info[mn]['ex']:
|
|
94
|
+
mn_info[mn]['ex'][uid] = []
|
|
95
|
+
|
|
96
|
+
mn_info[mn]['ex'][uid].append(i[4])
|
|
97
|
+
|
|
98
|
+
return [ Meaning(mn, mn_info[mn]) for mn in mn_info ]
|
|
99
|
+
|
|
100
|
+
def translations(self, from_uid, from_tt, to_uid):
|
|
101
|
+
"""
|
|
102
|
+
Return a list of translations for an expression into a single language
|
|
103
|
+
variety.
|
|
104
|
+
|
|
105
|
+
:param from_uid: the source expression's language variety, as a
|
|
106
|
+
seven-character uniform identifier.
|
|
107
|
+
:param from_tt: the source expression's text.
|
|
108
|
+
:param to_uid: the target language variety, as a seven-character
|
|
109
|
+
uniform identifier.
|
|
110
|
+
:return a list of translation tuples. The first element is the expression
|
|
111
|
+
text and the second element is the translation quality.
|
|
112
|
+
:rtype: list(tuple)
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
from_lv = self._uid_lv[from_uid]
|
|
116
|
+
to_lv = self._uid_lv[to_uid]
|
|
117
|
+
|
|
118
|
+
return self._c.execute(self.TRANSLATION_Q, (from_lv, from_tt, to_lv)).fetchall()
|
|
119
|
+
|
|
120
|
+
class Meaning(dict):
|
|
121
|
+
"""
|
|
122
|
+
Represents a single PanLex meaning. A meaning is a translation set derived
|
|
123
|
+
from a single source.
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
def __init__(self, mn, attr):
|
|
127
|
+
super(Meaning, self).__init__(**attr)
|
|
128
|
+
self['mn'] = mn
|
|
129
|
+
|
|
130
|
+
def id(self):
|
|
131
|
+
"""
|
|
132
|
+
:return: the meaning's id.
|
|
133
|
+
:rtype: int
|
|
134
|
+
"""
|
|
135
|
+
return self['mn']
|
|
136
|
+
|
|
137
|
+
def quality(self):
|
|
138
|
+
"""
|
|
139
|
+
:return: the meaning's source's quality (0=worst, 9=best).
|
|
140
|
+
:rtype: int
|
|
141
|
+
"""
|
|
142
|
+
return self['uq']
|
|
143
|
+
|
|
144
|
+
def source(self):
|
|
145
|
+
"""
|
|
146
|
+
:return: the meaning's source id.
|
|
147
|
+
:rtype: int
|
|
148
|
+
"""
|
|
149
|
+
return self['ap']
|
|
150
|
+
|
|
151
|
+
def source_group(self):
|
|
152
|
+
"""
|
|
153
|
+
:return: the meaning's source group id.
|
|
154
|
+
:rtype: int
|
|
155
|
+
"""
|
|
156
|
+
return self['ui']
|
|
157
|
+
|
|
158
|
+
def expressions(self):
|
|
159
|
+
"""
|
|
160
|
+
:return: the meaning's expressions as a dictionary whose keys are language
|
|
161
|
+
variety uniform identifiers and whose values are lists of expression
|
|
162
|
+
texts.
|
|
163
|
+
:rtype: dict
|
|
164
|
+
"""
|
|
165
|
+
return self['ex']
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# Natural Language Toolkit:
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Piotr Kasprzyk <p.j.kasprzyk@gmail.com>
|
|
5
|
+
# URL: <http://nltk.org/>
|
|
6
|
+
# For license information, see LICENSE.TXT
|
|
7
|
+
|
|
8
|
+
from six import string_types
|
|
9
|
+
|
|
10
|
+
from nltk.corpus.reader.api import *
|
|
11
|
+
from nltk.corpus.reader.xmldocs import XMLCorpusReader
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
PARA = re.compile(r'<p(?: [^>]*){0,1}>(.*?)</p>')
|
|
15
|
+
SENT = re.compile(r'<s(?: [^>]*){0,1}>(.*?)</s>')
|
|
16
|
+
|
|
17
|
+
TAGGEDWORD = re.compile(r'<([wc](?: [^>]*){0,1}>)(.*?)</[wc]>')
|
|
18
|
+
WORD = re.compile(r'<[wc](?: [^>]*){0,1}>(.*?)</[wc]>')
|
|
19
|
+
|
|
20
|
+
TYPE = re.compile(r'type="(.*?)"')
|
|
21
|
+
ANA = re.compile(r'ana="(.*?)"')
|
|
22
|
+
|
|
23
|
+
TEXTID = re.compile(r'text id="(.*?)"')
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class TEICorpusView(StreamBackedCorpusView):
|
|
27
|
+
def __init__(self, corpus_file,
|
|
28
|
+
tagged, group_by_sent, group_by_para,
|
|
29
|
+
tagset=None, head_len=0, textids=None):
|
|
30
|
+
|
|
31
|
+
self._tagged = tagged
|
|
32
|
+
self._textids = textids
|
|
33
|
+
|
|
34
|
+
self._group_by_sent = group_by_sent
|
|
35
|
+
self._group_by_para = group_by_para
|
|
36
|
+
# WARNING -- skip header
|
|
37
|
+
StreamBackedCorpusView.__init__(self, corpus_file, startpos=head_len)
|
|
38
|
+
|
|
39
|
+
_pagesize = 4096
|
|
40
|
+
|
|
41
|
+
def read_block(self, stream):
|
|
42
|
+
block = stream.readlines(self._pagesize)
|
|
43
|
+
block = concat(block)
|
|
44
|
+
while (block.count('<text id') > block.count('</text>')) \
|
|
45
|
+
or block.count('<text id') == 0:
|
|
46
|
+
tmp = stream.readline()
|
|
47
|
+
if len(tmp) <= 0:
|
|
48
|
+
break
|
|
49
|
+
block += tmp
|
|
50
|
+
|
|
51
|
+
block = block.replace('\n', '')
|
|
52
|
+
|
|
53
|
+
textids = TEXTID.findall(block)
|
|
54
|
+
if self._textids:
|
|
55
|
+
for tid in textids:
|
|
56
|
+
if tid not in self._textids:
|
|
57
|
+
beg = block.find(tid) - 1
|
|
58
|
+
end = block[beg:].find('</text>') + len('</text>')
|
|
59
|
+
block = block[:beg] + block[beg + end:]
|
|
60
|
+
|
|
61
|
+
output = []
|
|
62
|
+
for para_str in PARA.findall(block):
|
|
63
|
+
para = []
|
|
64
|
+
for sent_str in SENT.findall(para_str):
|
|
65
|
+
if not self._tagged:
|
|
66
|
+
sent = WORD.findall(sent_str)
|
|
67
|
+
else:
|
|
68
|
+
sent = list(
|
|
69
|
+
map(self._parse_tag, TAGGEDWORD.findall(sent_str)))
|
|
70
|
+
if self._group_by_sent:
|
|
71
|
+
para.append(sent)
|
|
72
|
+
else:
|
|
73
|
+
para.extend(sent)
|
|
74
|
+
if self._group_by_para:
|
|
75
|
+
output.append(para)
|
|
76
|
+
else:
|
|
77
|
+
output.extend(para)
|
|
78
|
+
return output
|
|
79
|
+
|
|
80
|
+
def _parse_tag(self, tag_word_tuple):
|
|
81
|
+
(tag, word) = tag_word_tuple
|
|
82
|
+
if tag.startswith('w'):
|
|
83
|
+
tag = ANA.search(tag).group(1)
|
|
84
|
+
else: # tag.startswith('c')
|
|
85
|
+
tag = TYPE.search(tag).group(1)
|
|
86
|
+
return word, tag
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class Pl196xCorpusReader(CategorizedCorpusReader, XMLCorpusReader):
|
|
90
|
+
head_len = 2770
|
|
91
|
+
|
|
92
|
+
def __init__(self, *args, **kwargs):
|
|
93
|
+
if 'textid_file' in kwargs:
|
|
94
|
+
self._textids = kwargs['textid_file']
|
|
95
|
+
else:
|
|
96
|
+
self._textids = None
|
|
97
|
+
|
|
98
|
+
XMLCorpusReader.__init__(self, *args)
|
|
99
|
+
CategorizedCorpusReader.__init__(self, kwargs)
|
|
100
|
+
|
|
101
|
+
self._init_textids()
|
|
102
|
+
|
|
103
|
+
def _init_textids(self):
|
|
104
|
+
self._f2t = defaultdict(list)
|
|
105
|
+
self._t2f = defaultdict(list)
|
|
106
|
+
if self._textids is not None:
|
|
107
|
+
with open(self._textids) as fp:
|
|
108
|
+
for line in fp:
|
|
109
|
+
line = line.strip()
|
|
110
|
+
file_id, text_ids = line.split(' ', 1)
|
|
111
|
+
if file_id not in self.fileids():
|
|
112
|
+
raise ValueError(
|
|
113
|
+
'In text_id mapping file %s: %s not found'
|
|
114
|
+
% (self._textids, file_id)
|
|
115
|
+
)
|
|
116
|
+
for text_id in text_ids.split(self._delimiter):
|
|
117
|
+
self._add_textids(file_id, text_id)
|
|
118
|
+
|
|
119
|
+
def _add_textids(self, file_id, text_id):
|
|
120
|
+
self._f2t[file_id].append(text_id)
|
|
121
|
+
self._t2f[text_id].append(file_id)
|
|
122
|
+
|
|
123
|
+
def _resolve(self, fileids, categories, textids=None):
|
|
124
|
+
tmp = None
|
|
125
|
+
if len(filter(lambda accessor: accessor is None,
|
|
126
|
+
(fileids, categories, textids))) != 1:
|
|
127
|
+
|
|
128
|
+
raise ValueError('Specify exactly one of: fileids, '
|
|
129
|
+
'categories or textids')
|
|
130
|
+
|
|
131
|
+
if fileids is not None:
|
|
132
|
+
return fileids, None
|
|
133
|
+
|
|
134
|
+
if categories is not None:
|
|
135
|
+
return self.fileids(categories), None
|
|
136
|
+
|
|
137
|
+
if textids is not None:
|
|
138
|
+
if isinstance(textids, string_types):
|
|
139
|
+
textids = [textids]
|
|
140
|
+
files = sum((self._t2f[t] for t in textids), [])
|
|
141
|
+
tdict = dict()
|
|
142
|
+
for f in files:
|
|
143
|
+
tdict[f] = (set(self._f2t[f]) & set(textids))
|
|
144
|
+
return files, tdict
|
|
145
|
+
|
|
146
|
+
def decode_tag(self, tag):
|
|
147
|
+
# to be implemented
|
|
148
|
+
return tag
|
|
149
|
+
|
|
150
|
+
def textids(self, fileids=None, categories=None):
|
|
151
|
+
"""
|
|
152
|
+
In the pl196x corpus each category is stored in single
|
|
153
|
+
file and thus both methods provide identical functionality. In order
|
|
154
|
+
to accommodate finer granularity, a non-standard textids() method was
|
|
155
|
+
implemented. All the main functions can be supplied with a list
|
|
156
|
+
of required chunks---giving much more control to the user.
|
|
157
|
+
"""
|
|
158
|
+
fileids, _ = self._resolve(fileids, categories)
|
|
159
|
+
if fileids is None: return sorted(self._t2f)
|
|
160
|
+
|
|
161
|
+
if isinstance(fileids, string_types):
|
|
162
|
+
fileids = [fileids]
|
|
163
|
+
return sorted(sum((self._f2t[d] for d in fileids), []))
|
|
164
|
+
|
|
165
|
+
def words(self, fileids=None, categories=None, textids=None):
|
|
166
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
167
|
+
if fileids is None:
|
|
168
|
+
fileids = self._fileids
|
|
169
|
+
elif isinstance(fileids, string_types):
|
|
170
|
+
fileids = [fileids]
|
|
171
|
+
|
|
172
|
+
if textids:
|
|
173
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
174
|
+
False, False, False,
|
|
175
|
+
head_len=self.head_len,
|
|
176
|
+
textids=textids[fileid])
|
|
177
|
+
for fileid in fileids])
|
|
178
|
+
else:
|
|
179
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
180
|
+
False, False, False,
|
|
181
|
+
head_len=self.head_len)
|
|
182
|
+
for fileid in fileids])
|
|
183
|
+
|
|
184
|
+
def sents(self, fileids=None, categories=None, textids=None):
|
|
185
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
186
|
+
if fileids is None:
|
|
187
|
+
fileids = self._fileids
|
|
188
|
+
elif isinstance(fileids, string_types):
|
|
189
|
+
fileids = [fileids]
|
|
190
|
+
|
|
191
|
+
if textids:
|
|
192
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
193
|
+
False, True, False,
|
|
194
|
+
head_len=self.head_len,
|
|
195
|
+
textids=textids[fileid])
|
|
196
|
+
for fileid in fileids])
|
|
197
|
+
else:
|
|
198
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
199
|
+
False, True, False,
|
|
200
|
+
head_len=self.head_len)
|
|
201
|
+
for fileid in fileids])
|
|
202
|
+
|
|
203
|
+
def paras(self, fileids=None, categories=None, textids=None):
|
|
204
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
205
|
+
if fileids is None:
|
|
206
|
+
fileids = self._fileids
|
|
207
|
+
elif isinstance(fileids, string_types):
|
|
208
|
+
fileids = [fileids]
|
|
209
|
+
|
|
210
|
+
if textids:
|
|
211
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
212
|
+
False, True, True,
|
|
213
|
+
head_len=self.head_len,
|
|
214
|
+
textids=textids[fileid])
|
|
215
|
+
for fileid in fileids])
|
|
216
|
+
else:
|
|
217
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
218
|
+
False, True, True,
|
|
219
|
+
head_len=self.head_len)
|
|
220
|
+
for fileid in fileids])
|
|
221
|
+
|
|
222
|
+
def tagged_words(self, fileids=None, categories=None, textids=None):
|
|
223
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
224
|
+
if fileids is None:
|
|
225
|
+
fileids = self._fileids
|
|
226
|
+
elif isinstance(fileids, string_types):
|
|
227
|
+
fileids = [fileids]
|
|
228
|
+
|
|
229
|
+
if textids:
|
|
230
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
231
|
+
True, False, False,
|
|
232
|
+
head_len=self.head_len,
|
|
233
|
+
textids=textids[fileid])
|
|
234
|
+
for fileid in fileids])
|
|
235
|
+
else:
|
|
236
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
237
|
+
True, False, False,
|
|
238
|
+
head_len=self.head_len)
|
|
239
|
+
for fileid in fileids])
|
|
240
|
+
|
|
241
|
+
def tagged_sents(self, fileids=None, categories=None, textids=None):
|
|
242
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
243
|
+
if fileids is None:
|
|
244
|
+
fileids = self._fileids
|
|
245
|
+
elif isinstance(fileids, string_types):
|
|
246
|
+
fileids = [fileids]
|
|
247
|
+
|
|
248
|
+
if textids:
|
|
249
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
250
|
+
True, True, False,
|
|
251
|
+
head_len=self.head_len,
|
|
252
|
+
textids=textids[fileid])
|
|
253
|
+
for fileid in fileids])
|
|
254
|
+
else:
|
|
255
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
256
|
+
True, True, False,
|
|
257
|
+
head_len=self.head_len)
|
|
258
|
+
for fileid in fileids])
|
|
259
|
+
|
|
260
|
+
def tagged_paras(self, fileids=None, categories=None, textids=None):
|
|
261
|
+
fileids, textids = self._resolve(fileids, categories, textids)
|
|
262
|
+
if fileids is None:
|
|
263
|
+
fileids = self._fileids
|
|
264
|
+
elif isinstance(fileids, string_types):
|
|
265
|
+
fileids = [fileids]
|
|
266
|
+
|
|
267
|
+
if textids:
|
|
268
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
269
|
+
True, True, True,
|
|
270
|
+
head_len=self.head_len,
|
|
271
|
+
textids=textids[fileid])
|
|
272
|
+
for fileid in fileids])
|
|
273
|
+
else:
|
|
274
|
+
return concat([TEICorpusView(self.abspath(fileid),
|
|
275
|
+
True, True, True,
|
|
276
|
+
head_len=self.head_len)
|
|
277
|
+
for fileid in fileids])
|
|
278
|
+
|
|
279
|
+
def xml(self, fileids=None, categories=None):
|
|
280
|
+
fileids, _ = self._resolve(fileids, categories)
|
|
281
|
+
if len(fileids) == 1:
|
|
282
|
+
return XMLCorpusReader.xml(self, fileids[0])
|
|
283
|
+
else:
|
|
284
|
+
raise TypeError('Expected a single file')
|
|
285
|
+
|
|
286
|
+
def raw(self, fileids=None, categories=None):
|
|
287
|
+
fileids, _ = self._resolve(fileids, categories)
|
|
288
|
+
if fileids is None:
|
|
289
|
+
fileids = self._fileids
|
|
290
|
+
elif isinstance(fileids, string_types):
|
|
291
|
+
fileids = [fileids]
|
|
292
|
+
return concat([self.open(f).read() for f in fileids])
|