nltk 3.2.1__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.1 → nltk-3.3}/LICENSE.txt +1 -1
- {nltk-3.2.1/nltk.egg-info → nltk-3.3}/PKG-INFO +13 -5
- nltk-3.3/README.md +49 -0
- nltk-3.3/nltk/VERSION +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/__init__.py +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/app/__init__.py +2 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/app/chartparser_app.py +92 -92
- {nltk-3.2.1 → nltk-3.3}/nltk/app/chunkparser_app.py +11 -13
- {nltk-3.2.1 → nltk-3.3}/nltk/app/collocations_app.py +8 -11
- {nltk-3.2.1 → nltk-3.3}/nltk/app/concordance_app.py +9 -11
- {nltk-3.2.1 → nltk-3.3}/nltk/app/nemo_app.py +18 -17
- {nltk-3.2.1 → nltk-3.3}/nltk/app/rdparser_app.py +10 -12
- {nltk-3.2.1 → nltk-3.3}/nltk/app/srparser_app.py +16 -16
- {nltk-3.2.1 → nltk-3.3}/nltk/app/wordfreq_app.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/app/wordnet_app.py +11 -11
- {nltk-3.2.1 → nltk-3.3}/nltk/book.py +2 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/api.py +67 -47
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/chart.py +7 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/combinator.py +42 -11
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/lexicon.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/ccg/logic.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/eliza.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/iesha.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/rude.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/suntsu.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/util.py +12 -10
- {nltk-3.2.1 → nltk-3.3}/nltk/chat/zen.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chunk/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chunk/api.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/chunk/named_entity.py +13 -13
- {nltk-3.2.1 → nltk-3.3}/nltk/chunk/regexp.py +9 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/chunk/util.py +12 -12
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/api.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/decisiontree.py +18 -18
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/maxent.py +26 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/megam.py +5 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/naivebayes.py +29 -26
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/rte_classify.py +58 -89
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/scikitlearn.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/senna.py +24 -22
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/svm.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/tadm.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/textcat.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/util.py +13 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/weka.py +7 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/api.py +9 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/em.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/gaac.py +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/kmeans.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/cluster/util.py +35 -20
- nltk-3.3/nltk/collections.py +640 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/collocations.py +2 -2
- nltk-3.3/nltk/compat.py +365 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/__init__.py +37 -16
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/europarl_raw.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/__init__.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/aligned.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/api.py +12 -10
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bnc.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/bracket_parse.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/categorized_sents.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chasen.py +5 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/childes.py +8 -9
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/chunked.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/cmudict.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/comparative_sents.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/conll.py +19 -12
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/crubadan.py +2 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/dependency.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/framenet.py +1085 -119
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ieer.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/indian.py +4 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ipipan.py +6 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/knbc.py +2 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/lin.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/mte.py +5 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nkjp.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nombank.py +8 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/nps_chat.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/opinion_lexicon.py +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/panlex_lite.py +1 -1
- nltk-3.3/nltk/corpus/reader/pl196x.py +292 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/plaintext.py +3 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ppattach.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/propbank.py +8 -10
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/pros_cons.py +5 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/reviews.py +3 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/rte.py +5 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/semcor.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/senseval.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sentiwordnet.py +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/sinica_treebank.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/string_category.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/switchboard.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/tagged.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/timit.py +10 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/toolbox.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/twitter.py +4 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/util.py +7 -3
- nltk-3.3/nltk/corpus/reader/verbnet.py +595 -0
- nltk-3.3/nltk/corpus/reader/wordlist.py +134 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/wordnet.py +357 -285
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/xmldocs.py +10 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/ycoe.py +25 -24
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/util.py +22 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/data.py +65 -29
- {nltk-3.2.1 → nltk-3.3}/nltk/decorators.py +5 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/downloader.py +59 -55
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/__init__.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/cfg.py +5 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/dispersion.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/table.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/tree.py +2 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/draw/util.py +17 -17
- {nltk-3.2.1 → nltk-3.3}/nltk/featstruct.py +290 -173
- {nltk-3.2.1 → nltk-3.3}/nltk/grammar.py +87 -44
- {nltk-3.2.1 → nltk-3.3}/nltk/help.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/api.py +27 -19
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/discourse.py +20 -16
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/nonmonotonic.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/prover9.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/resolution.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/tableau.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/internals.py +44 -44
- {nltk-3.2.1 → nltk-3.3}/nltk/jsontags.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/__init__.py +2 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/agreement.py +29 -9
- nltk-3.3/nltk/metrics/aline.py +607 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/association.py +8 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/confusionmatrix.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/distance.py +12 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/paice.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/scores.py +7 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/segmentation.py +4 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/metrics/spearman.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/chomsky.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/minimalset.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/sort.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/wordfinder.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/__init__.py +2 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/api.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/bllip.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/chart.py +8 -7
- nltk-3.3/nltk/parse/corenlp.py +780 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/dependencygraph.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/earleychart.py +4 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/evaluate.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/featurechart.py +6 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/generate.py +15 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/malt.py +2 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/nonprojectivedependencyparser.py +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/pchart.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/projectivedependencyparser.py +6 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/recursivedescent.py +2 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/shiftreduce.py +2 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/stanford.py +53 -28
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/transitionparser.py +11 -9
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/util.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/parse/viterbi.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/probability.py +75 -20
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/boxer.py +15 -15
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/chat80.py +6 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/cooper_storage.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt.py +9 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/drt_glue_demo.py +5 -9
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/evaluate.py +9 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/glue.py +8 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/hole.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/lfg.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/linearlogic.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/logic.py +14 -14
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/relextract.py +11 -18
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/skolemize.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sem/util.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/sentiment_analyzer.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/util.py +14 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/sentiment/vader.py +41 -42
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/__init__.py +1 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/api.py +7 -4
- nltk-3.3/nltk/stem/arlstem.py +369 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/isri.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/lancaster.py +39 -12
- nltk-3.3/nltk/stem/porter.py +710 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/regexp.py +2 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/rslp.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/snowball.py +537 -13
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/util.py +11 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/stem/wordnet.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/__init__.py +32 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/api.py +13 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill.py +4 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/crf.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/hmm.py +11 -11
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/hunpos.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/mapping.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/perceptron.py +25 -10
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/senna.py +25 -23
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/sequential.py +19 -15
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/stanford.py +59 -36
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/tnt.py +11 -20
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/util.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/demo.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/erroranalysis.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/feature.py +5 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/rule.py +6 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/template.py +18 -23
- {nltk-3.2.1 → nltk-3.3}/nltk/test/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/all.py +7 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/test/bnc.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/ccg_semantics.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/chat80.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/childes_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/chunk.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/classify.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/classify_fixt.py +2 -1
- nltk-3.3/nltk/test/collections.doctest +20 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/collocations.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/compat.doctest +0 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/test/compat_fixt.py +1 -0
- nltk-3.3/nltk/test/concordance.doctest +55 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus.doctest +38 -49
- {nltk-3.2.1 → nltk-3.3}/nltk/test/crubadan.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/data.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/dependency.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/discourse_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/doctest_nose_plugin.py +8 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/test/drt.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/featgram.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/featstruct.doctest +2 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/test/framenet.doctest +82 -33
- {nltk-3.2.1 → nltk-3.3}/nltk/test/generate.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim.doctest +6 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/test/gensim_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics.doctest +13 -15
- {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/gluesemantics_malt_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/grammar.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/grammartestsuites.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/index.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/inference.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/inference_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/internals.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/japanese.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/logic.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/metrics.doctest +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/test/misc.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/nonmonotonic_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/parse.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/probability.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/probability_fixt.py +2 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/propbank.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/relextract.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/resolution.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/runtests.py +35 -13
- {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiment.doctest +3 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/test/sentiwordnet.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/simple.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/stem.doctest +2 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/test/tag.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/tokenize.doctest +109 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/test/toolbox.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/translate.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/tree.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/treeprettyprinter.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/treetransforms.doctest +1 -1
- 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.1 → nltk-3.3}/nltk/test/unit/test_classify.py +20 -18
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_collocations.py +16 -7
- 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.1 → nltk-3.3}/nltk/test/unit/test_corpora.py +18 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_json2csv_corpus.py +4 -3
- nltk-3.3/nltk/test/unit/test_rte_classify.py +86 -0
- 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.1 → nltk-3.3}/nltk/test/unit/test_tgrep.py +4 -2
- nltk-3.3/nltk/test/unit/test_tokenize.py +168 -0
- 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.3/nltk/test/unit/translate/test_nist.py +37 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_stack_decoder.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/util.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet.doctest +17 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_fixt.py +1 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/wordnet_lch.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/test/wsd.doctest +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/text.py +92 -39
- {nltk-3.2.1 → nltk-3.3}/nltk/tgrep.py +8 -7
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/__init__.py +37 -15
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/api.py +3 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/casual.py +10 -9
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/mwe.py +2 -2
- nltk-3.3/nltk/tokenize/nist.py +173 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/punkt.py +186 -167
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/regexp.py +13 -7
- nltk-3.3/nltk/tokenize/repp.py +151 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/sexpr.py +4 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/simple.py +7 -5
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/stanford.py +18 -14
- nltk-3.3/nltk/tokenize/stanford_segmenter.py +246 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/tokenize/texttiling.py +43 -45
- 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.1 → nltk-3.3}/nltk/toolbox.py +4 -2
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/api.py +50 -40
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/bleu_score.py +221 -156
- nltk-3.3/nltk/translate/chrf_score.py +137 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/gale_church.py +32 -19
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/gdfa.py +14 -10
- nltk-3.3/nltk/translate/gleu_score.py +193 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm1.py +17 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm2.py +4 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm4.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm5.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm_model.py +4 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/metrics.py +1 -1
- nltk-3.3/nltk/translate/nist_score.py +178 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/phrase_based.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ribes_score.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/stack_decoder.py +5 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/tree.py +10 -8
- {nltk-3.2.1 → nltk-3.3}/nltk/treeprettyprinter.py +6 -6
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/__init__.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/api.py +8 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/common.py +9 -3
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitter_demo.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/twitterclient.py +1 -1
- {nltk-3.2.1 → nltk-3.3}/nltk/twitter/util.py +5 -4
- {nltk-3.2.1 → nltk-3.3}/nltk/util.py +41 -654
- {nltk-3.2.1 → nltk-3.3}/nltk/wsd.py +2 -2
- {nltk-3.2.1 → nltk-3.3/nltk.egg-info}/PKG-INFO +13 -5
- {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/SOURCES.txt +23 -1
- nltk-3.3/nltk.egg-info/requires.txt +31 -0
- {nltk-3.2.1 → nltk-3.3}/setup.cfg +0 -1
- {nltk-3.2.1 → nltk-3.3}/setup.py +32 -5
- nltk-3.2.1/nltk/VERSION +0 -1
- nltk-3.2.1/nltk/compat.py +0 -706
- nltk-3.2.1/nltk/corpus/reader/pl196x.py +0 -278
- nltk-3.2.1/nltk/corpus/reader/verbnet.py +0 -408
- nltk-3.2.1/nltk/corpus/reader/wordlist.py +0 -37
- nltk-3.2.1/nltk/six.py +0 -868
- nltk-3.2.1/nltk/stem/porter.py +0 -692
- nltk-3.2.1/nltk/test/unit/test_stem.py +0 -36
- nltk-3.2.1/nltk/test/unit/test_tokenize.py +0 -23
- nltk-3.2.1/nltk/test/unit/translate/test_bleu.py +0 -138
- nltk-3.2.1/nltk/tokenize/stanford_segmenter.py +0 -157
- nltk-3.2.1/nltk/tokenize/treebank.py +0 -124
- nltk-3.2.1/nltk/tokenize/util.py +0 -90
- {nltk-3.2.1 → nltk-3.3}/INSTALL.txt +0 -0
- {nltk-3.2.1 → nltk-3.3}/MANIFEST.in +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/classify/positivenaivebayes.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/corpus/reader/udhr.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/inference/mace.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/lazyimport.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/misc/babelfish.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/tag/brill_trainer.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/tbl/api.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/bleu.doctest +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/childes.doctest +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/corpus_fixt.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/paice.doctest +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/portuguese_en_fixt.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/segmentation_fixt.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/semantics_fixt.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/translate_fixt.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/__init__.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_2x_compat.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_corpus_views.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_hmm.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_naivebayes.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_seekable_unicode_stream_reader.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_tag.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/test_twitter_auth.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/__init__.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm1.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm2.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm3.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm4.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm5.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/translate/test_ibm_model.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/test/unit/utils.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/translate/ibm3.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk/treetransforms.py +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/dependency_links.txt +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/not-zip-safe +0 -0
- {nltk-3.2.1 → nltk-3.3}/nltk.egg-info/top_level.txt +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Natural Language Toolkit: TGrep search
|
|
5
5
|
#
|
|
6
|
-
# Copyright (C) 2001-
|
|
6
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
7
7
|
# Author: Will Roberts <wildwilhelm@gmail.com>
|
|
8
8
|
# URL: <http://nltk.org/>
|
|
9
9
|
# For license information, see LICENSE.TXT
|
|
@@ -111,15 +111,19 @@ macro definitions to ``m`` and initialises ``l`` to an empty dictionary.
|
|
|
111
111
|
'''
|
|
112
112
|
|
|
113
113
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
import functools
|
|
116
|
-
import
|
|
116
|
+
import re
|
|
117
|
+
|
|
118
|
+
from six import binary_type, text_type
|
|
119
|
+
|
|
117
120
|
try:
|
|
118
121
|
import pyparsing
|
|
119
122
|
except ImportError:
|
|
120
123
|
print('Warning: nltk.tgrep will not work without the `pyparsing` package')
|
|
121
124
|
print('installed.')
|
|
122
|
-
|
|
125
|
+
|
|
126
|
+
import nltk.tree
|
|
123
127
|
|
|
124
128
|
class TgrepException(Exception):
|
|
125
129
|
'''Tgrep exception type.'''
|
|
@@ -932,6 +936,3 @@ def tgrep_nodes(pattern, trees, search_leaves=True):
|
|
|
932
936
|
if pattern(tree[position])]
|
|
933
937
|
except AttributeError:
|
|
934
938
|
yield []
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Tokenizers
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Edward Loper <edloper@gmail.com>
|
|
6
6
|
# Steven Bird <stevenbird1@gmail.com> (minor additions)
|
|
7
|
+
# Contributors: matthewmc, clouds56
|
|
7
8
|
# URL: <http://nltk.org/>
|
|
8
9
|
# For license information, see LICENSE.TXT
|
|
9
10
|
|
|
@@ -59,20 +60,23 @@ tokenization, see the other methods provided in this package.
|
|
|
59
60
|
For further information, please see Chapter 3 of the NLTK book.
|
|
60
61
|
"""
|
|
61
62
|
|
|
63
|
+
import re
|
|
64
|
+
|
|
62
65
|
from nltk.data import load
|
|
63
|
-
from nltk.tokenize.
|
|
64
|
-
|
|
66
|
+
from nltk.tokenize.casual import (TweetTokenizer, casual_tokenize)
|
|
67
|
+
from nltk.tokenize.mwe import MWETokenizer
|
|
68
|
+
from nltk.tokenize.punkt import PunktSentenceTokenizer
|
|
65
69
|
from nltk.tokenize.regexp import (RegexpTokenizer, WhitespaceTokenizer,
|
|
66
70
|
BlanklineTokenizer, WordPunctTokenizer,
|
|
67
71
|
wordpunct_tokenize, regexp_tokenize,
|
|
68
72
|
blankline_tokenize)
|
|
69
|
-
from nltk.tokenize.
|
|
73
|
+
from nltk.tokenize.repp import ReppTokenizer
|
|
70
74
|
from nltk.tokenize.sexpr import SExprTokenizer, sexpr_tokenize
|
|
71
|
-
from nltk.tokenize.
|
|
72
|
-
|
|
75
|
+
from nltk.tokenize.simple import (SpaceTokenizer, TabTokenizer, LineTokenizer,
|
|
76
|
+
line_tokenize)
|
|
73
77
|
from nltk.tokenize.texttiling import TextTilingTokenizer
|
|
74
|
-
from nltk.tokenize.
|
|
75
|
-
from nltk.tokenize.
|
|
78
|
+
from nltk.tokenize.toktok import ToktokTokenizer
|
|
79
|
+
from nltk.tokenize.treebank import TreebankWordTokenizer
|
|
76
80
|
from nltk.tokenize.util import string_span_tokenize, regexp_span_tokenize
|
|
77
81
|
from nltk.tokenize.stanford_segmenter import StanfordSegmenter
|
|
78
82
|
|
|
@@ -91,18 +95,36 @@ def sent_tokenize(text, language='english'):
|
|
|
91
95
|
return tokenizer.tokenize(text)
|
|
92
96
|
|
|
93
97
|
# Standard word tokenizer.
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
_treebank_word_tokenizer = TreebankWordTokenizer()
|
|
99
|
+
|
|
100
|
+
# See discussion on https://github.com/nltk/nltk/pull/1437
|
|
101
|
+
# Adding to TreebankWordTokenizer, the splits on
|
|
102
|
+
# - chervon quotes u'\xab' and u'\xbb' .
|
|
103
|
+
# - unicode quotes u'\u2018', u'\u2019', u'\u201c' and u'\u201d'
|
|
104
|
+
|
|
105
|
+
improved_open_quote_regex = re.compile(u'([«“‘„]|[`]+)', re.U)
|
|
106
|
+
improved_close_quote_regex = re.compile(u'([»”’])', re.U)
|
|
107
|
+
improved_punct_regex = re.compile(r'([^\.])(\.)([\]\)}>"\'' u'»”’ ' r']*)\s*$', re.U)
|
|
108
|
+
_treebank_word_tokenizer.STARTING_QUOTES.insert(0, (improved_open_quote_regex, r' \1 '))
|
|
109
|
+
_treebank_word_tokenizer.ENDING_QUOTES.insert(0, (improved_close_quote_regex, r' \1 '))
|
|
110
|
+
_treebank_word_tokenizer.PUNCTUATION.insert(0, (improved_punct_regex, r'\1 \2 \3 '))
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def word_tokenize(text, language='english', preserve_line=False):
|
|
96
114
|
"""
|
|
97
115
|
Return a tokenized copy of *text*,
|
|
98
116
|
using NLTK's recommended word tokenizer
|
|
99
|
-
(currently :class:`.TreebankWordTokenizer`
|
|
117
|
+
(currently an improved :class:`.TreebankWordTokenizer`
|
|
100
118
|
along with :class:`.PunktSentenceTokenizer`
|
|
101
119
|
for the specified language).
|
|
102
120
|
|
|
103
|
-
:param text: text to split into
|
|
121
|
+
:param text: text to split into words
|
|
122
|
+
:type text: str
|
|
104
123
|
:param language: the model name in the Punkt corpus
|
|
124
|
+
:type language: str
|
|
125
|
+
:param preserve_line: An option to keep the preserve the sentence and not sentence tokenize it.
|
|
126
|
+
:type preserver_line: bool
|
|
105
127
|
"""
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
128
|
+
sentences = [text] if preserve_line else sent_tokenize(text, language)
|
|
129
|
+
return [token for sent in sentences
|
|
130
|
+
for token in _treebank_word_tokenizer.tokenize(sent)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Natural Language Toolkit: Tokenizer Interface
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
4
|
# Author: Edward Loper <edloper@gmail.com>
|
|
5
5
|
# Steven Bird <stevenbird1@gmail.com>
|
|
6
6
|
# URL: <http://nltk.org/>
|
|
@@ -11,11 +11,12 @@ Tokenizer Interface
|
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
13
|
from abc import ABCMeta, abstractmethod
|
|
14
|
-
from
|
|
14
|
+
from six import add_metaclass
|
|
15
15
|
|
|
16
16
|
from nltk.internals import overridden
|
|
17
17
|
from nltk.tokenize.util import string_span_tokenize
|
|
18
18
|
|
|
19
|
+
|
|
19
20
|
@add_metaclass(ABCMeta)
|
|
20
21
|
class TokenizerI(object):
|
|
21
22
|
"""
|
|
@@ -74,5 +75,3 @@ class StringTokenizer(TokenizerI):
|
|
|
74
75
|
def span_tokenize(self, s):
|
|
75
76
|
for span in string_span_tokenize(s, self._string):
|
|
76
77
|
yield span
|
|
77
|
-
|
|
78
|
-
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Natural Language Toolkit: Twitter Tokenizer
|
|
4
4
|
#
|
|
5
|
-
# Copyright (C) 2001-
|
|
5
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
6
6
|
# Author: Christopher Potts <cgpotts@stanford.edu>
|
|
7
7
|
# Ewan Klein <ewan@inf.ed.ac.uk> (modifications)
|
|
8
8
|
# Pierpaolo Pantone <> (modifications)
|
|
@@ -38,8 +38,9 @@ domains and tasks. The basic logic is this:
|
|
|
38
38
|
|
|
39
39
|
from __future__ import unicode_literals
|
|
40
40
|
import re
|
|
41
|
-
from nltk.compat import htmlentitydefs, int2byte, unichr
|
|
42
41
|
|
|
42
|
+
from six import int2byte, unichr
|
|
43
|
+
from six.moves import html_entities
|
|
43
44
|
|
|
44
45
|
######################################################################
|
|
45
46
|
# The following strings are components in the regular expression
|
|
@@ -126,15 +127,15 @@ REGEXPS = (
|
|
|
126
127
|
(?:
|
|
127
128
|
(?: # (international)
|
|
128
129
|
\+?[01]
|
|
129
|
-
[
|
|
130
|
+
[ *\-.\)]*
|
|
130
131
|
)?
|
|
131
132
|
(?: # (area code)
|
|
132
133
|
[\(]?
|
|
133
134
|
\d{3}
|
|
134
|
-
[
|
|
135
|
+
[ *\-.\)]*
|
|
135
136
|
)?
|
|
136
137
|
\d{3} # exchange
|
|
137
|
-
[
|
|
138
|
+
[ *\-.\)]*
|
|
138
139
|
\d{4} # base
|
|
139
140
|
)"""
|
|
140
141
|
,
|
|
@@ -246,7 +247,7 @@ def _replace_html_entities(text, keep=(), remove_illegal=True, encoding='utf-8')
|
|
|
246
247
|
if entity_body in keep:
|
|
247
248
|
return match.group(0)
|
|
248
249
|
else:
|
|
249
|
-
number =
|
|
250
|
+
number = html_entities.name2codepoint.get(entity_body)
|
|
250
251
|
if number is not None:
|
|
251
252
|
try:
|
|
252
253
|
return unichr(number)
|
|
@@ -324,8 +325,9 @@ def remove_handles(text):
|
|
|
324
325
|
"""
|
|
325
326
|
Remove Twitter username handles from text.
|
|
326
327
|
"""
|
|
327
|
-
pattern = re.compile(r"(
|
|
328
|
-
|
|
328
|
+
pattern = re.compile(r"(?<![A-Za-z0-9_!@#\$%&*])@(([A-Za-z0-9_]){20}(?!@))|(?<![A-Za-z0-9_!@#\$%&*])@(([A-Za-z0-9_]){1,19})(?![A-Za-z0-9_]*@)")
|
|
329
|
+
# Substitute hadnles with ' ' to ensure that text on either side of removed handles are tokenized correctly
|
|
330
|
+
return pattern.sub(' ', text)
|
|
329
331
|
|
|
330
332
|
######################################################################
|
|
331
333
|
# Tokenization Function
|
|
@@ -339,4 +341,3 @@ def casual_tokenize(text, preserve_case=True, reduce_len=False, strip_handles=Fa
|
|
|
339
341
|
strip_handles=strip_handles).tokenize(text)
|
|
340
342
|
|
|
341
343
|
###############################################################################
|
|
342
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Multi-Word Expression tokenizer
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2001-
|
|
3
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
4
4
|
# Author: Rob Malouf <rmalouf@mail.sdsu.edu>
|
|
5
5
|
# URL: <http://nltk.org/>
|
|
6
6
|
# For license information, see LICENSE.TXT
|
|
@@ -71,7 +71,7 @@ class MWETokenizer(TokenizerI):
|
|
|
71
71
|
>>> tokenizer.add_mwe(('a', 'b', 'c'))
|
|
72
72
|
>>> tokenizer.add_mwe(('a', 'x'))
|
|
73
73
|
>>> expected = {'a': {'x': {True: None}, 'b': {True: None, 'c': {True: None}}}}
|
|
74
|
-
>>> tokenizer._mwes
|
|
74
|
+
>>> tokenizer._mwes == expected
|
|
75
75
|
True
|
|
76
76
|
|
|
77
77
|
"""
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: Python port of the mteval-v14.pl tokenizer.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2015 NLTK Project
|
|
5
|
+
# Author: Liling Tan (ported from ftp://jaguar.ncsl.nist.gov/mt/resources/mteval-v14.pl)
|
|
6
|
+
# Contributors: Ozan Caglayan, Wiktor Stribizew
|
|
7
|
+
#
|
|
8
|
+
# URL: <http://nltk.sourceforge.net>
|
|
9
|
+
# For license information, see LICENSE.TXT
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
This is a NLTK port of the tokenizer used in the NIST BLEU evaluation script,
|
|
13
|
+
https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v14.pl#L926
|
|
14
|
+
which was also ported into Python in
|
|
15
|
+
https://github.com/lium-lst/nmtpy/blob/master/nmtpy/metrics/mtevalbleu.py#L162
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import unicode_literals
|
|
19
|
+
|
|
20
|
+
import io
|
|
21
|
+
import re
|
|
22
|
+
from six import text_type
|
|
23
|
+
|
|
24
|
+
from nltk.corpus import perluniprops
|
|
25
|
+
from nltk.tokenize.api import TokenizerI
|
|
26
|
+
from nltk.tokenize.util import xml_unescape
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class NISTTokenizer(TokenizerI):
|
|
30
|
+
"""
|
|
31
|
+
This NIST tokenizer is sentence-based instead of the original
|
|
32
|
+
paragraph-based tokenization from mteval-14.pl; The sentence-based
|
|
33
|
+
tokenization is consistent with the other tokenizers available in NLTK.
|
|
34
|
+
|
|
35
|
+
>>> from six import text_type
|
|
36
|
+
>>> from nltk.tokenize.nist import NISTTokenizer
|
|
37
|
+
>>> nist = NISTTokenizer()
|
|
38
|
+
>>> s = "Good muffins cost $3.88 in New York."
|
|
39
|
+
>>> expected_lower = [u'good', u'muffins', u'cost', u'$', u'3.88', u'in', u'new', u'york', u'.']
|
|
40
|
+
>>> expected_cased = [u'Good', u'muffins', u'cost', u'$', u'3.88', u'in', u'New', u'York', u'.']
|
|
41
|
+
>>> nist.tokenize(s, lowercase=False) == expected_cased
|
|
42
|
+
True
|
|
43
|
+
>>> nist.tokenize(s, lowercase=True) == expected_lower # Lowercased.
|
|
44
|
+
True
|
|
45
|
+
|
|
46
|
+
The international_tokenize() is the preferred function when tokenizing
|
|
47
|
+
non-european text, e.g.
|
|
48
|
+
|
|
49
|
+
>>> from nltk.tokenize.nist import NISTTokenizer
|
|
50
|
+
>>> nist = NISTTokenizer()
|
|
51
|
+
|
|
52
|
+
# Input strings.
|
|
53
|
+
>>> albb = u'Alibaba Group Holding Limited (Chinese: 阿里巴巴集团控股 有限公司) us a Chinese e-commerce company...'
|
|
54
|
+
>>> amz = u'Amazon.com, Inc. (/ˈæməzɒn/) is an American electronic commerce...'
|
|
55
|
+
>>> rkt = u'Rakuten, Inc. (楽天株式会社 Rakuten Kabushiki-gaisha) is a Japanese electronic commerce and Internet company based in Tokyo.'
|
|
56
|
+
|
|
57
|
+
# Expected tokens.
|
|
58
|
+
>>> expected_albb = [u'Alibaba', u'Group', u'Holding', u'Limited', u'(', u'Chinese', u':', u'\u963f\u91cc\u5df4\u5df4\u96c6\u56e2\u63a7\u80a1', u'\u6709\u9650\u516c\u53f8', u')']
|
|
59
|
+
>>> expected_amz = [u'Amazon', u'.', u'com', u',', u'Inc', u'.', u'(', u'/', u'\u02c8\xe6', u'm']
|
|
60
|
+
>>> expected_rkt = [u'Rakuten', u',', u'Inc', u'.', u'(', u'\u697d\u5929\u682a\u5f0f\u4f1a\u793e', u'Rakuten', u'Kabushiki', u'-', u'gaisha']
|
|
61
|
+
|
|
62
|
+
>>> nist.international_tokenize(albb)[:10] == expected_albb
|
|
63
|
+
True
|
|
64
|
+
>>> nist.international_tokenize(amz)[:10] == expected_amz
|
|
65
|
+
True
|
|
66
|
+
>>> nist.international_tokenize(rkt)[:10] == expected_rkt
|
|
67
|
+
True
|
|
68
|
+
|
|
69
|
+
# Doctest for patching issue #1926
|
|
70
|
+
>>> sent = u'this is a foo\u2604sentence.'
|
|
71
|
+
>>> expected_sent = [u'this', u'is', u'a', u'foo', u'\u2604', u'sentence', u'.']
|
|
72
|
+
>>> nist.international_tokenize(sent) == expected_sent
|
|
73
|
+
True
|
|
74
|
+
"""
|
|
75
|
+
# Strip "skipped" tags
|
|
76
|
+
STRIP_SKIP = re.compile('<skipped>'), ''
|
|
77
|
+
# Strip end-of-line hyphenation and join lines
|
|
78
|
+
STRIP_EOL_HYPHEN = re.compile(u'\u2028'), ' '
|
|
79
|
+
# Tokenize punctuation.
|
|
80
|
+
PUNCT = re.compile('([\{-\~\[-\` -\&\(-\+\:-\@\/])'), ' \\1 '
|
|
81
|
+
# Tokenize period and comma unless preceded by a digit.
|
|
82
|
+
PERIOD_COMMA_PRECEED = re.compile('([^0-9])([\.,])'), '\\1 \\2 '
|
|
83
|
+
# Tokenize period and comma unless followed by a digit.
|
|
84
|
+
PERIOD_COMMA_FOLLOW = re.compile('([\.,])([^0-9])'), ' \\1 \\2'
|
|
85
|
+
# Tokenize dash when preceded by a digit
|
|
86
|
+
DASH_PRECEED_DIGIT = re.compile('([0-9])(-)'), '\\1 \\2 '
|
|
87
|
+
|
|
88
|
+
LANG_DEPENDENT_REGEXES = [PUNCT, PERIOD_COMMA_PRECEED,
|
|
89
|
+
PERIOD_COMMA_FOLLOW, DASH_PRECEED_DIGIT]
|
|
90
|
+
|
|
91
|
+
# Perluniprops characters used in NIST tokenizer.
|
|
92
|
+
pup_number = text_type(''.join(set(perluniprops.chars('Number')))) # i.e. \p{N}
|
|
93
|
+
pup_punct = text_type(''.join(set(perluniprops.chars('Punctuation')))) # i.e. \p{P}
|
|
94
|
+
pup_symbol = text_type(''.join(set(perluniprops.chars('Symbol')))) # i.e. \p{S}
|
|
95
|
+
|
|
96
|
+
# Python regexes needs to escape some special symbols, see
|
|
97
|
+
# see https://stackoverflow.com/q/45670950/610569
|
|
98
|
+
number_regex = re.sub(r'[]^\\-]', r'\\\g<0>', pup_number)
|
|
99
|
+
punct_regex = re.sub(r'[]^\\-]', r'\\\g<0>', pup_punct)
|
|
100
|
+
symbol_regex = re.sub(r'[]^\\-]', r'\\\g<0>', pup_symbol)
|
|
101
|
+
|
|
102
|
+
# Note: In the original perl implementation, \p{Z} and \p{Zl} were used to
|
|
103
|
+
# (i) strip trailing and heading spaces and
|
|
104
|
+
# (ii) de-deuplicate spaces.
|
|
105
|
+
# In Python, this would do: ' '.join(str.strip().split())
|
|
106
|
+
# Thus, the next two lines were commented out.
|
|
107
|
+
#Line_Separator = text_type(''.join(perluniprops.chars('Line_Separator'))) # i.e. \p{Zl}
|
|
108
|
+
#Separator = text_type(''.join(perluniprops.chars('Separator'))) # i.e. \p{Z}
|
|
109
|
+
|
|
110
|
+
# Pads non-ascii strings with space.
|
|
111
|
+
NONASCII = re.compile('([\x00-\x7f]+)'), r' \1 '
|
|
112
|
+
# Tokenize any punctuation unless followed AND preceded by a digit.
|
|
113
|
+
PUNCT_1 = re.compile(u"([{n}])([{p}])".format(n=number_regex, p=punct_regex)), '\\1 \\2 '
|
|
114
|
+
PUNCT_2 = re.compile(u"([{p}])([{n}])".format(n=number_regex, p=punct_regex)), ' \\1 \\2'
|
|
115
|
+
# Tokenize symbols
|
|
116
|
+
SYMBOLS = re.compile(u"([{s}])".format(s=symbol_regex)), ' \\1 '
|
|
117
|
+
|
|
118
|
+
INTERNATIONAL_REGEXES = [NONASCII, PUNCT_1, PUNCT_2, SYMBOLS]
|
|
119
|
+
|
|
120
|
+
def lang_independent_sub(self, text):
|
|
121
|
+
"""Performs the language independent string substituitions. """
|
|
122
|
+
# It's a strange order of regexes.
|
|
123
|
+
# It'll be better to unescape after STRIP_EOL_HYPHEN
|
|
124
|
+
# but let's keep it close to the original NIST implementation.
|
|
125
|
+
regexp, substitution = self.STRIP_SKIP
|
|
126
|
+
text = regexp.sub(substitution, text)
|
|
127
|
+
text = xml_unescape(text)
|
|
128
|
+
regexp, substitution = self.STRIP_EOL_HYPHEN
|
|
129
|
+
text = regexp.sub(substitution, text)
|
|
130
|
+
return text
|
|
131
|
+
|
|
132
|
+
def tokenize(self, text, lowercase=False,
|
|
133
|
+
western_lang=True, return_str=False):
|
|
134
|
+
text = text_type(text)
|
|
135
|
+
# Language independent regex.
|
|
136
|
+
text = self.lang_independent_sub(text)
|
|
137
|
+
# Language dependent regex.
|
|
138
|
+
if western_lang:
|
|
139
|
+
# Pad string with whitespace.
|
|
140
|
+
text = ' ' + text + ' '
|
|
141
|
+
if lowercase:
|
|
142
|
+
text = text.lower()
|
|
143
|
+
for regexp, substitution in self.LANG_DEPENDENT_REGEXES:
|
|
144
|
+
text = regexp.sub(substitution, text)
|
|
145
|
+
# Remove contiguous whitespaces.
|
|
146
|
+
text = ' '.join(text.split())
|
|
147
|
+
# Finally, strips heading and trailing spaces
|
|
148
|
+
# and converts output string into unicode.
|
|
149
|
+
text = text_type(text.strip())
|
|
150
|
+
return text if return_str else text.split()
|
|
151
|
+
|
|
152
|
+
def international_tokenize(self, text, lowercase=False,
|
|
153
|
+
split_non_ascii=True,
|
|
154
|
+
return_str=False):
|
|
155
|
+
text = text_type(text)
|
|
156
|
+
# Different from the 'normal' tokenize(), STRIP_EOL_HYPHEN is applied
|
|
157
|
+
# first before unescaping.
|
|
158
|
+
regexp, substitution = self.STRIP_SKIP
|
|
159
|
+
text = regexp.sub(substitution, text)
|
|
160
|
+
regexp, substitution = self.STRIP_EOL_HYPHEN
|
|
161
|
+
text = regexp.sub(substitution, text)
|
|
162
|
+
text = xml_unescape(text)
|
|
163
|
+
|
|
164
|
+
if lowercase:
|
|
165
|
+
text = text.lower()
|
|
166
|
+
|
|
167
|
+
for regexp, substitution in self.INTERNATIONAL_REGEXES:
|
|
168
|
+
text = regexp.sub(substitution, text)
|
|
169
|
+
|
|
170
|
+
# Make sure that there's only one space only between words.
|
|
171
|
+
# Strip leading and trailing spaces.
|
|
172
|
+
text = ' '.join(text.strip().split())
|
|
173
|
+
return text if return_str else text.split()
|