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
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
from __future__ import absolute_import, unicode_literals
|
|
3
3
|
import unittest
|
|
4
|
+
|
|
4
5
|
from nltk.corpus import (sinica_treebank, conll2007, indian, cess_cat, cess_esp,
|
|
5
|
-
floresta, ptb, udhr)
|
|
6
|
+
floresta, ptb, udhr) # mwa_ppdb
|
|
7
|
+
|
|
8
|
+
from nltk.compat import python_2_unicode_compatible
|
|
6
9
|
from nltk.tree import Tree
|
|
7
10
|
from nltk.test.unit.utils import skipIf
|
|
8
11
|
|
|
@@ -179,5 +182,19 @@ class TestPTB(unittest.TestCase):
|
|
|
179
182
|
['Thirty-three', 'Scotty', 'did', 'not', 'go', 'back']
|
|
180
183
|
)
|
|
181
184
|
|
|
185
|
+
@unittest.skip("Skipping test for mwa_ppdb.")
|
|
186
|
+
class TestMWAPPDB(unittest.TestCase):
|
|
187
|
+
def test_fileids(self):
|
|
188
|
+
self.assertEqual(mwa_ppdb.fileids(),
|
|
189
|
+
['ppdb-1.0-xxxl-lexical.extended.synonyms.uniquepairs'])
|
|
190
|
+
|
|
191
|
+
def test_entries(self):
|
|
192
|
+
self.assertEqual(mwa_ppdb.entries()[:10],
|
|
193
|
+
[('10/17/01', '17/10/2001'), ('102,70', '102.70'),
|
|
194
|
+
('13,53', '13.53'), ('3.2.5.3.2.1', '3.2.5.3.2.1.'),
|
|
195
|
+
('53,76', '53.76'), ('6.9.5', '6.9.5.'),
|
|
196
|
+
('7.7.6.3', '7.7.6.3.'), ('76,20', '76.20'),
|
|
197
|
+
('79,85', '79.85'), ('93,65', '93.65')] )
|
|
198
|
+
|
|
182
199
|
# unload corpora
|
|
183
200
|
from nltk.corpus import teardown_module
|
|
@@ -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: Lorenzo Rubio <lrnzcig@gmail.com>
|
|
6
6
|
# URL: <http://nltk.org/>
|
|
7
7
|
# For license information, see LICENSE.TXT
|
|
@@ -16,9 +16,10 @@ import os
|
|
|
16
16
|
from nltk.compat import TemporaryDirectory
|
|
17
17
|
import unittest
|
|
18
18
|
|
|
19
|
+
from six.moves import zip
|
|
20
|
+
|
|
19
21
|
from nltk.corpus import twitter_samples
|
|
20
22
|
from nltk.twitter.common import json2csv, json2csv_entities
|
|
21
|
-
from nltk.compat import izip
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
def are_files_identical(filename1, filename2, debug=False):
|
|
@@ -28,7 +29,7 @@ def are_files_identical(filename1, filename2, debug=False):
|
|
|
28
29
|
with open(filename1, "rb") as fileA:
|
|
29
30
|
with open(filename2, "rb") as fileB:
|
|
30
31
|
result = True
|
|
31
|
-
for lineA, lineB in
|
|
32
|
+
for lineA, lineB in zip(sorted(fileA.readlines()),
|
|
32
33
|
sorted(fileB.readlines())):
|
|
33
34
|
if lineA.strip() != lineB.strip():
|
|
34
35
|
if debug:
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from __future__ import print_function, unicode_literals
|
|
3
|
+
|
|
4
|
+
import unittest
|
|
5
|
+
|
|
6
|
+
from nltk.corpus import rte as rte_corpus
|
|
7
|
+
from nltk.classify.rte_classify import RTEFeatureExtractor, rte_features, rte_classifier
|
|
8
|
+
|
|
9
|
+
expected_from_rte_feature_extration = """
|
|
10
|
+
alwayson => True
|
|
11
|
+
ne_hyp_extra => 0
|
|
12
|
+
ne_overlap => 1
|
|
13
|
+
neg_hyp => 0
|
|
14
|
+
neg_txt => 0
|
|
15
|
+
word_hyp_extra => 3
|
|
16
|
+
word_overlap => 3
|
|
17
|
+
|
|
18
|
+
alwayson => True
|
|
19
|
+
ne_hyp_extra => 0
|
|
20
|
+
ne_overlap => 1
|
|
21
|
+
neg_hyp => 0
|
|
22
|
+
neg_txt => 0
|
|
23
|
+
word_hyp_extra => 2
|
|
24
|
+
word_overlap => 1
|
|
25
|
+
|
|
26
|
+
alwayson => True
|
|
27
|
+
ne_hyp_extra => 1
|
|
28
|
+
ne_overlap => 1
|
|
29
|
+
neg_hyp => 0
|
|
30
|
+
neg_txt => 0
|
|
31
|
+
word_hyp_extra => 1
|
|
32
|
+
word_overlap => 2
|
|
33
|
+
|
|
34
|
+
alwayson => True
|
|
35
|
+
ne_hyp_extra => 1
|
|
36
|
+
ne_overlap => 0
|
|
37
|
+
neg_hyp => 0
|
|
38
|
+
neg_txt => 0
|
|
39
|
+
word_hyp_extra => 6
|
|
40
|
+
word_overlap => 2
|
|
41
|
+
|
|
42
|
+
alwayson => True
|
|
43
|
+
ne_hyp_extra => 1
|
|
44
|
+
ne_overlap => 0
|
|
45
|
+
neg_hyp => 0
|
|
46
|
+
neg_txt => 0
|
|
47
|
+
word_hyp_extra => 4
|
|
48
|
+
word_overlap => 0
|
|
49
|
+
|
|
50
|
+
alwayson => True
|
|
51
|
+
ne_hyp_extra => 1
|
|
52
|
+
ne_overlap => 0
|
|
53
|
+
neg_hyp => 0
|
|
54
|
+
neg_txt => 0
|
|
55
|
+
word_hyp_extra => 3
|
|
56
|
+
word_overlap => 1
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class RTEClassifierTest(unittest.TestCase):
|
|
61
|
+
# Test the feature extraction method.
|
|
62
|
+
def test_rte_feature_extraction(self):
|
|
63
|
+
pairs = rte_corpus.pairs(['rte1_dev.xml'])[:6]
|
|
64
|
+
test_output = ["%-15s => %s" % (key, rte_features(pair)[key])
|
|
65
|
+
for pair in pairs for key in sorted(rte_features(pair))]
|
|
66
|
+
expected_output = expected_from_rte_feature_extration.strip().split('\n')
|
|
67
|
+
# Remove null strings.
|
|
68
|
+
expected_output = list(filter(None, expected_output))
|
|
69
|
+
self.assertEqual(test_output, expected_output)
|
|
70
|
+
# Test the RTEFeatureExtractor object.
|
|
71
|
+
def test_feature_extractor_object(self):
|
|
72
|
+
rtepair = rte_corpus.pairs(['rte3_dev.xml'])[33]
|
|
73
|
+
extractor = RTEFeatureExtractor(rtepair)
|
|
74
|
+
self.assertEqual(extractor.hyp_words, {'member', 'China', 'SCO.'})
|
|
75
|
+
self.assertEqual(extractor.overlap('word'), set())
|
|
76
|
+
self.assertEqual(extractor.overlap('ne'), {'China'})
|
|
77
|
+
self.assertEqual(extractor.hyp_extra('word'), {'member'})
|
|
78
|
+
# Test the RTE classifier training.
|
|
79
|
+
def test_rte_classification_without_megam(self):
|
|
80
|
+
clf = rte_classifier('IIS')
|
|
81
|
+
clf = rte_classifier('GIS')
|
|
82
|
+
@unittest.skip("Skipping tests with dependencies on MEGAM")
|
|
83
|
+
def test_rte_classification_with_megam(self):
|
|
84
|
+
nltk.config_megam('/usr/local/bin/megam')
|
|
85
|
+
clf = rte_classifier('megam')
|
|
86
|
+
clf = rte_classifier('BFGS')
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit tests for Senna
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import unicode_literals
|
|
7
|
+
from os import environ, path, sep
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
from nltk.classify import Senna
|
|
13
|
+
from nltk.tag import SennaTagger, SennaChunkTagger, SennaNERTagger
|
|
14
|
+
|
|
15
|
+
# Set Senna executable path for tests if it is not specified as an environment variable
|
|
16
|
+
if 'SENNA' in environ:
|
|
17
|
+
SENNA_EXECUTABLE_PATH = path.normpath(environ['SENNA']) + sep
|
|
18
|
+
else:
|
|
19
|
+
SENNA_EXECUTABLE_PATH = '/usr/share/senna-v3.0'
|
|
20
|
+
|
|
21
|
+
senna_is_installed = path.exists(SENNA_EXECUTABLE_PATH)
|
|
22
|
+
|
|
23
|
+
@unittest.skipUnless(senna_is_installed, "Requires Senna executable")
|
|
24
|
+
class TestSennaPipeline(unittest.TestCase):
|
|
25
|
+
"""Unittest for nltk.classify.senna"""
|
|
26
|
+
|
|
27
|
+
def test_senna_pipeline(self):
|
|
28
|
+
"""Senna pipeline interface"""
|
|
29
|
+
|
|
30
|
+
pipeline = Senna(SENNA_EXECUTABLE_PATH, ['pos', 'chk', 'ner'])
|
|
31
|
+
sent = 'Dusseldorf is an international business center'.split()
|
|
32
|
+
result = [(token['word'], token['chk'], token['ner'], token['pos']) for token in pipeline.tag(sent)]
|
|
33
|
+
expected = [('Dusseldorf', 'B-NP', 'B-LOC', 'NNP'), ('is', 'B-VP',
|
|
34
|
+
'O', 'VBZ'), ('an', 'B-NP', 'O', 'DT'), ('international', 'I-NP',
|
|
35
|
+
'O', 'JJ'), ('business', 'I-NP', 'O', 'NN'), ('center', 'I-NP',
|
|
36
|
+
'O', 'NN')]
|
|
37
|
+
self.assertEqual(result, expected)
|
|
38
|
+
|
|
39
|
+
@unittest.skipUnless(senna_is_installed, "Requires Senna executable")
|
|
40
|
+
class TestSennaTagger(unittest.TestCase):
|
|
41
|
+
"""Unittest for nltk.tag.senna"""
|
|
42
|
+
|
|
43
|
+
def test_senna_tagger(self):
|
|
44
|
+
tagger = SennaTagger(SENNA_EXECUTABLE_PATH)
|
|
45
|
+
result = tagger.tag('What is the airspeed of an unladen swallow ?'.split())
|
|
46
|
+
expected = [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed',
|
|
47
|
+
'NN'),('of', 'IN'), ('an', 'DT'), ('unladen', 'NN'), ('swallow',
|
|
48
|
+
'NN'), ('?', '.')]
|
|
49
|
+
self.assertEqual(result, expected)
|
|
50
|
+
|
|
51
|
+
def test_senna_chunk_tagger(self):
|
|
52
|
+
chktagger = SennaChunkTagger(SENNA_EXECUTABLE_PATH)
|
|
53
|
+
result_1 = chktagger.tag('What is the airspeed of an unladen swallow ?'.split())
|
|
54
|
+
expected_1 = [('What', 'B-NP'), ('is', 'B-VP'), ('the', 'B-NP'), ('airspeed',
|
|
55
|
+
'I-NP'), ('of', 'B-PP'), ('an', 'B-NP'), ('unladen', 'I-NP'), ('swallow',
|
|
56
|
+
'I-NP'), ('?', 'O')]
|
|
57
|
+
|
|
58
|
+
result_2 = list(chktagger.bio_to_chunks(result_1, chunk_type='NP'))
|
|
59
|
+
expected_2 = [('What', '0'), ('the airspeed', '2-3'), ('an unladen swallow',
|
|
60
|
+
'5-6-7')]
|
|
61
|
+
self.assertEqual(result_1, expected_1)
|
|
62
|
+
self.assertEqual(result_2, expected_2)
|
|
63
|
+
|
|
64
|
+
def test_senna_ner_tagger(self):
|
|
65
|
+
nertagger = SennaNERTagger(SENNA_EXECUTABLE_PATH)
|
|
66
|
+
result_1 = nertagger.tag('Shakespeare theatre was in London .'.split())
|
|
67
|
+
expected_1 = [('Shakespeare', 'B-PER'), ('theatre', 'O'), ('was', 'O'),
|
|
68
|
+
('in', 'O'), ('London', 'B-LOC'), ('.', 'O')]
|
|
69
|
+
|
|
70
|
+
result_2 = nertagger.tag('UN headquarters are in NY , USA .'.split())
|
|
71
|
+
expected_2 = [('UN', 'B-ORG'), ('headquarters', 'O'), ('are', 'O'),
|
|
72
|
+
('in', 'O'), ('NY', 'B-LOC'), (',', 'O'), ('USA', 'B-LOC'), ('.', 'O')]
|
|
73
|
+
self.assertEqual(result_1, expected_1)
|
|
74
|
+
self.assertEqual(result_2, expected_2)
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
from __future__ import print_function, unicode_literals
|
|
3
|
+
import unittest
|
|
4
|
+
from contextlib import closing
|
|
5
|
+
from nltk import data
|
|
6
|
+
from nltk.stem.snowball import SnowballStemmer
|
|
7
|
+
from nltk.stem.porter import PorterStemmer
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class SnowballTest(unittest.TestCase):
|
|
12
|
+
|
|
13
|
+
def test_arabic(self):
|
|
14
|
+
"""
|
|
15
|
+
this unit testing for test the snowball arabic light stemmer
|
|
16
|
+
this stemmer deals with prefixes and suffixes
|
|
17
|
+
"""
|
|
18
|
+
ar_stemmer = SnowballStemmer("arabic")
|
|
19
|
+
assert ar_stemmer.stem('الْعَرَبِــــــيَّة') == "عرب"
|
|
20
|
+
assert ar_stemmer.stem("العربية") == "عرب"
|
|
21
|
+
assert ar_stemmer.stem("فقالوا") == "قال"
|
|
22
|
+
assert ar_stemmer.stem("الطالبات") == "طالب"
|
|
23
|
+
assert ar_stemmer.stem("فالطالبات") == "طالب"
|
|
24
|
+
assert ar_stemmer.stem("والطالبات") == "طالب"
|
|
25
|
+
assert ar_stemmer.stem("الطالبون") == "طالب"
|
|
26
|
+
|
|
27
|
+
def test_russian(self):
|
|
28
|
+
# Russian words both consisting of Cyrillic
|
|
29
|
+
# and Roman letters can be stemmed.
|
|
30
|
+
stemmer_russian = SnowballStemmer("russian")
|
|
31
|
+
assert stemmer_russian.stem("авантненькая") == "авантненьк"
|
|
32
|
+
assert stemmer_russian.stem("avenantnen'kai^a") == "avenantnen'k"
|
|
33
|
+
|
|
34
|
+
def test_german(self):
|
|
35
|
+
stemmer_german = SnowballStemmer("german")
|
|
36
|
+
stemmer_german2 = SnowballStemmer("german", ignore_stopwords=True)
|
|
37
|
+
|
|
38
|
+
assert stemmer_german.stem("Schr\xe4nke") == 'schrank'
|
|
39
|
+
assert stemmer_german2.stem("Schr\xe4nke") == 'schrank'
|
|
40
|
+
|
|
41
|
+
assert stemmer_german.stem("keinen") == 'kein'
|
|
42
|
+
assert stemmer_german2.stem("keinen") == 'keinen'
|
|
43
|
+
|
|
44
|
+
def test_spanish(self):
|
|
45
|
+
stemmer = SnowballStemmer('spanish')
|
|
46
|
+
|
|
47
|
+
assert stemmer.stem("Visionado") == 'vision'
|
|
48
|
+
|
|
49
|
+
# The word 'algue' was raising an IndexError
|
|
50
|
+
assert stemmer.stem("algue") == 'algu'
|
|
51
|
+
|
|
52
|
+
def test_short_strings_bug(self):
|
|
53
|
+
stemmer = SnowballStemmer('english')
|
|
54
|
+
assert stemmer.stem("y's") == 'y'
|
|
55
|
+
|
|
56
|
+
class PorterTest(unittest.TestCase):
|
|
57
|
+
|
|
58
|
+
def _vocabulary(self):
|
|
59
|
+
with closing(data.find('stemmers/porter_test/porter_vocabulary.txt').open(encoding='utf-8')) as fp:
|
|
60
|
+
return fp.read().splitlines()
|
|
61
|
+
|
|
62
|
+
def _test_against_expected_output(self, stemmer_mode, expected_stems):
|
|
63
|
+
stemmer = PorterStemmer(mode=stemmer_mode)
|
|
64
|
+
for word, true_stem in zip(self._vocabulary(), expected_stems):
|
|
65
|
+
our_stem = stemmer.stem(word)
|
|
66
|
+
assert our_stem == true_stem, (
|
|
67
|
+
"%s should stem to %s in %s mode but got %s" % (
|
|
68
|
+
word, true_stem, stemmer_mode, our_stem
|
|
69
|
+
)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
def test_vocabulary_martin_mode(self):
|
|
73
|
+
"""Tests all words from the test vocabulary provided by M Porter
|
|
74
|
+
|
|
75
|
+
The sample vocabulary and output were sourced from:
|
|
76
|
+
http://tartarus.org/martin/PorterStemmer/voc.txt
|
|
77
|
+
http://tartarus.org/martin/PorterStemmer/output.txt
|
|
78
|
+
and are linked to from the Porter Stemmer algorithm's homepage
|
|
79
|
+
at
|
|
80
|
+
http://tartarus.org/martin/PorterStemmer/
|
|
81
|
+
"""
|
|
82
|
+
with closing(data.find('stemmers/porter_test/porter_martin_output.txt').open(encoding='utf-8')) as fp:
|
|
83
|
+
self._test_against_expected_output(
|
|
84
|
+
PorterStemmer.MARTIN_EXTENSIONS,
|
|
85
|
+
fp.read().splitlines()
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
def test_vocabulary_nltk_mode(self):
|
|
89
|
+
with closing(data.find('stemmers/porter_test/porter_nltk_output.txt').open(encoding='utf-8')) as fp:
|
|
90
|
+
self._test_against_expected_output(
|
|
91
|
+
PorterStemmer.NLTK_EXTENSIONS,
|
|
92
|
+
fp.read().splitlines()
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
def test_vocabulary_original_mode(self):
|
|
96
|
+
# The list of stems for this test was generated by taking the
|
|
97
|
+
# Martin-blessed stemmer from
|
|
98
|
+
# http://tartarus.org/martin/PorterStemmer/c.txt
|
|
99
|
+
# and removing all the --DEPARTURE-- sections from it and
|
|
100
|
+
# running it against Martin's test vocabulary.
|
|
101
|
+
|
|
102
|
+
with closing(data.find('stemmers/porter_test/porter_original_output.txt').open(encoding='utf-8')) as fp:
|
|
103
|
+
self._test_against_expected_output(
|
|
104
|
+
PorterStemmer.ORIGINAL_ALGORITHM,
|
|
105
|
+
fp.read().splitlines()
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
self._test_against_expected_output(
|
|
109
|
+
PorterStemmer.ORIGINAL_ALGORITHM,
|
|
110
|
+
data.find('stemmers/porter_test/porter_original_output.txt')
|
|
111
|
+
.open(encoding='utf-8')
|
|
112
|
+
.read()
|
|
113
|
+
.splitlines()
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def test_oed_bug(self):
|
|
117
|
+
"""Test for bug https://github.com/nltk/nltk/issues/1581
|
|
118
|
+
|
|
119
|
+
Ensures that 'oed' can be stemmed without throwing an error.
|
|
120
|
+
"""
|
|
121
|
+
assert PorterStemmer().stem('oed') == 'o'
|
|
@@ -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
|
|
@@ -13,7 +13,9 @@ Unit tests for nltk.tgrep.
|
|
|
13
13
|
'''
|
|
14
14
|
|
|
15
15
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
from six import b
|
|
18
|
+
|
|
17
19
|
from nltk.tree import ParentedTree
|
|
18
20
|
from nltk import tgrep
|
|
19
21
|
import unittest
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit tests for nltk.tokenize.
|
|
4
|
+
See also nltk/test/tokenize.doctest
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import unicode_literals
|
|
8
|
+
from nltk.tokenize import TweetTokenizer, StanfordSegmenter, TreebankWordTokenizer
|
|
9
|
+
from nose import SkipTest
|
|
10
|
+
import unittest
|
|
11
|
+
import os
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestTokenize(unittest.TestCase):
|
|
15
|
+
|
|
16
|
+
def test_tweet_tokenizer(self):
|
|
17
|
+
"""
|
|
18
|
+
Test TweetTokenizer using words with special and accented characters.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
tokenizer = TweetTokenizer(strip_handles=True, reduce_len=True)
|
|
22
|
+
s9 = "@myke: Let's test these words: resumé España München français"
|
|
23
|
+
tokens = tokenizer.tokenize(s9)
|
|
24
|
+
expected = [':', "Let's", 'test', 'these', 'words', ':', 'resumé',
|
|
25
|
+
'España', 'München', 'français']
|
|
26
|
+
self.assertEqual(tokens, expected)
|
|
27
|
+
|
|
28
|
+
def test_stanford_segmenter_arabic(self):
|
|
29
|
+
"""
|
|
30
|
+
Test the Stanford Word Segmenter for Arabic (default config)
|
|
31
|
+
"""
|
|
32
|
+
try:
|
|
33
|
+
seg = StanfordSegmenter()
|
|
34
|
+
seg.default_config('ar')
|
|
35
|
+
sent = u'يبحث علم الحاسوب استخدام الحوسبة بجميع اشكالها لحل المشكلات'
|
|
36
|
+
segmented_sent = seg.segment(sent.split())
|
|
37
|
+
assert segmented_sent.split() == ['يبحث', 'علم', 'الحاسوب', 'استخدام',
|
|
38
|
+
'الحوسبة', 'ب', 'جميع', 'اشكال',
|
|
39
|
+
'ها', 'ل', 'حل', 'المشكلات']
|
|
40
|
+
except LookupError as e:
|
|
41
|
+
raise SkipTest(str(e))
|
|
42
|
+
|
|
43
|
+
def test_stanford_segmenter_chinese(self):
|
|
44
|
+
"""
|
|
45
|
+
Test the Stanford Word Segmenter for Chinese (default config)
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
seg = StanfordSegmenter()
|
|
49
|
+
seg.default_config('zh')
|
|
50
|
+
sent = u"这是斯坦福中文分词器测试"
|
|
51
|
+
segmented_sent = seg.segment(sent.split())
|
|
52
|
+
assert segmented_sent.split() == ['这', '是', '斯坦福',
|
|
53
|
+
'中文', '分词器', '测试']
|
|
54
|
+
except LookupError as e:
|
|
55
|
+
raise SkipTest(str(e))
|
|
56
|
+
|
|
57
|
+
def test_phone_tokenizer(self):
|
|
58
|
+
"""
|
|
59
|
+
Test a string that resembles a phone number but contains a newline
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
# Should be recognized as a phone number, albeit one with multiple spaces
|
|
63
|
+
tokenizer = TweetTokenizer()
|
|
64
|
+
test1 = "(393) 928 -3010"
|
|
65
|
+
expected = ['(393) 928 -3010']
|
|
66
|
+
result = tokenizer.tokenize(test1)
|
|
67
|
+
self.assertEqual(result, expected)
|
|
68
|
+
|
|
69
|
+
# Due to newline, first three elements aren't part of a phone number;
|
|
70
|
+
# fourth is
|
|
71
|
+
test2= "(393)\n928 -3010"
|
|
72
|
+
expected = ['(', '393', ')', "928 -3010"]
|
|
73
|
+
result = tokenizer.tokenize(test2)
|
|
74
|
+
self.assertEqual(result, expected)
|
|
75
|
+
|
|
76
|
+
def test_remove_handle(self):
|
|
77
|
+
"""
|
|
78
|
+
Test remove_handle() from casual.py with specially crafted edge cases
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
tokenizer = TweetTokenizer(strip_handles=True)
|
|
82
|
+
|
|
83
|
+
# Simple example. Handles with just numbers should be allowed
|
|
84
|
+
test1 = "@twitter hello @twi_tter_. hi @12345 @123news"
|
|
85
|
+
expected = ['hello', '.', 'hi']
|
|
86
|
+
result = tokenizer.tokenize(test1)
|
|
87
|
+
self.assertEqual(result, expected)
|
|
88
|
+
|
|
89
|
+
# Handles are allowed to follow any of the following characters
|
|
90
|
+
test2 = "@n`@n~@n(@n)@n-@n=@n+@n\\@n|@n[@n]@n{@n}@n;@n:@n'@n\"@n/@n?@n.@n,@n<@n>@n @n\n@n ñ@n.ü@n.ç@n."
|
|
91
|
+
expected = ['`', '~', '(', ')', '-', '=', '+', '\\', '|', '[', ']', '{', '}', ';', ':', "'", '"', '/', '?', '.', ',', '<', '>', 'ñ', '.', 'ü', '.', 'ç', '.']
|
|
92
|
+
result = tokenizer.tokenize(test2)
|
|
93
|
+
self.assertEqual(result, expected)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
# Handles are NOT allowed to follow any of the following characters
|
|
97
|
+
test3 = "a@n j@n z@n A@n L@n Z@n 1@n 4@n 7@n 9@n 0@n _@n !@n @@n #@n $@n %@n &@n *@n"
|
|
98
|
+
expected = ['a', '@n', 'j', '@n', 'z', '@n', 'A', '@n', 'L', '@n', 'Z', '@n', '1', '@n', '4', '@n', '7', '@n', '9', '@n', '0', '@n', '_', '@n', '!', '@n', '@', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n']
|
|
99
|
+
result = tokenizer.tokenize(test3)
|
|
100
|
+
self.assertEqual(result, expected)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# Handles are allowed to precede the following characters
|
|
104
|
+
test4 = "@n!a @n#a @n$a @n%a @n&a @n*a"
|
|
105
|
+
expected = ['!', 'a', '#', 'a', '$', 'a', '%', 'a', '&', 'a', '*', 'a']
|
|
106
|
+
result = tokenizer.tokenize(test4)
|
|
107
|
+
self.assertEqual(result, expected)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# Tests interactions with special symbols and multiple @
|
|
111
|
+
test5 = "@n!@n @n#@n @n$@n @n%@n @n&@n @n*@n @n@n @@n @n@@n @n_@n @n7@n @nj@n"
|
|
112
|
+
expected = ['!', '@n', '#', '@n', '$', '@n', '%', '@n', '&', '@n', '*', '@n', '@n', '@n', '@', '@n', '@n', '@', '@n', '@n_', '@n', '@n7', '@n', '@nj', '@n']
|
|
113
|
+
result = tokenizer.tokenize(test5)
|
|
114
|
+
self.assertEqual(result, expected)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
# Tests that handles can have a max length of 20
|
|
118
|
+
test6 = "@abcdefghijklmnopqrstuvwxyz @abcdefghijklmnopqrst1234 @abcdefghijklmnopqrst_ @abcdefghijklmnopqrstendofhandle"
|
|
119
|
+
expected = ['uvwxyz', '1234', '_', 'endofhandle']
|
|
120
|
+
result = tokenizer.tokenize(test6)
|
|
121
|
+
self.assertEqual(result, expected)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# Edge case where an @ comes directly after a long handle
|
|
125
|
+
test7 = "@abcdefghijklmnopqrstu@abcde @abcdefghijklmnopqrst@abcde @abcdefghijklmnopqrst_@abcde @abcdefghijklmnopqrst5@abcde"
|
|
126
|
+
expected = ['u', '@abcde', '@abcdefghijklmnopqrst', '@abcde', '_', '@abcde', '5', '@abcde']
|
|
127
|
+
result = tokenizer.tokenize(test7)
|
|
128
|
+
self.assertEqual(result, expected)
|
|
129
|
+
|
|
130
|
+
def test_treebank_span_tokenizer(self):
|
|
131
|
+
"""
|
|
132
|
+
Test TreebankWordTokenizer.span_tokenize function
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
tokenizer = TreebankWordTokenizer()
|
|
136
|
+
|
|
137
|
+
# Test case in the docstring
|
|
138
|
+
test1 = "Good muffins cost $3.88\nin New (York). Please (buy) me\ntwo of them.\n(Thanks)."
|
|
139
|
+
expected = [
|
|
140
|
+
(0, 4), (5, 12), (13, 17), (18, 19), (19, 23),
|
|
141
|
+
(24, 26), (27, 30), (31, 32), (32, 36), (36, 37), (37, 38),
|
|
142
|
+
(40, 46), (47, 48), (48, 51), (51, 52), (53, 55), (56, 59),
|
|
143
|
+
(60, 62), (63, 68), (69, 70), (70, 76), (76, 77), (77, 78)
|
|
144
|
+
]
|
|
145
|
+
result = list(tokenizer.span_tokenize(test1))
|
|
146
|
+
self.assertEqual(result, expected)
|
|
147
|
+
|
|
148
|
+
# Test case with double quotation
|
|
149
|
+
test2 = "The DUP is similar to the \"religious right\" in the United States and takes a hardline stance on social issues"
|
|
150
|
+
expected = [
|
|
151
|
+
(0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
|
|
152
|
+
(27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
|
|
153
|
+
(65, 68), (69, 74), (75, 76), (77, 85), (86, 92), (93, 95), (96, 102),
|
|
154
|
+
(103, 109)
|
|
155
|
+
]
|
|
156
|
+
result = list(tokenizer.span_tokenize(test2))
|
|
157
|
+
self.assertEqual(result, expected)
|
|
158
|
+
|
|
159
|
+
# Test case with double qoutation as well as converted quotations
|
|
160
|
+
test3 = "The DUP is similar to the \"religious right\" in the United States and takes a ``hardline'' stance on social issues"
|
|
161
|
+
expected = [
|
|
162
|
+
(0, 3), (4, 7), (8, 10), (11, 18), (19, 21), (22, 25), (26, 27),
|
|
163
|
+
(27, 36), (37, 42), (42, 43), (44, 46), (47, 50), (51, 57), (58, 64),
|
|
164
|
+
(65, 68), (69, 74), (75, 76), (77, 79), (79, 87), (87, 89), (90, 96),
|
|
165
|
+
(97, 99), (100, 106), (107, 113)
|
|
166
|
+
]
|
|
167
|
+
result = list(tokenizer.span_tokenize(test3))
|
|
168
|
+
self.assertEqual(result, expected)
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Unit tests for nltk.corpus.wordnet
|
|
4
|
+
See also nltk/test/wordnet.doctest
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import unicode_literals
|
|
8
|
+
from nose import SkipTest
|
|
9
|
+
import unittest
|
|
10
|
+
import os
|
|
11
|
+
|
|
12
|
+
from nltk.corpus.reader.wordnet import WordNetCorpusReader
|
|
13
|
+
from nltk.corpus import wordnet as wn
|
|
14
|
+
from nltk.corpus import wordnet_ic as wnic
|
|
15
|
+
from nltk.data import find as find_data
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
wn.ensure_loaded()
|
|
19
|
+
S = wn.synset
|
|
20
|
+
L = wn.lemma
|
|
21
|
+
|
|
22
|
+
class WordnNetDemo(unittest.TestCase):
|
|
23
|
+
|
|
24
|
+
def test_retrieve_synset(self):
|
|
25
|
+
move_synset = S('go.v.21')
|
|
26
|
+
self.assertEqual(move_synset.name(), "move.v.15")
|
|
27
|
+
self.assertEqual(move_synset.lemma_names(), ['move', 'go'])
|
|
28
|
+
self.assertEqual(move_synset.definition(), "have a turn; make one's move in a game")
|
|
29
|
+
self.assertEqual(move_synset.examples(), ['Can I go now?'])
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_retrieve_synsets(self):
|
|
33
|
+
self.assertEqual(sorted(wn.synsets('zap', pos='n')),
|
|
34
|
+
[S('zap.n.01')])
|
|
35
|
+
self.assertEqual(sorted(wn.synsets('zap', pos='v')),
|
|
36
|
+
[S('microwave.v.01'), S('nuke.v.01'), S('zap.v.01'), S('zap.v.02')])
|
|
37
|
+
|
|
38
|
+
def test_hyperhyponyms(self):
|
|
39
|
+
# Not every synset as hypernyms()
|
|
40
|
+
self.assertEqual(S('travel.v.01').hypernyms(), [])
|
|
41
|
+
self.assertEqual(S('travel.v.02').hypernyms(),
|
|
42
|
+
[S('travel.v.03')])
|
|
43
|
+
self.assertEqual(S('travel.v.03').hypernyms(), [])
|
|
44
|
+
|
|
45
|
+
# Test hyper-/hyponyms.
|
|
46
|
+
self.assertEqual(S('breakfast.n.1').hypernyms(), [S('meal.n.01')])
|
|
47
|
+
first_five_meal_hypo = [S('banquet.n.02'), S('bite.n.04'), S('breakfast.n.01'), S('brunch.n.01'), S('buffet.n.02')]
|
|
48
|
+
self.assertEqual(sorted(S('meal.n.1').hyponyms()[:5]), first_five_meal_hypo)
|
|
49
|
+
self.assertEqual(S('Austen.n.1').instance_hypernyms(), [S('writer.n.01')])
|
|
50
|
+
first_five_composer_hypo = [S('ambrose.n.01'), S('bach.n.01'), S('barber.n.01'), S('bartok.n.01'), S('beethoven.n.01')]
|
|
51
|
+
self.assertEqual(S('composer.n.1').instance_hyponyms()[:5], first_five_composer_hypo)
|
|
52
|
+
|
|
53
|
+
# Test root hyper-/hyponyms
|
|
54
|
+
self.assertEqual(S('person.n.01').root_hypernyms(), [S('entity.n.01')])
|
|
55
|
+
self.assertEqual(S('sail.v.01').root_hypernyms(), [S('travel.v.01')])
|
|
56
|
+
self.assertEqual(S('fall.v.12').root_hypernyms(), [S('act.v.01'), S('fall.v.17')])
|
|
57
|
+
|
|
58
|
+
def test_derivationally_related_forms(self):
|
|
59
|
+
# Test `derivationally_related_forms()`
|
|
60
|
+
self.assertEqual(L('zap.v.03.nuke').derivationally_related_forms(),
|
|
61
|
+
[L('atomic_warhead.n.01.nuke')])
|
|
62
|
+
self.assertEqual(L('zap.v.03.atomize').derivationally_related_forms(),
|
|
63
|
+
[L('atomization.n.02.atomization')])
|
|
64
|
+
self.assertEqual(L('zap.v.03.atomise').derivationally_related_forms(),
|
|
65
|
+
[L('atomization.n.02.atomisation')])
|
|
66
|
+
self.assertEqual(L('zap.v.03.zap').derivationally_related_forms(),
|
|
67
|
+
[])
|
|
68
|
+
|
|
69
|
+
def test_meronyms_holonyms(self):
|
|
70
|
+
# Test meronyms, holonyms.
|
|
71
|
+
self.assertEqual(S('dog.n.01').member_holonyms(), [S('canis.n.01'), S('pack.n.06')])
|
|
72
|
+
self.assertEqual(S('dog.n.01').part_meronyms(), [S('flag.n.07')])
|
|
73
|
+
|
|
74
|
+
self.assertEqual(S('faculty.n.2').member_meronyms(),
|
|
75
|
+
[S('professor.n.01')])
|
|
76
|
+
self.assertEqual(S('copilot.n.1').member_holonyms(),
|
|
77
|
+
[S('crew.n.01')])
|
|
78
|
+
|
|
79
|
+
self.assertEqual(S('table.n.2').part_meronyms(),
|
|
80
|
+
[S('leg.n.03'), S('tabletop.n.01'), S('tableware.n.01')])
|
|
81
|
+
self.assertEqual(S('course.n.7').part_holonyms(),
|
|
82
|
+
[S('meal.n.01')])
|
|
83
|
+
|
|
84
|
+
self.assertEqual(S('water.n.1').substance_meronyms(),
|
|
85
|
+
[S('hydrogen.n.01'), S('oxygen.n.01')])
|
|
86
|
+
self.assertEqual(S('gin.n.1').substance_holonyms(),
|
|
87
|
+
[S('gin_and_it.n.01'), S('gin_and_tonic.n.01'),
|
|
88
|
+
S('martini.n.01'), S('pink_lady.n.01')])
|
|
89
|
+
|
|
90
|
+
def test_antonyms(self):
|
|
91
|
+
# Test antonyms.
|
|
92
|
+
self.assertEqual(L('leader.n.1.leader').antonyms(), [L('follower.n.01.follower')])
|
|
93
|
+
self.assertEqual(L('increase.v.1.increase').antonyms(), [L('decrease.v.01.decrease')])
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_misc_relations(self):
|
|
97
|
+
# Test misc relations.
|
|
98
|
+
self.assertEqual(S('snore.v.1').entailments(), [S('sleep.v.01')])
|
|
99
|
+
self.assertEqual(S('heavy.a.1').similar_tos(),
|
|
100
|
+
[S('dense.s.03'), S('doughy.s.01'),
|
|
101
|
+
S('heavier-than-air.s.01'), S('hefty.s.02'),
|
|
102
|
+
S('massive.s.04'), S('non-buoyant.s.01'),
|
|
103
|
+
S('ponderous.s.02')])
|
|
104
|
+
self.assertEqual(S('light.a.1').attributes(), [S('weight.n.01')])
|
|
105
|
+
self.assertEqual(S('heavy.a.1').attributes(), [S('weight.n.01')])
|
|
106
|
+
|
|
107
|
+
# Test pertainyms.
|
|
108
|
+
self.assertEqual(L('English.a.1.English').pertainyms(),
|
|
109
|
+
[L('england.n.01.England')])
|
|
110
|
+
|
|
111
|
+
def test_lch(self):
|
|
112
|
+
# Test LCH.
|
|
113
|
+
self.assertEqual(S('person.n.01').lowest_common_hypernyms(S('dog.n.01')),
|
|
114
|
+
[S('organism.n.01')])
|
|
115
|
+
self.assertEqual(S('woman.n.01').lowest_common_hypernyms(S('girlfriend.n.02')),
|
|
116
|
+
[S('woman.n.01')])
|
|
117
|
+
|
|
118
|
+
def test_domains(self):
|
|
119
|
+
# Test domains.
|
|
120
|
+
self.assertEqual(S('code.n.03').topic_domains(), [S('computer_science.n.01')])
|
|
121
|
+
self.assertEqual(S('pukka.a.01').region_domains(), [S('india.n.01')])
|
|
122
|
+
self.assertEqual(S('freaky.a.01').usage_domains(), [S('slang.n.02')])
|
|
123
|
+
|
|
124
|
+
def test_wordnet_similarities(self):
|
|
125
|
+
# Path based similarities.
|
|
126
|
+
self.assertAlmostEqual(S('cat.n.01').path_similarity(S('cat.n.01')), 1.0)
|
|
127
|
+
self.assertAlmostEqual(S('dog.n.01').path_similarity(S('cat.n.01')), 0.2)
|
|
128
|
+
self.assertAlmostEqual(S('dog.n.01').lch_similarity(S('cat.n.01')), 2.028, places=3)
|
|
129
|
+
self.assertAlmostEqual(S('dog.n.01').wup_similarity(S('cat.n.01')), 0.8571, places=3)
|
|
130
|
+
# Information Content similarities.
|
|
131
|
+
brown_ic = wnic.ic('ic-brown.dat')
|
|
132
|
+
self.assertAlmostEqual(S('dog.n.01').jcn_similarity(S('cat.n.01'), brown_ic), 0.4497, places=3)
|
|
133
|
+
semcor_ic = wnic.ic('ic-semcor.dat')
|
|
134
|
+
self.assertAlmostEqual(S('dog.n.01').lin_similarity(S('cat.n.01'), semcor_ic), 0.8863, places=3)
|