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
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Natural Language Toolkit: NIST Score
|
|
3
|
+
#
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
|
+
# Authors:
|
|
6
|
+
# Contributors:
|
|
7
|
+
# URL: <http://nltk.org/>
|
|
8
|
+
# For license information, see LICENSE.TXT
|
|
9
|
+
|
|
10
|
+
"""NIST score implementation."""
|
|
11
|
+
from __future__ import division
|
|
12
|
+
|
|
13
|
+
import math
|
|
14
|
+
import fractions
|
|
15
|
+
from collections import Counter
|
|
16
|
+
|
|
17
|
+
from nltk.util import ngrams
|
|
18
|
+
|
|
19
|
+
def sentence_nist(references, hypothesis, n=5):
|
|
20
|
+
"""
|
|
21
|
+
Calculate NIST score from
|
|
22
|
+
George Doddington. 2002. "Automatic evaluation of machine translation quality
|
|
23
|
+
using n-gram co-occurrence statistics." Proceedings of HLT.
|
|
24
|
+
Morgan Kaufmann Publishers Inc. http://dl.acm.org/citation.cfm?id=1289189.1289273
|
|
25
|
+
|
|
26
|
+
DARPA commissioned NIST to develop an MT evaluation facility based on the BLEU
|
|
27
|
+
score. The official script used by NIST to compute BLEU and NIST score is
|
|
28
|
+
mteval-14.pl. The main differences are:
|
|
29
|
+
|
|
30
|
+
- BLEU uses geometric mean of the ngram overlaps, NIST uses arithmetic mean.
|
|
31
|
+
- NIST has a different brevity penalty
|
|
32
|
+
- NIST score from mteval-14.pl has a self-contained tokenizer
|
|
33
|
+
|
|
34
|
+
Note: The mteval-14.pl includes a smoothing function for BLEU score that is NOT
|
|
35
|
+
used in the NIST score computation.
|
|
36
|
+
|
|
37
|
+
>>> hypothesis1 = ['It', 'is', 'a', 'guide', 'to', 'action', 'which',
|
|
38
|
+
... 'ensures', 'that', 'the', 'military', 'always',
|
|
39
|
+
... 'obeys', 'the', 'commands', 'of', 'the', 'party']
|
|
40
|
+
|
|
41
|
+
>>> hypothesis2 = ['It', 'is', 'to', 'insure', 'the', 'troops',
|
|
42
|
+
... 'forever', 'hearing', 'the', 'activity', 'guidebook',
|
|
43
|
+
... 'that', 'party', 'direct']
|
|
44
|
+
|
|
45
|
+
>>> reference1 = ['It', 'is', 'a', 'guide', 'to', 'action', 'that',
|
|
46
|
+
... 'ensures', 'that', 'the', 'military', 'will', 'forever',
|
|
47
|
+
... 'heed', 'Party', 'commands']
|
|
48
|
+
|
|
49
|
+
>>> reference2 = ['It', 'is', 'the', 'guiding', 'principle', 'which',
|
|
50
|
+
... 'guarantees', 'the', 'military', 'forces', 'always',
|
|
51
|
+
... 'being', 'under', 'the', 'command', 'of', 'the',
|
|
52
|
+
... 'Party']
|
|
53
|
+
|
|
54
|
+
>>> reference3 = ['It', 'is', 'the', 'practical', 'guide', 'for', 'the',
|
|
55
|
+
... 'army', 'always', 'to', 'heed', 'the', 'directions',
|
|
56
|
+
... 'of', 'the', 'party']
|
|
57
|
+
|
|
58
|
+
>>> sentence_nist([reference1, reference2, reference3], hypothesis1) # doctest: +ELLIPSIS
|
|
59
|
+
3.3709...
|
|
60
|
+
|
|
61
|
+
>>> sentence_nist([reference1, reference2, reference3], hypothesis2) # doctest: +ELLIPSIS
|
|
62
|
+
1.4619...
|
|
63
|
+
|
|
64
|
+
:param references: reference sentences
|
|
65
|
+
:type references: list(list(str))
|
|
66
|
+
:param hypothesis: a hypothesis sentence
|
|
67
|
+
:type hypothesis: list(str)
|
|
68
|
+
:param n: highest n-gram order
|
|
69
|
+
:type n: int
|
|
70
|
+
"""
|
|
71
|
+
return corpus_nist([references], [hypothesis], n)
|
|
72
|
+
|
|
73
|
+
def corpus_nist(list_of_references, hypotheses, n=5):
|
|
74
|
+
"""
|
|
75
|
+
Calculate a single corpus-level NIST score (aka. system-level BLEU) for all
|
|
76
|
+
the hypotheses and their respective references.
|
|
77
|
+
|
|
78
|
+
:param references: a corpus of lists of reference sentences, w.r.t. hypotheses
|
|
79
|
+
:type references: list(list(list(str)))
|
|
80
|
+
:param hypotheses: a list of hypothesis sentences
|
|
81
|
+
:type hypotheses: list(list(str))
|
|
82
|
+
:param n: highest n-gram order
|
|
83
|
+
:type n: int
|
|
84
|
+
"""
|
|
85
|
+
# Before proceeding to compute NIST, perform sanity checks.
|
|
86
|
+
assert len(list_of_references) == len(hypotheses), "The number of hypotheses and their reference(s) should be the same"
|
|
87
|
+
|
|
88
|
+
# Collect the ngram coounts from the reference sentences.
|
|
89
|
+
ngram_freq = Counter()
|
|
90
|
+
total_reference_words = 0
|
|
91
|
+
for references in list_of_references: # For each source sent, there's a list of reference sents.
|
|
92
|
+
for reference in references:
|
|
93
|
+
# For each order of ngram, count the ngram occurrences.
|
|
94
|
+
for i in range(1,n+1):
|
|
95
|
+
ngram_freq.update(ngrams(reference, i))
|
|
96
|
+
total_reference_words += len(reference)
|
|
97
|
+
|
|
98
|
+
# Compute the information weights based on the reference sentences.
|
|
99
|
+
# Eqn 2 in Doddington (2002):
|
|
100
|
+
# Info(w_1 ... w_n) = log_2 [ (# of occurrences of w_1 ... w_n-1) / (# of occurrences of w_1 ... w_n) ]
|
|
101
|
+
information_weights = {}
|
|
102
|
+
for _ngram in ngram_freq: # w_1 ... w_n
|
|
103
|
+
_mgram = _ngram[:-1] # w_1 ... w_n-1
|
|
104
|
+
# From https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v13a.pl#L546
|
|
105
|
+
# it's computed as such:
|
|
106
|
+
# denominator = ngram_freq[_mgram] if _mgram and _mgram in ngram_freq else denominator = total_reference_words
|
|
107
|
+
# information_weights[_ngram] = -1 * math.log(ngram_freq[_ngram]/denominator) / math.log(2)
|
|
108
|
+
#
|
|
109
|
+
# Mathematically, it's equivalent to the our implementation:
|
|
110
|
+
if _mgram and _mgram in ngram_freq:
|
|
111
|
+
numerator = ngram_freq[_mgram]
|
|
112
|
+
else:
|
|
113
|
+
numerator = total_reference_words
|
|
114
|
+
information_weights[_ngram] = math.log(numerator/ngram_freq[_ngram], 2)
|
|
115
|
+
|
|
116
|
+
# Micro-average.
|
|
117
|
+
nist_precision_numerator_per_ngram = Counter()
|
|
118
|
+
nist_precision_denominator_per_ngram = Counter()
|
|
119
|
+
l_ref, l_sys = 0, 0
|
|
120
|
+
# For each order of ngram.
|
|
121
|
+
for i in range(1,n+1):
|
|
122
|
+
# Iterate through each hypothesis and their corresponding references.
|
|
123
|
+
for references, hypothesis in zip(list_of_references, hypotheses):
|
|
124
|
+
hyp_len = len(hypothesis)
|
|
125
|
+
|
|
126
|
+
# Find reference with the best NIST score.
|
|
127
|
+
nist_score_per_ref = []
|
|
128
|
+
for reference in references:
|
|
129
|
+
_ref_len = len(reference)
|
|
130
|
+
# Counter of ngrams in hypothesis.
|
|
131
|
+
hyp_ngrams = Counter(ngrams(hypothesis, i)) if len(hypothesis) >= i else Counter()
|
|
132
|
+
ref_ngrams = Counter(ngrams(reference, i)) if len(reference) >=i else Counter()
|
|
133
|
+
ngram_overlaps = hyp_ngrams & ref_ngrams
|
|
134
|
+
# Precision part of the score in Eqn 3
|
|
135
|
+
_numerator = sum(information_weights[_ngram] * count
|
|
136
|
+
for _ngram, count in ngram_overlaps.items())
|
|
137
|
+
_denominator = sum(hyp_ngrams.values())
|
|
138
|
+
_precision = 0 if _denominator == 0 else _numerator/_denominator
|
|
139
|
+
nist_score_per_ref.append((_precision, _numerator, _denominator, _ref_len))
|
|
140
|
+
# Best reference.
|
|
141
|
+
precision, numerator, denominator, ref_len = max(nist_score_per_ref)
|
|
142
|
+
nist_precision_numerator_per_ngram[i] += numerator
|
|
143
|
+
nist_precision_denominator_per_ngram[i] += denominator
|
|
144
|
+
l_ref += ref_len
|
|
145
|
+
l_sys += hyp_len
|
|
146
|
+
|
|
147
|
+
# Final NIST micro-average mean aggregation.
|
|
148
|
+
nist_precision = 0
|
|
149
|
+
for i in nist_precision_numerator_per_ngram:
|
|
150
|
+
precision = nist_precision_numerator_per_ngram[i] / nist_precision_denominator_per_ngram[i]
|
|
151
|
+
nist_precision+= precision
|
|
152
|
+
# Eqn 3 in Doddington(2002)
|
|
153
|
+
return nist_precision * nist_length_penalty(l_ref, l_sys)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def nist_length_penalty(ref_len, hyp_len):
|
|
157
|
+
"""
|
|
158
|
+
Calculates the NIST length penalty, from Eq. 3 in Doddington (2002)
|
|
159
|
+
|
|
160
|
+
penalty = exp( beta * log( min( len(hyp)/len(ref) , 1.0 )))
|
|
161
|
+
|
|
162
|
+
where,
|
|
163
|
+
|
|
164
|
+
`beta` is chosen to make the brevity penalty factor = 0.5 when the
|
|
165
|
+
no. of words in the system output (hyp) is 2/3 of the average
|
|
166
|
+
no. of words in the reference translation (ref)
|
|
167
|
+
|
|
168
|
+
The NIST penalty is different from BLEU's such that it minimize the impact
|
|
169
|
+
of the score of small variations in the length of a translation.
|
|
170
|
+
See Fig. 4 in Doddington (2002)
|
|
171
|
+
"""
|
|
172
|
+
ratio = hyp_len / ref_len
|
|
173
|
+
if 0 < ratio < 1:
|
|
174
|
+
ratio_x, score_x = 1.5, 0.5
|
|
175
|
+
beta = math.log(score_x) / math.log(ratio_x)**2
|
|
176
|
+
return math.exp(beta * math.log(ratio)**2)
|
|
177
|
+
else: # ratio <= 0 or ratio >= 1
|
|
178
|
+
return max(min(ratio, 1.0), 0.0)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Phrase Extraction Algorithm
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Authors: Liling Tan, Fredrik Hedman, Petra Barancikova
|
|
6
6
|
# URL: <http://nltk.org/>
|
|
7
7
|
# For license information, see LICENSE.TXT
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: RIBES Score
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Contributors: Katsuhito Sudoh, Liling Tan, Kasramvd, J.F.Sebastian
|
|
6
6
|
# Mark Byers, ekhumoro, P. Ortiz
|
|
7
7
|
# URL: <http://nltk.org/>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Stack decoder
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Tah Wei Hoon <hoon.tw@gmail.com>
|
|
6
6
|
# URL: <http://nltk.org/>
|
|
7
7
|
# For license information, see LICENSE.TXT
|
|
@@ -493,3 +493,7 @@ class _Stack(object):
|
|
|
493
493
|
|
|
494
494
|
def __contains__(self, hypothesis):
|
|
495
495
|
return hypothesis in self.items
|
|
496
|
+
|
|
497
|
+
def __bool__(self):
|
|
498
|
+
return len(self.items) != 0
|
|
499
|
+
__nonzero__=__bool__
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Text Trees
|
|
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>
|
|
7
7
|
# Peter Ljunglöf <peter.ljunglof@gu.se>
|
|
@@ -14,15 +14,19 @@ Class for representing hierarchical language structures, such as
|
|
|
14
14
|
syntax trees and morphological trees.
|
|
15
15
|
"""
|
|
16
16
|
from __future__ import print_function, unicode_literals
|
|
17
|
+
from abc import ABCMeta, abstractmethod
|
|
18
|
+
from six import add_metaclass
|
|
17
19
|
|
|
18
20
|
# TODO: add LabelledTree (can be used for dependency trees)
|
|
19
21
|
|
|
20
22
|
import re
|
|
21
23
|
|
|
24
|
+
from six import string_types
|
|
25
|
+
|
|
22
26
|
from nltk.grammar import Production, Nonterminal
|
|
23
27
|
from nltk.probability import ProbabilisticMixIn
|
|
24
28
|
from nltk.util import slice_bounds
|
|
25
|
-
from nltk.compat import
|
|
29
|
+
from nltk.compat import python_2_unicode_compatible, unicode_repr
|
|
26
30
|
from nltk.internals import raise_unorderable_types
|
|
27
31
|
|
|
28
32
|
######################################################################
|
|
@@ -694,7 +698,7 @@ class Tree(list):
|
|
|
694
698
|
from nltk.treeprettyprinter import TreePrettyPrinter
|
|
695
699
|
print(TreePrettyPrinter(self, sentence, highlight).text(**kwargs),
|
|
696
700
|
file=stream)
|
|
697
|
-
|
|
701
|
+
|
|
698
702
|
def __repr__(self):
|
|
699
703
|
childstr = ", ".join(unicode_repr(c) for c in self)
|
|
700
704
|
return '%s(%s, [%s])' % (type(self).__name__, unicode_repr(self._label), childstr)
|
|
@@ -877,7 +881,7 @@ class ImmutableTree(Tree):
|
|
|
877
881
|
######################################################################
|
|
878
882
|
## Parented trees
|
|
879
883
|
######################################################################
|
|
880
|
-
|
|
884
|
+
@add_metaclass(ABCMeta)
|
|
881
885
|
class AbstractParentedTree(Tree):
|
|
882
886
|
"""
|
|
883
887
|
An abstract base class for a ``Tree`` that automatically maintains
|
|
@@ -921,7 +925,7 @@ class AbstractParentedTree(Tree):
|
|
|
921
925
|
#////////////////////////////////////////////////////////////
|
|
922
926
|
# Parent management
|
|
923
927
|
#////////////////////////////////////////////////////////////
|
|
924
|
-
|
|
928
|
+
@abstractmethod
|
|
925
929
|
def _setparent(self, child, index, dry_run=False):
|
|
926
930
|
"""
|
|
927
931
|
Update the parent pointer of ``child`` to point to ``self``. This
|
|
@@ -942,8 +946,8 @@ class AbstractParentedTree(Tree):
|
|
|
942
946
|
parent pointer; just check for any error conditions, and
|
|
943
947
|
raise an exception if one is found.
|
|
944
948
|
"""
|
|
945
|
-
raise NotImplementedError()
|
|
946
949
|
|
|
950
|
+
@abstractmethod
|
|
947
951
|
def _delparent(self, child, index):
|
|
948
952
|
"""
|
|
949
953
|
Update the parent pointer of ``child`` to not point to self. This
|
|
@@ -956,7 +960,6 @@ class AbstractParentedTree(Tree):
|
|
|
956
960
|
:type index: int
|
|
957
961
|
:param index: The index of ``child`` in ``self``.
|
|
958
962
|
"""
|
|
959
|
-
raise NotImplementedError()
|
|
960
963
|
|
|
961
964
|
#////////////////////////////////////////////////////////////
|
|
962
965
|
# Methods that add/remove children
|
|
@@ -1600,4 +1603,3 @@ __all__ = ['ImmutableProbabilisticTree', 'ImmutableTree', 'ProbabilisticMixIn',
|
|
|
1600
1603
|
'ProbabilisticTree', 'Tree', 'bracket_parse',
|
|
1601
1604
|
'sinica_parse', 'ParentedTree', 'MultiParentedTree',
|
|
1602
1605
|
'ImmutableParentedTree', 'ImmutableMultiParentedTree']
|
|
1603
|
-
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: ASCII visualization of NLTK trees
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Andreas van Cranenburgh <A.W.vanCranenburgh@uva.nl>
|
|
6
6
|
# Peter Ljunglöf <peter.ljunglof@gu.se>
|
|
7
7
|
# URL: <http://nltk.org/>
|
|
8
8
|
# For license information, see LICENSE.TXT
|
|
9
9
|
|
|
10
10
|
"""
|
|
11
|
-
Pretty-printing of discontinuous trees.
|
|
11
|
+
Pretty-printing of discontinuous trees.
|
|
12
12
|
Adapted from the disco-dop project, by Andreas van Cranenburgh.
|
|
13
13
|
https://github.com/andreasvc/disco-dop
|
|
14
14
|
|
|
@@ -21,7 +21,7 @@ http://jgaa.info/accepted/2006/EschbachGuentherBecker2006.10.2.pdf
|
|
|
21
21
|
from __future__ import division, print_function, unicode_literals
|
|
22
22
|
|
|
23
23
|
from nltk.util import slice_bounds, OrderedDict
|
|
24
|
-
from nltk.compat import
|
|
24
|
+
from nltk.compat import python_2_unicode_compatible, unicode_repr
|
|
25
25
|
from nltk.internals import raise_unorderable_types
|
|
26
26
|
from nltk.tree import Tree
|
|
27
27
|
|
|
@@ -56,8 +56,8 @@ class TreePrettyPrinter(object):
|
|
|
56
56
|
creates an object from which different visualizations can be created.
|
|
57
57
|
|
|
58
58
|
:param tree: a Tree object.
|
|
59
|
-
:param sentence: a list of words (strings). If `sentence` is given,
|
|
60
|
-
`tree` must contain integers as leaves, which are taken as indices
|
|
59
|
+
:param sentence: a list of words (strings). If `sentence` is given,
|
|
60
|
+
`tree` must contain integers as leaves, which are taken as indices
|
|
61
61
|
in `sentence`. Using this you can display a discontinuous tree.
|
|
62
62
|
:param highlight: Optionally, a sequence of Tree objects in `tree` which
|
|
63
63
|
should be highlighted. Has the effect of only applying colors to nodes
|
|
@@ -521,7 +521,7 @@ class TreePrettyPrinter(object):
|
|
|
521
521
|
result += ['\t<text style="text-anchor: middle; fill: %s; '
|
|
522
522
|
'font-size: %dpx;" x="%g" y="%g">%s</text>' % (
|
|
523
523
|
color, fontsize, x, y,
|
|
524
|
-
escape(node.label() if isinstance(node, Tree)
|
|
524
|
+
escape(node.label() if isinstance(node, Tree)
|
|
525
525
|
else node))]
|
|
526
526
|
|
|
527
527
|
result += ['</svg>']
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Twitter API
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
6
6
|
# Lorenzo Rubio <lrnzcig@gmail.com>
|
|
7
7
|
# URL: <http://nltk.org/>
|
|
@@ -12,6 +12,8 @@ This module provides an interface for TweetHandlers, and support for timezone
|
|
|
12
12
|
handling.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
+
from abc import ABCMeta, abstractmethod
|
|
16
|
+
from six import add_metaclass
|
|
15
17
|
from datetime import tzinfo, timedelta, datetime
|
|
16
18
|
from nltk.compat import UTC
|
|
17
19
|
import time as _time
|
|
@@ -42,8 +44,11 @@ class LocalTimezoneOffsetWithUTC(tzinfo):
|
|
|
42
44
|
"""
|
|
43
45
|
return self.DSTOFFSET
|
|
44
46
|
|
|
47
|
+
|
|
45
48
|
LOCAL = LocalTimezoneOffsetWithUTC()
|
|
46
49
|
|
|
50
|
+
|
|
51
|
+
@add_metaclass(ABCMeta)
|
|
47
52
|
class BasicTweetHandler(object):
|
|
48
53
|
"""
|
|
49
54
|
Minimal implementation of `TweetHandler`.
|
|
@@ -101,17 +106,17 @@ class TweetHandlerI(BasicTweetHandler):
|
|
|
101
106
|
|
|
102
107
|
self.startingup = True
|
|
103
108
|
|
|
109
|
+
@abstractmethod
|
|
104
110
|
def handle(self, data):
|
|
105
111
|
"""
|
|
106
112
|
Deal appropriately with data returned by the Twitter API
|
|
107
113
|
"""
|
|
108
|
-
raise NotImplementedError
|
|
109
114
|
|
|
115
|
+
@abstractmethod
|
|
110
116
|
def on_finish(self):
|
|
111
117
|
"""
|
|
112
118
|
Actions when the tweet limit has been reached
|
|
113
119
|
"""
|
|
114
|
-
raise NotImplementedError
|
|
115
120
|
|
|
116
121
|
def check_date_limit(self, data, verbose=False):
|
|
117
122
|
"""
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Twitter client
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
6
6
|
# Lorenzo Rubio <lrnzcig@gmail.com>
|
|
7
7
|
# URL: <http://nltk.org/>
|
|
@@ -19,9 +19,9 @@ import json
|
|
|
19
19
|
|
|
20
20
|
import nltk.compat as compat
|
|
21
21
|
|
|
22
|
-
|
|
23
22
|
HIER_SEPARATOR = "."
|
|
24
23
|
|
|
24
|
+
|
|
25
25
|
def extract_fields(tweet, fields):
|
|
26
26
|
"""
|
|
27
27
|
Extract field values from a full tweet and return them as a list
|
|
@@ -38,6 +38,7 @@ def extract_fields(tweet, fields):
|
|
|
38
38
|
raise RuntimeError('Fatal error when extracting fields. Cannot find field ', field)
|
|
39
39
|
return out
|
|
40
40
|
|
|
41
|
+
|
|
41
42
|
def _add_field_to_out(json, field, out):
|
|
42
43
|
if _is_composed_key(field):
|
|
43
44
|
key, value = _get_key_value_composed(field)
|
|
@@ -45,11 +46,13 @@ def _add_field_to_out(json, field, out):
|
|
|
45
46
|
else:
|
|
46
47
|
out += [json[field]]
|
|
47
48
|
|
|
49
|
+
|
|
48
50
|
def _is_composed_key(field):
|
|
49
51
|
if HIER_SEPARATOR in field:
|
|
50
52
|
return True
|
|
51
53
|
return False
|
|
52
54
|
|
|
55
|
+
|
|
53
56
|
def _get_key_value_composed(field):
|
|
54
57
|
out = field.split(HIER_SEPARATOR)
|
|
55
58
|
# there could be up to 3 levels
|
|
@@ -57,6 +60,7 @@ def _get_key_value_composed(field):
|
|
|
57
60
|
value = HIER_SEPARATOR.join(out[1:])
|
|
58
61
|
return key, value
|
|
59
62
|
|
|
63
|
+
|
|
60
64
|
def _get_entity_recursive(json, entity):
|
|
61
65
|
if not json:
|
|
62
66
|
return None
|
|
@@ -82,6 +86,7 @@ def _get_entity_recursive(json, entity):
|
|
|
82
86
|
else:
|
|
83
87
|
return None
|
|
84
88
|
|
|
89
|
+
|
|
85
90
|
def json2csv(fp, outfile, fields, encoding='utf8', errors='replace',
|
|
86
91
|
gzip_compress=False):
|
|
87
92
|
"""
|
|
@@ -207,6 +212,7 @@ def json2csv_entities(tweets_file, outfile, main_fields, entity_type, entity_fie
|
|
|
207
212
|
_write_to_file(tweet_fields, items, entity_fields, writer)
|
|
208
213
|
outf.close()
|
|
209
214
|
|
|
215
|
+
|
|
210
216
|
def get_header_field_list(main_fields, entity_type, entity_fields):
|
|
211
217
|
if _is_composed_key(entity_type):
|
|
212
218
|
key, value = _get_key_value_composed(entity_type)
|
|
@@ -223,6 +229,7 @@ def get_header_field_list(main_fields, entity_type, entity_fields):
|
|
|
223
229
|
output2 = [HIER_SEPARATOR.join([sub_entity, x]) for x in entity_fields]
|
|
224
230
|
return output1 + output2
|
|
225
231
|
|
|
232
|
+
|
|
226
233
|
def _write_to_file(object_fields, items, entity_fields, writer):
|
|
227
234
|
if not items:
|
|
228
235
|
# it could be that the entity is just not present for the tweet
|
|
@@ -255,4 +262,3 @@ def _write_to_file(object_fields, items, entity_fields, writer):
|
|
|
255
262
|
for item in items:
|
|
256
263
|
row = object_fields + extract_fields(item, entity_fields)
|
|
257
264
|
writer.writerow(row)
|
|
258
|
-
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Twitter client
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Ewan Klein <ewan@inf.ed.ac.uk>
|
|
6
6
|
# Lorenzo Rubio <lrnzcig@gmail.com>
|
|
7
7
|
# URL: <http://nltk.org/>
|
|
@@ -17,6 +17,7 @@ import os
|
|
|
17
17
|
import pprint
|
|
18
18
|
from twython import Twython
|
|
19
19
|
|
|
20
|
+
|
|
20
21
|
def credsfromfile(creds_file=None, subdir=None, verbose=False):
|
|
21
22
|
"""
|
|
22
23
|
Convenience function for authentication
|
|
@@ -28,6 +29,7 @@ class Authenticate(object):
|
|
|
28
29
|
"""
|
|
29
30
|
Methods for authenticating with Twitter.
|
|
30
31
|
"""
|
|
32
|
+
|
|
31
33
|
def __init__(self):
|
|
32
34
|
self.creds_file = 'credentials.txt'
|
|
33
35
|
self.creds_fullpath = None
|
|
@@ -40,7 +42,6 @@ class Authenticate(object):
|
|
|
40
42
|
self.twitter_dir = None
|
|
41
43
|
self.creds_subdir = None
|
|
42
44
|
|
|
43
|
-
|
|
44
45
|
def load_creds(self, creds_file=None, subdir=None, verbose=False):
|
|
45
46
|
"""
|
|
46
47
|
Read OAuth credentials from a text file.
|
|
@@ -70,13 +71,13 @@ class Authenticate(object):
|
|
|
70
71
|
|
|
71
72
|
if subdir is None:
|
|
72
73
|
if self.creds_subdir is None:
|
|
73
|
-
msg = "Supply a value to the 'subdir' parameter or"
|
|
74
|
+
msg = "Supply a value to the 'subdir' parameter or" + \
|
|
74
75
|
" set the TWITTER environment variable."
|
|
75
76
|
raise ValueError(msg)
|
|
76
77
|
else:
|
|
77
78
|
self.creds_subdir = subdir
|
|
78
79
|
|
|
79
|
-
self.creds_fullpath
|
|
80
|
+
self.creds_fullpath = \
|
|
80
81
|
os.path.normpath(os.path.join(self.creds_subdir, self.creds_file))
|
|
81
82
|
|
|
82
83
|
if not os.path.isfile(self.creds_fullpath):
|