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,202 +1,208 @@
|
|
|
1
|
-
# Natural Language Toolkit: Tokenizers
|
|
2
|
-
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
4
|
-
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
-
# Steven Bird <stevenbird1@gmail.com>
|
|
6
|
-
# Trevor Cohn <tacohn@csse.unimelb.edu.au>
|
|
7
|
-
# URL: <http://nltk.sourceforge.net>
|
|
8
|
-
# For license information, see LICENSE.TXT
|
|
9
|
-
|
|
10
|
-
r"""
|
|
11
|
-
Regular-Expression Tokenizers
|
|
12
|
-
|
|
13
|
-
A ``RegexpTokenizer`` splits a string into substrings using a regular expression.
|
|
14
|
-
For example, the following tokenizer forms tokens out of alphabetic sequences,
|
|
15
|
-
money expressions, and any other non-whitespace sequences:
|
|
16
|
-
|
|
17
|
-
>>> from nltk.tokenize import RegexpTokenizer
|
|
18
|
-
>>> s = "Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\n\nThanks."
|
|
19
|
-
>>> tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')
|
|
20
|
-
>>> tokenizer.tokenize(s)
|
|
21
|
-
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York', '.',
|
|
22
|
-
'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
23
|
-
|
|
24
|
-
A ``RegexpTokenizer`` can use its regexp to match delimiters instead:
|
|
25
|
-
|
|
26
|
-
>>> tokenizer = RegexpTokenizer('\s+', gaps=True)
|
|
27
|
-
>>> tokenizer.tokenize(s)
|
|
28
|
-
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York.',
|
|
29
|
-
'Please', 'buy', 'me', 'two', 'of', 'them.', 'Thanks.']
|
|
30
|
-
|
|
31
|
-
Note that empty tokens are not returned when the delimiter appears at
|
|
32
|
-
the start or end of the string.
|
|
33
|
-
|
|
34
|
-
The material between the tokens is discarded. For example,
|
|
35
|
-
the following tokenizer selects just the capitalized words:
|
|
36
|
-
|
|
37
|
-
>>> capword_tokenizer = RegexpTokenizer('[A-Z]\w+')
|
|
38
|
-
>>> capword_tokenizer.tokenize(s)
|
|
39
|
-
['Good', 'New', 'York', 'Please', 'Thanks']
|
|
40
|
-
|
|
41
|
-
This module contains several subclasses of ``RegexpTokenizer``
|
|
42
|
-
that use pre-defined regular expressions.
|
|
43
|
-
|
|
44
|
-
>>> from nltk.tokenize import BlanklineTokenizer
|
|
45
|
-
>>> # Uses '\s*\n\s*\n\s*':
|
|
46
|
-
>>> BlanklineTokenizer().tokenize(s)
|
|
47
|
-
['Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.',
|
|
48
|
-
'Thanks.']
|
|
49
|
-
|
|
50
|
-
All of the regular expression tokenizers are also available as functions:
|
|
51
|
-
|
|
52
|
-
>>> from nltk.tokenize import regexp_tokenize, wordpunct_tokenize, blankline_tokenize
|
|
53
|
-
>>> regexp_tokenize(s, pattern='\w+|\$[\d\.]+|\S+')
|
|
54
|
-
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York', '.',
|
|
55
|
-
'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
56
|
-
>>> wordpunct_tokenize(s)
|
|
57
|
-
['Good', 'muffins', 'cost', '$', '3', '.', '88', 'in', 'New', 'York',
|
|
58
|
-
'.', 'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
59
|
-
>>> blankline_tokenize(s)
|
|
60
|
-
['Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.', 'Thanks.']
|
|
61
|
-
|
|
62
|
-
Caution: The function ``regexp_tokenize()`` takes the text as its
|
|
63
|
-
first argument, and the regular expression pattern as its second
|
|
64
|
-
argument. This differs from the conventions used by Python's
|
|
65
|
-
``re`` functions, where the pattern is always the first argument.
|
|
66
|
-
(This is for consistency with the other NLTK tokenizers.)
|
|
67
|
-
"""
|
|
68
|
-
from __future__ import unicode_literals
|
|
69
|
-
|
|
70
|
-
import re
|
|
71
|
-
|
|
72
|
-
from nltk.tokenize.api import TokenizerI
|
|
73
|
-
from nltk.tokenize.util import regexp_span_tokenize
|
|
74
|
-
from nltk.compat import python_2_unicode_compatible
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
self.
|
|
111
|
-
self.
|
|
112
|
-
self.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return self._regexp.split(text)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
"""
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
def
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
1
|
+
# Natural Language Toolkit: Tokenizers
|
|
2
|
+
#
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
|
+
# Author: Edward Loper <edloper@gmail.com>
|
|
5
|
+
# Steven Bird <stevenbird1@gmail.com>
|
|
6
|
+
# Trevor Cohn <tacohn@csse.unimelb.edu.au>
|
|
7
|
+
# URL: <http://nltk.sourceforge.net>
|
|
8
|
+
# For license information, see LICENSE.TXT
|
|
9
|
+
|
|
10
|
+
r"""
|
|
11
|
+
Regular-Expression Tokenizers
|
|
12
|
+
|
|
13
|
+
A ``RegexpTokenizer`` splits a string into substrings using a regular expression.
|
|
14
|
+
For example, the following tokenizer forms tokens out of alphabetic sequences,
|
|
15
|
+
money expressions, and any other non-whitespace sequences:
|
|
16
|
+
|
|
17
|
+
>>> from nltk.tokenize import RegexpTokenizer
|
|
18
|
+
>>> s = "Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\n\nThanks."
|
|
19
|
+
>>> tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')
|
|
20
|
+
>>> tokenizer.tokenize(s)
|
|
21
|
+
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York', '.',
|
|
22
|
+
'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
23
|
+
|
|
24
|
+
A ``RegexpTokenizer`` can use its regexp to match delimiters instead:
|
|
25
|
+
|
|
26
|
+
>>> tokenizer = RegexpTokenizer('\s+', gaps=True)
|
|
27
|
+
>>> tokenizer.tokenize(s)
|
|
28
|
+
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York.',
|
|
29
|
+
'Please', 'buy', 'me', 'two', 'of', 'them.', 'Thanks.']
|
|
30
|
+
|
|
31
|
+
Note that empty tokens are not returned when the delimiter appears at
|
|
32
|
+
the start or end of the string.
|
|
33
|
+
|
|
34
|
+
The material between the tokens is discarded. For example,
|
|
35
|
+
the following tokenizer selects just the capitalized words:
|
|
36
|
+
|
|
37
|
+
>>> capword_tokenizer = RegexpTokenizer('[A-Z]\w+')
|
|
38
|
+
>>> capword_tokenizer.tokenize(s)
|
|
39
|
+
['Good', 'New', 'York', 'Please', 'Thanks']
|
|
40
|
+
|
|
41
|
+
This module contains several subclasses of ``RegexpTokenizer``
|
|
42
|
+
that use pre-defined regular expressions.
|
|
43
|
+
|
|
44
|
+
>>> from nltk.tokenize import BlanklineTokenizer
|
|
45
|
+
>>> # Uses '\s*\n\s*\n\s*':
|
|
46
|
+
>>> BlanklineTokenizer().tokenize(s)
|
|
47
|
+
['Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.',
|
|
48
|
+
'Thanks.']
|
|
49
|
+
|
|
50
|
+
All of the regular expression tokenizers are also available as functions:
|
|
51
|
+
|
|
52
|
+
>>> from nltk.tokenize import regexp_tokenize, wordpunct_tokenize, blankline_tokenize
|
|
53
|
+
>>> regexp_tokenize(s, pattern='\w+|\$[\d\.]+|\S+')
|
|
54
|
+
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York', '.',
|
|
55
|
+
'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
56
|
+
>>> wordpunct_tokenize(s)
|
|
57
|
+
['Good', 'muffins', 'cost', '$', '3', '.', '88', 'in', 'New', 'York',
|
|
58
|
+
'.', 'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
59
|
+
>>> blankline_tokenize(s)
|
|
60
|
+
['Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.', 'Thanks.']
|
|
61
|
+
|
|
62
|
+
Caution: The function ``regexp_tokenize()`` takes the text as its
|
|
63
|
+
first argument, and the regular expression pattern as its second
|
|
64
|
+
argument. This differs from the conventions used by Python's
|
|
65
|
+
``re`` functions, where the pattern is always the first argument.
|
|
66
|
+
(This is for consistency with the other NLTK tokenizers.)
|
|
67
|
+
"""
|
|
68
|
+
from __future__ import unicode_literals
|
|
69
|
+
|
|
70
|
+
import re
|
|
71
|
+
|
|
72
|
+
from nltk.tokenize.api import TokenizerI
|
|
73
|
+
from nltk.tokenize.util import regexp_span_tokenize
|
|
74
|
+
from nltk.compat import python_2_unicode_compatible
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@python_2_unicode_compatible
|
|
78
|
+
class RegexpTokenizer(TokenizerI):
|
|
79
|
+
"""
|
|
80
|
+
A tokenizer that splits a string using a regular expression, which
|
|
81
|
+
matches either the tokens or the separators between tokens.
|
|
82
|
+
|
|
83
|
+
>>> tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')
|
|
84
|
+
|
|
85
|
+
:type pattern: str
|
|
86
|
+
:param pattern: The pattern used to build this tokenizer.
|
|
87
|
+
(This pattern must not contain capturing parentheses;
|
|
88
|
+
Use non-capturing parentheses, e.g. (?:...), instead)
|
|
89
|
+
:type gaps: bool
|
|
90
|
+
:param gaps: True if this tokenizer's pattern should be used
|
|
91
|
+
to find separators between tokens; False if this
|
|
92
|
+
tokenizer's pattern should be used to find the tokens
|
|
93
|
+
themselves.
|
|
94
|
+
:type discard_empty: bool
|
|
95
|
+
:param discard_empty: True if any empty tokens `''`
|
|
96
|
+
generated by the tokenizer should be discarded. Empty
|
|
97
|
+
tokens can only be generated if `_gaps == True`.
|
|
98
|
+
:type flags: int
|
|
99
|
+
:param flags: The regexp flags used to compile this
|
|
100
|
+
tokenizer's pattern. By default, the following flags are
|
|
101
|
+
used: `re.UNICODE | re.MULTILINE | re.DOTALL`.
|
|
102
|
+
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
def __init__(self, pattern, gaps=False, discard_empty=True,
|
|
106
|
+
flags=re.UNICODE | re.MULTILINE | re.DOTALL):
|
|
107
|
+
# If they gave us a regexp object, extract the pattern.
|
|
108
|
+
pattern = getattr(pattern, 'pattern', pattern)
|
|
109
|
+
|
|
110
|
+
self._pattern = pattern
|
|
111
|
+
self._gaps = gaps
|
|
112
|
+
self._discard_empty = discard_empty
|
|
113
|
+
self._flags = flags
|
|
114
|
+
self._regexp = None
|
|
115
|
+
|
|
116
|
+
def _check_regexp(self):
|
|
117
|
+
if self._regexp is None:
|
|
118
|
+
self._regexp = re.compile(self._pattern, self._flags)
|
|
119
|
+
|
|
120
|
+
def tokenize(self, text):
|
|
121
|
+
self._check_regexp()
|
|
122
|
+
# If our regexp matches gaps, use re.split:
|
|
123
|
+
if self._gaps:
|
|
124
|
+
if self._discard_empty:
|
|
125
|
+
return [tok for tok in self._regexp.split(text) if tok]
|
|
126
|
+
else:
|
|
127
|
+
return self._regexp.split(text)
|
|
128
|
+
|
|
129
|
+
# If our regexp matches tokens, use re.findall:
|
|
130
|
+
else:
|
|
131
|
+
return self._regexp.findall(text)
|
|
132
|
+
|
|
133
|
+
def span_tokenize(self, text):
|
|
134
|
+
self._check_regexp()
|
|
135
|
+
|
|
136
|
+
if self._gaps:
|
|
137
|
+
for left, right in regexp_span_tokenize(text, self._regexp):
|
|
138
|
+
if not (self._discard_empty and left == right):
|
|
139
|
+
yield left, right
|
|
140
|
+
else:
|
|
141
|
+
for m in re.finditer(self._regexp, text):
|
|
142
|
+
yield m.span()
|
|
143
|
+
|
|
144
|
+
def __repr__(self):
|
|
145
|
+
return ('%s(pattern=%r, gaps=%r, discard_empty=%r, flags=%r)' %
|
|
146
|
+
(self.__class__.__name__, self._pattern, self._gaps,
|
|
147
|
+
self._discard_empty, self._flags))
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class WhitespaceTokenizer(RegexpTokenizer):
|
|
151
|
+
r"""
|
|
152
|
+
Tokenize a string on whitespace (space, tab, newline).
|
|
153
|
+
In general, users should use the string ``split()`` method instead.
|
|
154
|
+
|
|
155
|
+
>>> from nltk.tokenize import WhitespaceTokenizer
|
|
156
|
+
>>> s = "Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\n\nThanks."
|
|
157
|
+
>>> WhitespaceTokenizer().tokenize(s)
|
|
158
|
+
['Good', 'muffins', 'cost', '$3.88', 'in', 'New', 'York.',
|
|
159
|
+
'Please', 'buy', 'me', 'two', 'of', 'them.', 'Thanks.']
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
def __init__(self):
|
|
163
|
+
RegexpTokenizer.__init__(self, r'\s+', gaps=True)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class BlanklineTokenizer(RegexpTokenizer):
|
|
167
|
+
"""
|
|
168
|
+
Tokenize a string, treating any sequence of blank lines as a delimiter.
|
|
169
|
+
Blank lines are defined as lines containing no characters, except for
|
|
170
|
+
space or tab characters.
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
def __init__(self):
|
|
174
|
+
RegexpTokenizer.__init__(self, r'\s*\n\s*\n\s*', gaps=True)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class WordPunctTokenizer(RegexpTokenizer):
|
|
178
|
+
"""
|
|
179
|
+
Tokenize a text into a sequence of alphabetic and
|
|
180
|
+
non-alphabetic characters, using the regexp ``\w+|[^\w\s]+``.
|
|
181
|
+
|
|
182
|
+
>>> from nltk.tokenize import WordPunctTokenizer
|
|
183
|
+
>>> s = "Good muffins cost $3.88\\nin New York. Please buy me\\ntwo of them.\\n\\nThanks."
|
|
184
|
+
>>> WordPunctTokenizer().tokenize(s)
|
|
185
|
+
['Good', 'muffins', 'cost', '$', '3', '.', '88', 'in', 'New', 'York',
|
|
186
|
+
'.', 'Please', 'buy', 'me', 'two', 'of', 'them', '.', 'Thanks', '.']
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
def __init__(self):
|
|
190
|
+
RegexpTokenizer.__init__(self, r'\w+|[^\w\s]+')
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
######################################################################
|
|
194
|
+
# { Tokenization Functions
|
|
195
|
+
######################################################################
|
|
196
|
+
|
|
197
|
+
def regexp_tokenize(text, pattern, gaps=False, discard_empty=True,
|
|
198
|
+
flags=re.UNICODE | re.MULTILINE | re.DOTALL):
|
|
199
|
+
"""
|
|
200
|
+
Return a tokenized copy of *text*. See :class:`.RegexpTokenizer`
|
|
201
|
+
for descriptions of the arguments.
|
|
202
|
+
"""
|
|
203
|
+
tokenizer = RegexpTokenizer(pattern, gaps, discard_empty, flags)
|
|
204
|
+
return tokenizer.tokenize(text)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
blankline_tokenize = BlanklineTokenizer().tokenize
|
|
208
|
+
wordpunct_tokenize = WordPunctTokenizer().tokenize
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: Interface to the Repp Tokenizer
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2015 NLTK Project
|
|
5
|
+
# Authors: Rebecca Dridan and Stephan Oepen
|
|
6
|
+
# Contributors: Liling Tan
|
|
7
|
+
#
|
|
8
|
+
# URL: <http://nltk.org/>
|
|
9
|
+
# For license information, see LICENSE.TXT
|
|
10
|
+
|
|
11
|
+
from __future__ import unicode_literals, print_function
|
|
12
|
+
from six import text_type
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import re
|
|
16
|
+
import sys
|
|
17
|
+
import subprocess
|
|
18
|
+
import tempfile
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
from nltk.data import ZipFilePathPointer
|
|
22
|
+
from nltk.internals import find_dir
|
|
23
|
+
|
|
24
|
+
from nltk.tokenize.api import TokenizerI
|
|
25
|
+
|
|
26
|
+
class ReppTokenizer(TokenizerI):
|
|
27
|
+
"""
|
|
28
|
+
A class for word tokenization using the REPP parser described in
|
|
29
|
+
Rebecca Dridan and Stephan Oepen (2012) Tokenization: Returning to a
|
|
30
|
+
Long Solved Problem - A Survey, Contrastive Experiment, Recommendations,
|
|
31
|
+
and Toolkit. In ACL. http://anthology.aclweb.org/P/P12/P12-2.pdf#page=406
|
|
32
|
+
|
|
33
|
+
>>> sents = ['Tokenization is widely regarded as a solved problem due to the high accuracy that rulebased tokenizers achieve.' ,
|
|
34
|
+
... 'But rule-based tokenizers are hard to maintain and their rules language specific.' ,
|
|
35
|
+
... 'We evaluated our method on three languages and obtained error rates of 0.27% (English), 0.35% (Dutch) and 0.76% (Italian) for our best models.'
|
|
36
|
+
... ]
|
|
37
|
+
>>> tokenizer = ReppTokenizer('/home/alvas/repp/') # doctest: +SKIP
|
|
38
|
+
>>> for sent in sents: # doctest: +SKIP
|
|
39
|
+
... tokenizer.tokenize(sent) # doctest: +SKIP
|
|
40
|
+
...
|
|
41
|
+
(u'Tokenization', u'is', u'widely', u'regarded', u'as', u'a', u'solved', u'problem', u'due', u'to', u'the', u'high', u'accuracy', u'that', u'rulebased', u'tokenizers', u'achieve', u'.')
|
|
42
|
+
(u'But', u'rule-based', u'tokenizers', u'are', u'hard', u'to', u'maintain', u'and', u'their', u'rules', u'language', u'specific', u'.')
|
|
43
|
+
(u'We', u'evaluated', u'our', u'method', u'on', u'three', u'languages', u'and', u'obtained', u'error', u'rates', u'of', u'0.27', u'%', u'(', u'English', u')', u',', u'0.35', u'%', u'(', u'Dutch', u')', u'and', u'0.76', u'%', u'(', u'Italian', u')', u'for', u'our', u'best', u'models', u'.')
|
|
44
|
+
|
|
45
|
+
>>> for sent in tokenizer.tokenize_sents(sents): # doctest: +SKIP
|
|
46
|
+
... print sent # doctest: +SKIP
|
|
47
|
+
...
|
|
48
|
+
(u'Tokenization', u'is', u'widely', u'regarded', u'as', u'a', u'solved', u'problem', u'due', u'to', u'the', u'high', u'accuracy', u'that', u'rulebased', u'tokenizers', u'achieve', u'.')
|
|
49
|
+
(u'But', u'rule-based', u'tokenizers', u'are', u'hard', u'to', u'maintain', u'and', u'their', u'rules', u'language', u'specific', u'.')
|
|
50
|
+
(u'We', u'evaluated', u'our', u'method', u'on', u'three', u'languages', u'and', u'obtained', u'error', u'rates', u'of', u'0.27', u'%', u'(', u'English', u')', u',', u'0.35', u'%', u'(', u'Dutch', u')', u'and', u'0.76', u'%', u'(', u'Italian', u')', u'for', u'our', u'best', u'models', u'.')
|
|
51
|
+
>>> for sent in tokenizer.tokenize_sents(sents, keep_token_positions=True): # doctest: +SKIP
|
|
52
|
+
... print sent # doctest: +SKIP
|
|
53
|
+
...
|
|
54
|
+
[(u'Tokenization', 0, 12), (u'is', 13, 15), (u'widely', 16, 22), (u'regarded', 23, 31), (u'as', 32, 34), (u'a', 35, 36), (u'solved', 37, 43), (u'problem', 44, 51), (u'due', 52, 55), (u'to', 56, 58), (u'the', 59, 62), (u'high', 63, 67), (u'accuracy', 68, 76), (u'that', 77, 81), (u'rulebased', 82, 91), (u'tokenizers', 92, 102), (u'achieve', 103, 110), (u'.', 110, 111)]
|
|
55
|
+
[(u'But', 0, 3), (u'rule-based', 4, 14), (u'tokenizers', 15, 25), (u'are', 26, 29), (u'hard', 30, 34), (u'to', 35, 37), (u'maintain', 38, 46), (u'and', 47, 50), (u'their', 51, 56), (u'rules', 57, 62), (u'language', 63, 71), (u'specific', 72, 80), (u'.', 80, 81)]
|
|
56
|
+
[(u'We', 0, 2), (u'evaluated', 3, 12), (u'our', 13, 16), (u'method', 17, 23), (u'on', 24, 26), (u'three', 27, 32), (u'languages', 33, 42), (u'and', 43, 46), (u'obtained', 47, 55), (u'error', 56, 61), (u'rates', 62, 67), (u'of', 68, 70), (u'0.27', 71, 75), (u'%', 75, 76), (u'(', 77, 78), (u'English', 78, 85), (u')', 85, 86), (u',', 86, 87), (u'0.35', 88, 92), (u'%', 92, 93), (u'(', 94, 95), (u'Dutch', 95, 100), (u')', 100, 101), (u'and', 102, 105), (u'0.76', 106, 110), (u'%', 110, 111), (u'(', 112, 113), (u'Italian', 113, 120), (u')', 120, 121), (u'for', 122, 125), (u'our', 126, 129), (u'best', 130, 134), (u'models', 135, 141), (u'.', 141, 142)]
|
|
57
|
+
"""
|
|
58
|
+
def __init__(self, repp_dir, encoding='utf8'):
|
|
59
|
+
self.repp_dir = self.find_repptokenizer(repp_dir)
|
|
60
|
+
# Set a directory to store the temporary files.
|
|
61
|
+
self.working_dir = tempfile.gettempdir()
|
|
62
|
+
# Set an encoding for the input strings.
|
|
63
|
+
self.encoding = encoding
|
|
64
|
+
|
|
65
|
+
def tokenize(self, sentence):
|
|
66
|
+
"""
|
|
67
|
+
Use Repp to tokenize a single sentence.
|
|
68
|
+
|
|
69
|
+
:param sentence: A single sentence string.
|
|
70
|
+
:type sentence: str
|
|
71
|
+
:return: A tuple of tokens.
|
|
72
|
+
:rtype: tuple(str)
|
|
73
|
+
"""
|
|
74
|
+
return next(self.tokenize_sents([sentence]))
|
|
75
|
+
|
|
76
|
+
def tokenize_sents(self, sentences, keep_token_positions=False):
|
|
77
|
+
"""
|
|
78
|
+
Tokenize multiple sentences using Repp.
|
|
79
|
+
|
|
80
|
+
:param sentences: A list of sentence strings.
|
|
81
|
+
:type sentences: list(str)
|
|
82
|
+
:return: A list of tuples of tokens
|
|
83
|
+
:rtype: iter(tuple(str))
|
|
84
|
+
"""
|
|
85
|
+
with tempfile.NamedTemporaryFile(prefix='repp_input.',
|
|
86
|
+
dir=self.working_dir, mode='w', delete=False) as input_file:
|
|
87
|
+
# Write sentences to temporary input file.
|
|
88
|
+
for sent in sentences:
|
|
89
|
+
input_file.write(text_type(sent) + '\n')
|
|
90
|
+
input_file.close()
|
|
91
|
+
# Generate command to run REPP.
|
|
92
|
+
cmd =self.generate_repp_command(input_file.name)
|
|
93
|
+
# Decode the stdout and strips the ending newline.
|
|
94
|
+
repp_output = self._execute(cmd).decode(self.encoding).strip()
|
|
95
|
+
for tokenized_sent in self.parse_repp_outputs(repp_output):
|
|
96
|
+
if not keep_token_positions:
|
|
97
|
+
# Removes token position information.
|
|
98
|
+
tokenized_sent, starts, ends = zip(*tokenized_sent)
|
|
99
|
+
yield tokenized_sent
|
|
100
|
+
|
|
101
|
+
def generate_repp_command(self, inputfilename):
|
|
102
|
+
"""
|
|
103
|
+
This module generates the REPP command to be used at the terminal.
|
|
104
|
+
|
|
105
|
+
:param inputfilename: path to the input file
|
|
106
|
+
:type inputfilename: str
|
|
107
|
+
"""
|
|
108
|
+
cmd = [self.repp_dir + '/src/repp']
|
|
109
|
+
cmd+= ['-c', self.repp_dir + '/erg/repp.set']
|
|
110
|
+
cmd+= ['--format', 'triple']
|
|
111
|
+
cmd+= [inputfilename]
|
|
112
|
+
return cmd
|
|
113
|
+
|
|
114
|
+
@staticmethod
|
|
115
|
+
def _execute(cmd):
|
|
116
|
+
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
117
|
+
stdout, stderr = p.communicate()
|
|
118
|
+
return stdout
|
|
119
|
+
|
|
120
|
+
@staticmethod
|
|
121
|
+
def parse_repp_outputs(repp_output):
|
|
122
|
+
"""
|
|
123
|
+
This module parses the tri-tuple format that REPP outputs using the
|
|
124
|
+
"--format triple" option and returns an generator with tuple of string
|
|
125
|
+
tokens.
|
|
126
|
+
|
|
127
|
+
:param repp_output:
|
|
128
|
+
:type repp_output: type
|
|
129
|
+
:return: an iterable of the tokenized sentences as tuples of strings
|
|
130
|
+
:rtype: iter(tuple)
|
|
131
|
+
"""
|
|
132
|
+
line_regex = re.compile('^\((\d+), (\d+), (.+)\)$', re.MULTILINE)
|
|
133
|
+
for section in repp_output.split('\n\n'):
|
|
134
|
+
words_with_positions = [(token, int(start), int(end))
|
|
135
|
+
for start, end, token in
|
|
136
|
+
line_regex.findall(section)]
|
|
137
|
+
words = tuple(t[2] for t in words_with_positions)
|
|
138
|
+
yield words_with_positions
|
|
139
|
+
|
|
140
|
+
def find_repptokenizer(self, repp_dirname):
|
|
141
|
+
"""
|
|
142
|
+
A module to find REPP tokenizer binary and its *repp.set* config file.
|
|
143
|
+
"""
|
|
144
|
+
if os.path.exists(repp_dirname): # If a full path is given.
|
|
145
|
+
_repp_dir = repp_dirname
|
|
146
|
+
else: # Try to find path to REPP directory in environment variables.
|
|
147
|
+
_repp_dir = find_dir(repp_dirname, env_vars=('REPP_TOKENIZER',))
|
|
148
|
+
# Checks for the REPP binary and erg/repp.set config file.
|
|
149
|
+
assert os.path.exists(_repp_dir+'/src/repp')
|
|
150
|
+
assert os.path.exists(_repp_dir+'/erg/repp.set')
|
|
151
|
+
return _repp_dir
|