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,7 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
# Natural Language Toolkit: Context Free Grammars
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C) 2001-
|
|
4
|
+
# Copyright (C) 2001-2018 NLTK Project
|
|
5
5
|
# Author: Steven Bird <stevenbird1@gmail.com>
|
|
6
6
|
# Edward Loper <edloper@gmail.com>
|
|
7
7
|
# Jason Narad <jason.narad@gmail.com>
|
|
@@ -68,18 +68,21 @@ The operation of replacing the left hand side (*lhs*) of a production
|
|
|
68
68
|
with the right hand side (*rhs*) in a tree (*tree*) is known as
|
|
69
69
|
"expanding" *lhs* to *rhs* in *tree*.
|
|
70
70
|
"""
|
|
71
|
-
from __future__ import print_function, unicode_literals, division
|
|
71
|
+
from __future__ import print_function, unicode_literals, division
|
|
72
72
|
|
|
73
73
|
import re
|
|
74
|
+
from functools import total_ordering
|
|
75
|
+
|
|
76
|
+
from six import string_types
|
|
74
77
|
|
|
75
78
|
from nltk.util import transitive_closure, invert_graph
|
|
76
|
-
from nltk.compat import
|
|
77
|
-
python_2_unicode_compatible, unicode_repr)
|
|
79
|
+
from nltk.compat import python_2_unicode_compatible, unicode_repr
|
|
78
80
|
from nltk.internals import raise_unorderable_types
|
|
79
81
|
|
|
80
82
|
from nltk.probability import ImmutableProbabilisticMixIn
|
|
81
83
|
from nltk.featstruct import FeatStruct, FeatDict, FeatStructReader, SLASH, TYPE
|
|
82
84
|
|
|
85
|
+
|
|
83
86
|
#################################################################
|
|
84
87
|
# Nonterminal
|
|
85
88
|
#################################################################
|
|
@@ -104,6 +107,7 @@ class Nonterminal(object):
|
|
|
104
107
|
:ivar _symbol: The node value corresponding to this
|
|
105
108
|
``Nonterminal``. This value must be immutable and hashable.
|
|
106
109
|
"""
|
|
110
|
+
|
|
107
111
|
def __init__(self, symbol):
|
|
108
112
|
"""
|
|
109
113
|
Construct a new non-terminal from the given symbol.
|
|
@@ -179,6 +183,21 @@ class Nonterminal(object):
|
|
|
179
183
|
"""
|
|
180
184
|
return Nonterminal('%s/%s' % (self._symbol, rhs._symbol))
|
|
181
185
|
|
|
186
|
+
def __truediv__(self, rhs):
|
|
187
|
+
"""
|
|
188
|
+
Return a new nonterminal whose symbol is ``A/B``, where ``A`` is
|
|
189
|
+
the symbol for this nonterminal, and ``B`` is the symbol for rhs.
|
|
190
|
+
This function allows use of the slash ``/`` operator with
|
|
191
|
+
the future import of division.
|
|
192
|
+
|
|
193
|
+
:param rhs: The nonterminal used to form the right hand side
|
|
194
|
+
of the new nonterminal.
|
|
195
|
+
:type rhs: Nonterminal
|
|
196
|
+
:rtype: Nonterminal
|
|
197
|
+
"""
|
|
198
|
+
return self.__div__(rhs)
|
|
199
|
+
|
|
200
|
+
|
|
182
201
|
def nonterminals(symbols):
|
|
183
202
|
"""
|
|
184
203
|
Given a string containing a list of symbol names, return a list of
|
|
@@ -192,19 +211,25 @@ def nonterminals(symbols):
|
|
|
192
211
|
in the same order as the symbols names.
|
|
193
212
|
:rtype: list(Nonterminal)
|
|
194
213
|
"""
|
|
195
|
-
if ',' in symbols:
|
|
196
|
-
|
|
214
|
+
if ',' in symbols:
|
|
215
|
+
symbol_list = symbols.split(',')
|
|
216
|
+
else:
|
|
217
|
+
symbol_list = symbols.split()
|
|
197
218
|
return [Nonterminal(s.strip()) for s in symbol_list]
|
|
198
219
|
|
|
220
|
+
|
|
199
221
|
class FeatStructNonterminal(FeatDict, Nonterminal):
|
|
200
222
|
"""A feature structure that's also a nonterminal. It acts as its
|
|
201
223
|
own symbol, and automatically freezes itself when hashed."""
|
|
224
|
+
|
|
202
225
|
def __hash__(self):
|
|
203
226
|
self.freeze()
|
|
204
227
|
return FeatStruct.__hash__(self)
|
|
228
|
+
|
|
205
229
|
def symbol(self):
|
|
206
230
|
return self
|
|
207
231
|
|
|
232
|
+
|
|
208
233
|
def is_nonterminal(item):
|
|
209
234
|
"""
|
|
210
235
|
:return: True if the item is a ``Nonterminal``.
|
|
@@ -360,6 +385,7 @@ class DependencyProduction(Production):
|
|
|
360
385
|
A dependency grammar production. Each production maps a single
|
|
361
386
|
head word to an unordered list of one or more modifier words.
|
|
362
387
|
"""
|
|
388
|
+
|
|
363
389
|
def __str__(self):
|
|
364
390
|
"""
|
|
365
391
|
Return a verbose string representation of the ``DependencyProduction``.
|
|
@@ -384,6 +410,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
|
|
|
384
410
|
|
|
385
411
|
:see: ``Production``
|
|
386
412
|
"""
|
|
413
|
+
|
|
387
414
|
def __init__(self, lhs, rhs, **prob):
|
|
388
415
|
"""
|
|
389
416
|
Construct a new ``ProbabilisticProduction``.
|
|
@@ -399,7 +426,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
|
|
|
399
426
|
|
|
400
427
|
def __str__(self):
|
|
401
428
|
return Production.__unicode__(self) + \
|
|
402
|
-
|
|
429
|
+
(' [1.0]' if (self.prob() == 1.0) else ' [%g]' % self.prob())
|
|
403
430
|
|
|
404
431
|
def __eq__(self, other):
|
|
405
432
|
return (type(self) == type(other) and
|
|
@@ -413,6 +440,7 @@ class ProbabilisticProduction(Production, ImmutableProbabilisticMixIn):
|
|
|
413
440
|
def __hash__(self):
|
|
414
441
|
return hash((self._lhs, self._rhs, self.prob()))
|
|
415
442
|
|
|
443
|
+
|
|
416
444
|
#################################################################
|
|
417
445
|
# Grammars
|
|
418
446
|
#################################################################
|
|
@@ -427,6 +455,7 @@ class CFG(object):
|
|
|
427
455
|
If you need efficient key-based access to productions, you
|
|
428
456
|
can use a subclass to implement it.
|
|
429
457
|
"""
|
|
458
|
+
|
|
430
459
|
def __init__(self, start, productions, calculate_leftcorners=True):
|
|
431
460
|
"""
|
|
432
461
|
Create a new context-free grammar, from the given start state
|
|
@@ -511,13 +540,13 @@ class CFG(object):
|
|
|
511
540
|
@classmethod
|
|
512
541
|
def fromstring(cls, input, encoding=None):
|
|
513
542
|
"""
|
|
514
|
-
Return the
|
|
543
|
+
Return the grammar instance corresponding to the input string(s).
|
|
515
544
|
|
|
516
545
|
:param input: a grammar, either in the form of a string or as a list of strings.
|
|
517
546
|
"""
|
|
518
547
|
start, productions = read_grammar(input, standard_nonterm_parser,
|
|
519
548
|
encoding=encoding)
|
|
520
|
-
return
|
|
549
|
+
return cls(start, productions)
|
|
521
550
|
|
|
522
551
|
def start(self):
|
|
523
552
|
"""
|
|
@@ -723,6 +752,7 @@ class FeatureGrammar(CFG):
|
|
|
723
752
|
productions. The set of terminals and nonterminals
|
|
724
753
|
is implicitly specified by the productions.
|
|
725
754
|
"""
|
|
755
|
+
|
|
726
756
|
def __init__(self, start, productions):
|
|
727
757
|
"""
|
|
728
758
|
Create a new feature-based grammar, from the given start
|
|
@@ -770,9 +800,9 @@ class FeatureGrammar(CFG):
|
|
|
770
800
|
|
|
771
801
|
@classmethod
|
|
772
802
|
def fromstring(cls, input, features=None, logic_parser=None, fstruct_reader=None,
|
|
773
|
-
|
|
803
|
+
encoding=None):
|
|
774
804
|
"""
|
|
775
|
-
Return a feature structure based
|
|
805
|
+
Return a feature structure based grammar.
|
|
776
806
|
|
|
777
807
|
:param input: a grammar, either in the form of a string or else
|
|
778
808
|
as a list of strings.
|
|
@@ -794,8 +824,7 @@ class FeatureGrammar(CFG):
|
|
|
794
824
|
|
|
795
825
|
start, productions = read_grammar(input, fstruct_reader.read_partial,
|
|
796
826
|
encoding=encoding)
|
|
797
|
-
return
|
|
798
|
-
|
|
827
|
+
return cls(start, productions)
|
|
799
828
|
|
|
800
829
|
def productions(self, lhs=None, rhs=None, empty=False):
|
|
801
830
|
"""
|
|
@@ -859,6 +888,7 @@ class FeatureGrammar(CFG):
|
|
|
859
888
|
else:
|
|
860
889
|
return item
|
|
861
890
|
|
|
891
|
+
|
|
862
892
|
@total_ordering
|
|
863
893
|
@python_2_unicode_compatible
|
|
864
894
|
class FeatureValueType(object):
|
|
@@ -867,6 +897,7 @@ class FeatureValueType(object):
|
|
|
867
897
|
from ordinary strings. This is to stop the ``FeatStruct``
|
|
868
898
|
``FOO[]`` from being compare equal to the terminal "FOO".
|
|
869
899
|
"""
|
|
900
|
+
|
|
870
901
|
def __init__(self, value):
|
|
871
902
|
self._value = value
|
|
872
903
|
self._hash = hash(value)
|
|
@@ -896,6 +927,7 @@ class DependencyGrammar(object):
|
|
|
896
927
|
productions. Each production specifies a head/modifier relationship
|
|
897
928
|
between a pair of words.
|
|
898
929
|
"""
|
|
930
|
+
|
|
899
931
|
def __init__(self, productions):
|
|
900
932
|
"""
|
|
901
933
|
Create a new dependency grammar, from the set of ``Productions``.
|
|
@@ -910,13 +942,14 @@ class DependencyGrammar(object):
|
|
|
910
942
|
productions = []
|
|
911
943
|
for linenum, line in enumerate(input.split('\n')):
|
|
912
944
|
line = line.strip()
|
|
913
|
-
if line.startswith('#') or line=='': continue
|
|
914
|
-
try:
|
|
945
|
+
if line.startswith('#') or line == '': continue
|
|
946
|
+
try:
|
|
947
|
+
productions += _read_dependency_production(line)
|
|
915
948
|
except ValueError:
|
|
916
949
|
raise ValueError('Unable to parse line %s: %s' % (linenum, line))
|
|
917
950
|
if len(productions) == 0:
|
|
918
951
|
raise ValueError('No productions found!')
|
|
919
|
-
return
|
|
952
|
+
return cls(productions)
|
|
920
953
|
|
|
921
954
|
def contains(self, head, mod):
|
|
922
955
|
"""
|
|
@@ -931,7 +964,7 @@ class DependencyGrammar(object):
|
|
|
931
964
|
"""
|
|
932
965
|
for production in self._productions:
|
|
933
966
|
for possibleMod in production._rhs:
|
|
934
|
-
if(production._lhs == head and possibleMod == mod):
|
|
967
|
+
if (production._lhs == head and possibleMod == mod):
|
|
935
968
|
return True
|
|
936
969
|
return False
|
|
937
970
|
|
|
@@ -948,7 +981,7 @@ class DependencyGrammar(object):
|
|
|
948
981
|
"""
|
|
949
982
|
for production in self._productions:
|
|
950
983
|
for possibleMod in production._rhs:
|
|
951
|
-
if(production._lhs == head and possibleMod == mod):
|
|
984
|
+
if (production._lhs == head and possibleMod == mod):
|
|
952
985
|
return True
|
|
953
986
|
return False
|
|
954
987
|
|
|
@@ -963,7 +996,6 @@ class DependencyGrammar(object):
|
|
|
963
996
|
# return True
|
|
964
997
|
# return False
|
|
965
998
|
|
|
966
|
-
|
|
967
999
|
def __str__(self):
|
|
968
1000
|
"""
|
|
969
1001
|
Return a verbose string representation of the ``DependencyGrammar``
|
|
@@ -1006,7 +1038,7 @@ class ProbabilisticDependencyGrammar(object):
|
|
|
1006
1038
|
"""
|
|
1007
1039
|
for production in self._productions:
|
|
1008
1040
|
for possibleMod in production._rhs:
|
|
1009
|
-
if(production._lhs == head and possibleMod == mod):
|
|
1041
|
+
if (production._lhs == head and possibleMod == mod):
|
|
1010
1042
|
return True
|
|
1011
1043
|
return False
|
|
1012
1044
|
|
|
@@ -1079,15 +1111,14 @@ class PCFG(CFG):
|
|
|
1079
1111
|
probs[production.lhs()] = (probs.get(production.lhs(), 0) +
|
|
1080
1112
|
production.prob())
|
|
1081
1113
|
for (lhs, p) in probs.items():
|
|
1082
|
-
if not ((1-PCFG.EPSILON) < p <
|
|
1083
|
-
(1+PCFG.EPSILON)):
|
|
1114
|
+
if not ((1 - PCFG.EPSILON) < p <
|
|
1115
|
+
(1 + PCFG.EPSILON)):
|
|
1084
1116
|
raise ValueError("Productions for %r do not sum to 1" % lhs)
|
|
1085
1117
|
|
|
1086
|
-
|
|
1087
1118
|
@classmethod
|
|
1088
1119
|
def fromstring(cls, input, encoding=None):
|
|
1089
1120
|
"""
|
|
1090
|
-
Return a probabilistic
|
|
1121
|
+
Return a probabilistic context-free grammar corresponding to the
|
|
1091
1122
|
input string(s).
|
|
1092
1123
|
|
|
1093
1124
|
:param input: a grammar, either in the form of a string or else
|
|
@@ -1095,7 +1126,7 @@ class PCFG(CFG):
|
|
|
1095
1126
|
"""
|
|
1096
1127
|
start, productions = read_grammar(input, standard_nonterm_parser,
|
|
1097
1128
|
probabilistic=True, encoding=encoding)
|
|
1098
|
-
return
|
|
1129
|
+
return cls(start, productions)
|
|
1099
1130
|
|
|
1100
1131
|
|
|
1101
1132
|
#################################################################
|
|
@@ -1127,10 +1158,10 @@ def induce_pcfg(start, productions):
|
|
|
1127
1158
|
|
|
1128
1159
|
for prod in productions:
|
|
1129
1160
|
lcount[prod.lhs()] = lcount.get(prod.lhs(), 0) + 1
|
|
1130
|
-
pcount[prod]
|
|
1161
|
+
pcount[prod] = pcount.get(prod, 0) + 1
|
|
1131
1162
|
|
|
1132
1163
|
prods = [ProbabilisticProduction(p.lhs(), p.rhs(),
|
|
1133
|
-
|
|
1164
|
+
prob=pcount[p] / lcount[p.lhs()])
|
|
1134
1165
|
for p in pcount]
|
|
1135
1166
|
return PCFG(start, prods)
|
|
1136
1167
|
|
|
@@ -1145,12 +1176,14 @@ def _read_cfg_production(input):
|
|
|
1145
1176
|
"""
|
|
1146
1177
|
return _read_production(input, standard_nonterm_parser)
|
|
1147
1178
|
|
|
1179
|
+
|
|
1148
1180
|
def _read_pcfg_production(input):
|
|
1149
1181
|
"""
|
|
1150
1182
|
Return a list of PCFG ``ProbabilisticProductions``.
|
|
1151
1183
|
"""
|
|
1152
1184
|
return _read_production(input, standard_nonterm_parser, probabilistic=True)
|
|
1153
1185
|
|
|
1186
|
+
|
|
1154
1187
|
def _read_fcfg_production(input, fstruct_reader):
|
|
1155
1188
|
"""
|
|
1156
1189
|
Return a list of feature-based ``Productions``.
|
|
@@ -1165,6 +1198,7 @@ _PROBABILITY_RE = re.compile(r'( \[ [\d\.]+ \] ) \s*', re.VERBOSE)
|
|
|
1165
1198
|
_TERMINAL_RE = re.compile(r'( "[^"]+" | \'[^\']+\' ) \s*', re.VERBOSE)
|
|
1166
1199
|
_DISJUNCTION_RE = re.compile(r'\| \s*', re.VERBOSE)
|
|
1167
1200
|
|
|
1201
|
+
|
|
1168
1202
|
def _read_production(line, nonterm_parser, probabilistic=False):
|
|
1169
1203
|
"""
|
|
1170
1204
|
Parse a grammar rule, given as a string, and return
|
|
@@ -1251,9 +1285,9 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
|
|
|
1251
1285
|
continue_line = ''
|
|
1252
1286
|
for linenum, line in enumerate(lines):
|
|
1253
1287
|
line = continue_line + line.strip()
|
|
1254
|
-
if line.startswith('#') or line=='': continue
|
|
1288
|
+
if line.startswith('#') or line == '': continue
|
|
1255
1289
|
if line.endswith('\\'):
|
|
1256
|
-
continue_line = line[:-1].rstrip()+' '
|
|
1290
|
+
continue_line = line[:-1].rstrip() + ' '
|
|
1257
1291
|
continue
|
|
1258
1292
|
continue_line = ''
|
|
1259
1293
|
try:
|
|
@@ -1270,7 +1304,7 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
|
|
|
1270
1304
|
productions += _read_production(line, nonterm_parser, probabilistic)
|
|
1271
1305
|
except ValueError as e:
|
|
1272
1306
|
raise ValueError('Unable to parse line %s: %s\n%s' %
|
|
1273
|
-
(linenum+1, line, e))
|
|
1307
|
+
(linenum + 1, line, e))
|
|
1274
1308
|
|
|
1275
1309
|
if not productions:
|
|
1276
1310
|
raise ValueError('No productions found!')
|
|
@@ -1278,8 +1312,10 @@ def read_grammar(input, nonterm_parser, probabilistic=False, encoding=None):
|
|
|
1278
1312
|
start = productions[0].lhs()
|
|
1279
1313
|
return (start, productions)
|
|
1280
1314
|
|
|
1315
|
+
|
|
1281
1316
|
_STANDARD_NONTERM_RE = re.compile('( [\w/][\w/^<>-]* ) \s*', re.VERBOSE)
|
|
1282
1317
|
|
|
1318
|
+
|
|
1283
1319
|
def standard_nonterm_parser(string, pos):
|
|
1284
1320
|
m = _STANDARD_NONTERM_RE.match(string, pos)
|
|
1285
1321
|
if not m: raise ValueError('Expected a nonterminal, found: '
|
|
@@ -1300,15 +1336,16 @@ _READ_DG_RE = re.compile(r'''^\s* # leading whitespace
|
|
|
1300
1336
|
| \| # disjunction
|
|
1301
1337
|
)
|
|
1302
1338
|
\s*) # trailing space
|
|
1303
|
-
*$''',
|
|
1304
|
-
|
|
1339
|
+
*$''', # zero or more copies
|
|
1340
|
+
re.VERBOSE)
|
|
1305
1341
|
_SPLIT_DG_RE = re.compile(r'''('[^']'|[-=]+>|"[^"]+"|'[^']+'|\|)''')
|
|
1306
1342
|
|
|
1343
|
+
|
|
1307
1344
|
def _read_dependency_production(s):
|
|
1308
1345
|
if not _READ_DG_RE.match(s):
|
|
1309
1346
|
raise ValueError('Bad production string')
|
|
1310
1347
|
pieces = _SPLIT_DG_RE.split(s)
|
|
1311
|
-
pieces = [p for i,p in enumerate(pieces) if i%2==1]
|
|
1348
|
+
pieces = [p for i, p in enumerate(pieces) if i % 2 == 1]
|
|
1312
1349
|
lhside = pieces[0].strip('\'\"')
|
|
1313
1350
|
rhsides = [[]]
|
|
1314
1351
|
for piece in pieces[2:]:
|
|
@@ -1333,9 +1370,9 @@ def cfg_demo():
|
|
|
1333
1370
|
# Create some nonterminals
|
|
1334
1371
|
S, NP, VP, PP = nonterminals('S, NP, VP, PP')
|
|
1335
1372
|
N, V, P, Det = nonterminals('N, V, P, Det')
|
|
1336
|
-
VP_slash_NP = VP/NP
|
|
1373
|
+
VP_slash_NP = VP / NP
|
|
1337
1374
|
|
|
1338
|
-
print('Some nonterminals:', [S, NP, VP, PP, N, V, P, Det, VP/NP])
|
|
1375
|
+
print('Some nonterminals:', [S, NP, VP, PP, N, V, P, Det, VP / NP])
|
|
1339
1376
|
print(' S.symbol() =>', repr(S.symbol()))
|
|
1340
1377
|
print()
|
|
1341
1378
|
|
|
@@ -1357,9 +1394,10 @@ def cfg_demo():
|
|
|
1357
1394
|
print(' grammar.start() =>', repr(grammar.start()))
|
|
1358
1395
|
print(' grammar.productions() =>', end=' ')
|
|
1359
1396
|
# Use string.replace(...) is to line-wrap the output.
|
|
1360
|
-
print(repr(grammar.productions()).replace(',', ',\n'+' '*25))
|
|
1397
|
+
print(repr(grammar.productions()).replace(',', ',\n' + ' ' * 25))
|
|
1361
1398
|
print()
|
|
1362
1399
|
|
|
1400
|
+
|
|
1363
1401
|
toy_pcfg1 = PCFG.fromstring("""
|
|
1364
1402
|
S -> NP VP [1.0]
|
|
1365
1403
|
NP -> Det N [0.5] | NP PP [0.25] | 'John' [0.1] | 'I' [0.15]
|
|
@@ -1397,6 +1435,7 @@ toy_pcfg2 = PCFG.fromstring("""
|
|
|
1397
1435
|
Det -> 'my' [.28]
|
|
1398
1436
|
""")
|
|
1399
1437
|
|
|
1438
|
+
|
|
1400
1439
|
def pcfg_demo():
|
|
1401
1440
|
"""
|
|
1402
1441
|
A demonstration showing how a ``PCFG`` can be created and used.
|
|
@@ -1421,7 +1460,7 @@ def pcfg_demo():
|
|
|
1421
1460
|
print(' grammar.start() =>', repr(grammar.start()))
|
|
1422
1461
|
print(' grammar.productions() =>', end=' ')
|
|
1423
1462
|
# Use .replace(...) is to line-wrap the output.
|
|
1424
|
-
print(repr(grammar.productions()).replace(',', ',\n'+' '*26))
|
|
1463
|
+
print(repr(grammar.productions()).replace(',', ',\n' + ' ' * 26))
|
|
1425
1464
|
print()
|
|
1426
1465
|
|
|
1427
1466
|
# extract productions from three trees and induce the PCFG
|
|
@@ -1431,8 +1470,8 @@ def pcfg_demo():
|
|
|
1431
1470
|
item = treebank._fileids[0]
|
|
1432
1471
|
for tree in treebank.parsed_sents(item)[:3]:
|
|
1433
1472
|
# perform optional tree transformations, e.g.:
|
|
1434
|
-
tree.collapse_unary(collapsePOS
|
|
1435
|
-
tree.chomsky_normal_form(horzMarkov
|
|
1473
|
+
tree.collapse_unary(collapsePOS=False)
|
|
1474
|
+
tree.chomsky_normal_form(horzMarkov=2)
|
|
1436
1475
|
|
|
1437
1476
|
productions += tree.productions()
|
|
1438
1477
|
|
|
@@ -1447,19 +1486,21 @@ def pcfg_demo():
|
|
|
1447
1486
|
parser.trace(3)
|
|
1448
1487
|
|
|
1449
1488
|
# doesn't work as tokens are different:
|
|
1450
|
-
#sent = treebank.tokenized('wsj_0001.mrg')[0]
|
|
1489
|
+
# sent = treebank.tokenized('wsj_0001.mrg')[0]
|
|
1451
1490
|
|
|
1452
1491
|
sent = treebank.parsed_sents(item)[0].leaves()
|
|
1453
1492
|
print(sent)
|
|
1454
1493
|
for parse in parser.parse(sent):
|
|
1455
1494
|
print(parse)
|
|
1456
1495
|
|
|
1496
|
+
|
|
1457
1497
|
def fcfg_demo():
|
|
1458
1498
|
import nltk.data
|
|
1459
1499
|
g = nltk.data.load('grammars/book_grammars/feat0.fcfg')
|
|
1460
1500
|
print(g)
|
|
1461
1501
|
print()
|
|
1462
1502
|
|
|
1503
|
+
|
|
1463
1504
|
def dg_demo():
|
|
1464
1505
|
"""
|
|
1465
1506
|
A demonstration showing the creation and inspection of a
|
|
@@ -1472,6 +1513,7 @@ def dg_demo():
|
|
|
1472
1513
|
""")
|
|
1473
1514
|
print(grammar)
|
|
1474
1515
|
|
|
1516
|
+
|
|
1475
1517
|
def sdg_demo():
|
|
1476
1518
|
"""
|
|
1477
1519
|
A demonstration of how to read a string representation of
|
|
@@ -1497,6 +1539,7 @@ def sdg_demo():
|
|
|
1497
1539
|
tree = dg.tree()
|
|
1498
1540
|
print(tree.pprint())
|
|
1499
1541
|
|
|
1542
|
+
|
|
1500
1543
|
def demo():
|
|
1501
1544
|
cfg_demo()
|
|
1502
1545
|
pcfg_demo()
|
|
@@ -1504,13 +1547,13 @@ def demo():
|
|
|
1504
1547
|
dg_demo()
|
|
1505
1548
|
sdg_demo()
|
|
1506
1549
|
|
|
1550
|
+
|
|
1507
1551
|
if __name__ == '__main__':
|
|
1508
1552
|
demo()
|
|
1509
1553
|
|
|
1510
1554
|
__all__ = ['Nonterminal', 'nonterminals',
|
|
1511
1555
|
'CFG', 'Production',
|
|
1512
|
-
|
|
1513
|
-
|
|
1556
|
+
'PCFG', 'ProbabilisticProduction',
|
|
1557
|
+
'DependencyGrammar', 'DependencyProduction',
|
|
1514
1558
|
'ProbabilisticDependencyGrammar',
|
|
1515
|
-
|
|
1516
|
-
|
|
1559
|
+
'induce_pcfg', 'read_grammar']
|
|
@@ -18,10 +18,14 @@ goal *G*, the model builder tries to find a counter-model, in the sense of a mod
|
|
|
18
18
|
the assumptions plus the negation of *G*.
|
|
19
19
|
"""
|
|
20
20
|
from __future__ import print_function
|
|
21
|
+
from abc import ABCMeta, abstractmethod
|
|
22
|
+
from six import add_metaclass
|
|
21
23
|
|
|
22
24
|
import threading
|
|
23
25
|
import time
|
|
24
26
|
|
|
27
|
+
|
|
28
|
+
@add_metaclass(ABCMeta)
|
|
25
29
|
class Prover(object):
|
|
26
30
|
"""
|
|
27
31
|
Interface for trying to prove a goal from assumptions. Both the goal and
|
|
@@ -34,13 +38,15 @@ class Prover(object):
|
|
|
34
38
|
"""
|
|
35
39
|
return self._prove(goal, assumptions, verbose)[0]
|
|
36
40
|
|
|
41
|
+
@abstractmethod
|
|
37
42
|
def _prove(self, goal=None, assumptions=None, verbose=False):
|
|
38
43
|
"""
|
|
39
44
|
:return: Whether the proof was successful or not, along with the proof
|
|
40
45
|
:rtype: tuple: (bool, str)
|
|
41
46
|
"""
|
|
42
|
-
raise NotImplementedError()
|
|
43
47
|
|
|
48
|
+
|
|
49
|
+
@add_metaclass(ABCMeta)
|
|
44
50
|
class ModelBuilder(object):
|
|
45
51
|
"""
|
|
46
52
|
Interface for trying to build a model of set of formulas.
|
|
@@ -56,20 +62,22 @@ class ModelBuilder(object):
|
|
|
56
62
|
"""
|
|
57
63
|
return self._build_model(goal, assumptions, verbose)[0]
|
|
58
64
|
|
|
65
|
+
@abstractmethod
|
|
59
66
|
def _build_model(self, goal=None, assumptions=None, verbose=False):
|
|
60
67
|
"""
|
|
61
68
|
Perform the actual model building.
|
|
62
69
|
:return: Whether a model was generated, and the model itself
|
|
63
70
|
:rtype: tuple(bool, sem.Valuation)
|
|
64
71
|
"""
|
|
65
|
-
raise NotImplementedError()
|
|
66
72
|
|
|
67
73
|
|
|
74
|
+
@add_metaclass(ABCMeta)
|
|
68
75
|
class TheoremToolCommand(object):
|
|
69
76
|
"""
|
|
70
77
|
This class holds a goal and a list of assumptions to be used in proving
|
|
71
78
|
or model building.
|
|
72
79
|
"""
|
|
80
|
+
@abstractmethod
|
|
73
81
|
def add_assumptions(self, new_assumptions):
|
|
74
82
|
"""
|
|
75
83
|
Add new assumptions to the assumption list.
|
|
@@ -77,8 +85,8 @@ class TheoremToolCommand(object):
|
|
|
77
85
|
:param new_assumptions: new assumptions
|
|
78
86
|
:type new_assumptions: list(sem.Expression)
|
|
79
87
|
"""
|
|
80
|
-
raise NotImplementedError()
|
|
81
88
|
|
|
89
|
+
@abstractmethod
|
|
82
90
|
def retract_assumptions(self, retracted, debug=False):
|
|
83
91
|
"""
|
|
84
92
|
Retract assumptions from the assumption list.
|
|
@@ -89,29 +97,28 @@ class TheoremToolCommand(object):
|
|
|
89
97
|
:param retracted: assumptions to be retracted
|
|
90
98
|
:type retracted: list(sem.Expression)
|
|
91
99
|
"""
|
|
92
|
-
raise NotImplementedError()
|
|
93
100
|
|
|
101
|
+
@abstractmethod
|
|
94
102
|
def assumptions(self):
|
|
95
103
|
"""
|
|
96
104
|
List the current assumptions.
|
|
97
105
|
|
|
98
106
|
:return: list of ``Expression``
|
|
99
107
|
"""
|
|
100
|
-
raise NotImplementedError()
|
|
101
108
|
|
|
109
|
+
@abstractmethod
|
|
102
110
|
def goal(self):
|
|
103
111
|
"""
|
|
104
112
|
Return the goal
|
|
105
113
|
|
|
106
114
|
:return: ``Expression``
|
|
107
115
|
"""
|
|
108
|
-
raise NotImplementedError()
|
|
109
116
|
|
|
117
|
+
@abstractmethod
|
|
110
118
|
def print_assumptions(self):
|
|
111
119
|
"""
|
|
112
120
|
Print the list of the current assumptions.
|
|
113
121
|
"""
|
|
114
|
-
raise NotImplementedError()
|
|
115
122
|
|
|
116
123
|
|
|
117
124
|
class ProverCommand(TheoremToolCommand):
|
|
@@ -119,26 +126,26 @@ class ProverCommand(TheoremToolCommand):
|
|
|
119
126
|
This class holds a ``Prover``, a goal, and a list of assumptions. When
|
|
120
127
|
prove() is called, the ``Prover`` is executed with the goal and assumptions.
|
|
121
128
|
"""
|
|
129
|
+
@abstractmethod
|
|
122
130
|
def prove(self, verbose=False):
|
|
123
131
|
"""
|
|
124
132
|
Perform the actual proof.
|
|
125
133
|
"""
|
|
126
|
-
raise NotImplementedError()
|
|
127
134
|
|
|
135
|
+
@abstractmethod
|
|
128
136
|
def proof(self, simplify=True):
|
|
129
137
|
"""
|
|
130
138
|
Return the proof string
|
|
131
139
|
:param simplify: bool simplify the proof?
|
|
132
140
|
:return: str
|
|
133
141
|
"""
|
|
134
|
-
raise NotImplementedError()
|
|
135
142
|
|
|
143
|
+
@abstractmethod
|
|
136
144
|
def get_prover(self):
|
|
137
145
|
"""
|
|
138
146
|
Return the prover object
|
|
139
147
|
:return: ``Prover``
|
|
140
148
|
"""
|
|
141
|
-
raise NotImplementedError()
|
|
142
149
|
|
|
143
150
|
|
|
144
151
|
class ModelBuilderCommand(TheoremToolCommand):
|
|
@@ -147,14 +154,15 @@ class ModelBuilderCommand(TheoremToolCommand):
|
|
|
147
154
|
When build_model() is called, the ``ModelBuilder`` is executed with the goal
|
|
148
155
|
and assumptions.
|
|
149
156
|
"""
|
|
157
|
+
@abstractmethod
|
|
150
158
|
def build_model(self, verbose=False):
|
|
151
159
|
"""
|
|
152
160
|
Perform the actual model building.
|
|
153
161
|
:return: A model if one is generated; None otherwise.
|
|
154
162
|
:rtype: sem.Valuation
|
|
155
163
|
"""
|
|
156
|
-
raise NotImplementedError()
|
|
157
164
|
|
|
165
|
+
@abstractmethod
|
|
158
166
|
def model(self, format=None):
|
|
159
167
|
"""
|
|
160
168
|
Return a string representation of the model
|
|
@@ -162,14 +170,13 @@ class ModelBuilderCommand(TheoremToolCommand):
|
|
|
162
170
|
:param simplify: bool simplify the proof?
|
|
163
171
|
:return: str
|
|
164
172
|
"""
|
|
165
|
-
raise NotImplementedError()
|
|
166
173
|
|
|
174
|
+
@abstractmethod
|
|
167
175
|
def get_model_builder(self):
|
|
168
176
|
"""
|
|
169
177
|
Return the model builder object
|
|
170
178
|
:return: ``ModelBuilder``
|
|
171
179
|
"""
|
|
172
|
-
raise NotImplementedError()
|
|
173
180
|
|
|
174
181
|
|
|
175
182
|
class BaseTheoremToolCommand(TheoremToolCommand):
|
|
@@ -369,8 +376,8 @@ class TheoremToolCommandDecorator(TheoremToolCommand):
|
|
|
369
376
|
"""
|
|
370
377
|
self._command = command
|
|
371
378
|
|
|
372
|
-
#The decorator has its own versions of 'result' different from the
|
|
373
|
-
#underlying command
|
|
379
|
+
# The decorator has its own versions of 'result' different from the
|
|
380
|
+
# underlying command
|
|
374
381
|
self._result = None
|
|
375
382
|
|
|
376
383
|
def assumptions(self):
|
|
@@ -402,8 +409,8 @@ class ProverCommandDecorator(TheoremToolCommandDecorator, ProverCommand):
|
|
|
402
409
|
"""
|
|
403
410
|
TheoremToolCommandDecorator.__init__(self, proverCommand)
|
|
404
411
|
|
|
405
|
-
#The decorator has its own versions of 'result' and 'proof'
|
|
406
|
-
#because they may be different from the underlying command
|
|
412
|
+
# The decorator has its own versions of 'result' and 'proof'
|
|
413
|
+
# because they may be different from the underlying command
|
|
407
414
|
self._proof = None
|
|
408
415
|
|
|
409
416
|
def prove(self, verbose=False):
|
|
@@ -449,8 +456,8 @@ class ModelBuilderCommandDecorator(TheoremToolCommandDecorator, ModelBuilderComm
|
|
|
449
456
|
"""
|
|
450
457
|
TheoremToolCommandDecorator.__init__(self, modelBuilderCommand)
|
|
451
458
|
|
|
452
|
-
#The decorator has its own versions of 'result' and 'valuation'
|
|
453
|
-
#because they may be different from the underlying command
|
|
459
|
+
# The decorator has its own versions of 'result' and 'valuation'
|
|
460
|
+
# because they may be different from the underlying command
|
|
454
461
|
self._model = None
|
|
455
462
|
|
|
456
463
|
def build_model(self, verbose=False):
|
|
@@ -528,6 +535,7 @@ class ParallelProverBuilder(Prover, ModelBuilder):
|
|
|
528
535
|
else:
|
|
529
536
|
return None
|
|
530
537
|
|
|
538
|
+
|
|
531
539
|
class ParallelProverBuilderCommand(BaseProverCommand, BaseModelBuilderCommand):
|
|
532
540
|
"""
|
|
533
541
|
This command stores both a prover and a model builder and when either
|