{ "info": { "author": "David McClosky", "author_email": "notsoweird+pybllipparser@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: POSIX", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": ".. image:: https://travis-ci.org/BLLIP/bllip-parser.png?branch=master\n :target: https://travis-ci.org/BLLIP/bllip-parser\n\nThe BLLIP parser (also known as the Charniak-Johnson parser or\nBrown Reranking Parser) is described in the paper `Charniak\nand Johnson (Association of Computational Linguistics, 2005)\n`_. This package\nprovides the BLLIP parser runtime along with a Python interface. Note\nthat it does not come with any parsing models but includes a model\ndownloader. The primary maintenance for the parser takes place at\n`GitHub `_.\n\nWe request acknowledgement in any publications that make use of this\nsoftware and any code derived from this software. Please report the\nrelease date of the software that you are using, as this will enable\nothers to compare their results to yours.\n\nQuickstart\n----------\n\nInstall ``bllipparser`` with `pip\n`_::\n\n shell% pip install --user bllipparser\n\nor (if you have ``sudo`` access)::\n\n shell% sudo pip install bllipparser\n\nTo fetch a parsing model and start parsing::\n\n >>> from bllipparser import RerankingParser\n >>> rrp = RerankingParser.fetch_and_load('WSJ-PTB3', verbose=True)\n [downloads, installs, and loads the model]\n >>> rrp.simple_parse(\"It's that easy.\")\n \"(S1 (S (NP (PRP It)) (VP (VBZ 's) (ADJP (RB that) (JJ easy))) (. .)))\"\n\nThe first time this is called, this will download and install a parsing\nmodel trained from Wall Street Journal in ``~/.local/share/bllipparser``\n(it will only be loaded on subsequent calls).\n\nFor a list of installable parsing models, run::\n\n shell% python -mbllipparser.ModelFetcher -l\n\nSee `BLLIP Parser models\n`_ for\ninformation about picking the best parsing model for your text.\n\nBasic usage\n-----------\n\nThe main class in ``bllipparser`` is the ``RerankingParser`` parser class\nwhich provides an interface to the first stage parser and the second stage\nreranker. The easiest way to construct a ``RerankingParser`` object is\nwith the ``fetch_and_load`` (see above) or ``from_unified_model_dir``\nclass methods. A unified model is a directory that contains two\nsubdirectories: ``parser/`` and ``reranker/``, each with the respective\nmodel files::\n\n >>> from bllipparser import RerankingParser\n >>> rrp = RerankingParser.from_unified_model_dir('/path/to/model/')\n\nIf you only want the most likely parse of a sentence in Penn Treebank\nformat, use the ``simple_parse()`` method::\n\n >>> rrp.simple_parse('This is simple.')\n '(S1 (S (NP (DT This)) (VP (VBZ is) (ADJP (JJ simple))) (. .)))'\n\nIf you want more information about the parse, you'll want to use the\n``parse()`` method which returns an ``NBestList`` object. The parser\nproduces an *n-best list* of the *n* most likely parses of the sentence\n(default: *n=50*). Typically you only want the top parse, but the others\nare available as well::\n\n >>> nbest_list = rrp.parse('This is a sentence.')\n\nTo get information about the top parse (note that the ``ptb_parse``\nproperty is a ``Tree`` object, described in more detail later)::\n\n >>> print(repr(nbest_list[0]))\n ScoredParse('(S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (NN sentence))) (. .)))', parser_score=-29.620656470412328, reranker_score=-7.13760513405013)\n >>> print(nbest_list[0].ptb_parse)\n (S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (NN sentence))) (. .)))\n >>> print(nbest_list[0].parser_score)\n -29.6206564704\n >>> print(nbest_list[0].reranker_score)\n -7.13760513405\n >>> print(len(nbest_list))\n 50\n\nYou can perform syntactic fusion with the ``fuse()`` method. This\ncombines the parses in the n-best list into a single ``Tree`` (which\nmay be a parse already present in the n-best list or a novel one)::\n\n >>> print(nbest_list.fuse())\n (S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (NN sentence))) (. .)))\n\nIf you have the `PyStanfordDependencies\n`_ package,\nyou can parse straight to `Stanford Dependencies\n`_::\n\n >>> tokens = nbest_list[0].ptb_parse.sd_tokens()\n >>> for token in tokens:\n ... print(token)\n ...\n Token(index=1, form=u'This', cpos=u'DT', pos=u'DT', head=4, deprel=u'nsubj')\n Token(index=2, form=u'is', cpos=u'VBZ', pos=u'VBZ', head=4, deprel=u'cop')\n Token(index=3, form=u'a', cpos=u'DT', pos=u'DT', head=4, deprel=u'det')\n Token(index=4, form=u'sentence', cpos=u'NN', pos=u'NN', head=0, deprel=u'root')\n Token(index=5, form=u'.', cpos=u'.', pos=u'.', head=4, deprel=u'punct')\n\nThis will attempt to use a default converter but see docs for how to\ncustomize dependency conversion (or if you run into Java version issues).\n\nIf you have an existing tokenizer, tokenization can also be specified\nby passing a list of strings::\n\n >>> nbest_list = rrp.parse(['This', 'is', 'a', 'pretokenized', 'sentence', '.'])\n\nIf you'd like to disable the reranker (lowers accuracy, so not normally\ndone), set ``rerank=False``::\n\n >>> nbest_list = rrp.parse('Parser only!', rerank=False)\n\nYou can also parse text with existing POS tags (these act as soft\nconstraints). In this example, token 0 ('Time') should have tag VB and\ntoken 1 ('flies') should have tag NNS::\n\n >>> rrp.parse_tagged(['Time', 'flies'], possible_tags={0 : 'VB', 1 : 'NNS'})[0]\n ScoredParse('(S1 (NP (VB Time) (NNS flies)))', parser_score=-54.05083561918019, reranker_score=-15.079632500107973)\n\nYou don't need to specify a tag for all words: Here, token 0 ('Time') should\nhave tag VB and token 1 ('flies') is unconstrained::\n\n >>> rrp.parse_tagged(['Time', 'flies'], possible_tags={0 : 'VB'})[0]\n ScoredParse('(S1 (S (VP (VB Time) (NP (VBZ flies)))))', parser_score=-54.3497715 5750189, reranker_score=-16.681734375725263)\n\nYou can specify multiple tags for each token. When you do this, the\ntags for a token will be used in decreasing priority. token 0 ('Time')\nshould have tag VB, JJ, or NN and token 1 ('flies') is unconstrained::\n\n >>> rrp.parse_tagged(['Time', 'flies'], possible_tags={0 : ['VB', 'JJ', 'NN']})[0]\n ScoredParse('(S1 (NP (NN Time) (VBZ flies)))', parser_score=-42.9961920777843, reranker_score=-12.57069545767032)\n\nIf you have labeled span constraints, you can require that all parses follow them with ``parse_constrained``. The following requires that the parse contain\na VP covering ``left`` to ``Falklands``::\n\n >>> rrp.parse_constrained('British left waffles on Falklands .'.split(),\n ... constraints={(1, 5) : ['VP']})[0]\n ScoredParse('(S1 (S (NP (NNPS British)) (VP (VBD left) (NP (NNS waffles)) (PP (IN on) (NP (NNP Falklands)))) (. .)))', parser_score=-93.73622897543436, reranker_score=-25.60347808581542)\n\nTo force ``British left`` to be a noun phrase::\n\n >> rrp.parse_constrained('British left waffles on Falklands .'.split(),\n ... constraints={(0, 2): ['NP']})[0]\n ScoredParse('(S1 (S (NP (JJ British) (NN left)) (VP (VBZ waffles) (PP (IN on) (NP (NNP Falklands)))) (. .)))', parser_score=-89.59447837562135, reranker_score=-25.480236524298025)\n\nThere are many parser options which can be adjusted (though the defaults\nshould work well for most cases) with ``set_parser_options``. This\nwill change the size of the n-best list and pick the defaults for all\nother options. It returns a dictionary of the current options::\n\n >>> rrp.set_parser_options(nbest=10)\n {'language': 'En', 'case_insensitive': False, 'debug': 0, 'small_corpus': True, 'overparsing': 21, 'smooth_pos': 0, 'nbest': 10}\n >>> nbest_list = rrp.parse('The list is smaller now.', rerank=False)\n >>> len(nbest_list)\n 10\n\nThe parser can also be used as a tagger::\n\n >>> rrp.tag(\"Time flies while you're having fun.\")\n [('Time', 'NNP'), ('flies', 'VBZ'), ('while', 'IN'), ('you', 'PRP'), (\"'re\", 'VBP'), ('having', 'VBG'), ('fun', 'NN'), ('.', '.')]\n\nUse this if all you want is a Penn Treebank-style tokenizer::\n\n >>> from bllipparser import tokenize\n >>> tokenize(\"Tokenize this sentence, please.\")\n ['Tokenize', 'this', 'sentence', ',', 'please', '.']\n\nParsing shell\n-------------\n\nBLLIP Parser includes an interactive shell for visualizing parses::\n\n shell% python -mbllipparser model\n\n(for Python 2.6, you'll need to run: ``python -mbllipparser.ParsingShell model``)\n\nModel can be a unified parsing model or first-stage parsing model on\ndisk or the name of a model known by ModelFetcher, in which case it will\nbe downloaded and installed if it hasn't been already. If no model is\nspecified, it will list installable parsing models.\n\nOnce in the shell, type a sentence to have the parser parse it::\n\n bllip> I saw the astronomer with the telescope.\n Tokens: I saw the astronomer with the telescope .\n\n Parser's parse:\n (S1 (S (NP (PRP I))\n (VP (VBD saw)\n (NP (NP (DT the) (NN astronomer))\n (PP (IN with) (NP (DT the) (NN telescope)))))\n (. .)))\n\n Reranker's parse: (parser index 2)\n (S1 (S (NP (PRP I))\n (VP (VBD saw)\n (NP (DT the) (NN astronomer))\n (PP (IN with) (NP (DT the) (NN telescope))))\n (. .)))\n\nIf you have ``nltk`` installed, you can use its tree visualization to\nsee the output::\n\n bllip> visual Show me this parse.\n Tokens: Show me this parse .\n\n [graphical display of the parse appears]\n\nIf you have ``PyStanfordDependencies`` installed, you can parse straight\nto Stanford Dependencies::\n\n bllip> sdparse Now with Stanford Dependencies integration!\n Tokens: Now with Stanford Dependencies integration !\n\n Parser and reranker:\n Now [root]\n +-- with [prep]\n | +-- integration [pobj]\n | +-- Stanford [nn]\n | +-- Dependencies [nn]\n +-- ! [punct]\n\nThe ``asciitree`` package is required to visualize Stanford Dependencies\nas a tree. If it is not available, the dependencies will be shown in\nCoNLL-X format.\n\nThere is more detailed help inside the shell under the ``help`` command.\n\nThe Tree class\n--------------\n\nThe parser provides a simple Tree class which provides information about\nPenn Treebank-style trees::\n\n >>> tree = bllipparser.Tree('(S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .)))')\n >>> print(tree)\n (S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .)))\n\n``pretty_string()`` provides a line-wrapped stringification::\n\n >>> print(tree.pretty_string())\n (S1 (S (NP (DT This))\n (VP (VBZ is)\n (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree)))\n (. .)))\n\nYou can obtain the tokens and tags of the tree::\n\n >>> print(tree.tokens())\n ('This', 'is', 'a', 'fairly', 'simple', 'parse', 'tree', '.')\n >>> print(tree.tags())\n ('DT', 'VBZ', 'DT', 'RB', 'JJ', 'NN', 'NN', '.')\n >>> print(tree.tokens_and_tags())\n [('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('fairly', 'RB'), ('simple', 'JJ'), ('parse', 'NN'), ('tree', 'NN'), ('.', '.')]\n\nOr get information about the labeled spans in the tree::\n\n >>> print(tree.span())\n (0, 8)\n >>> print(tree.label)\n S1\n\nYou can navigate within the trees and more::\n\n >>> tree.subtrees()\n [Tree('(S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .))')]\n >>> tree[0] # first subtree\n Tree('(S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .))')\n >>> tree[0].label\n 'S'\n >>> tree[0][0] # first subtree of first subtree\n Tree('(NP (DT This))')\n >>> tree[0][0].label\n 'NP'\n >>> tree[0][0].span() # [start, end) indices for the span\n (0, 1)\n >>> tree[0][0].tags() # tags within this span\n ('DT',)\n >>> tree[0][0].tokens() # tuple of all tokens in this span\n ('This',)\n >>> tree[0][0][0]\n Tree('(DT This)')\n >>> tree[0][0][0].token\n 'This'\n >>> tree[0][0][0].label\n 'DT'\n >>> tree[0][0][0].is_preterminal()\n True\n >>> len(tree[0]) # number of subtrees\n 3\n >>> for subtree in tree[0]: # iteration works\n ... print(subtree)\n ... \n (NP (DT This))\n (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree)))\n (. .)\n >>> for subtree in tree.all_subtrees(): # all subtrees (recursive)\n ... print('%s %s' % (subtree.is_preterminal(), subtree))\n ...\n False (S1 (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .)))\n False (S (NP (DT This)) (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))) (. .))\n False (NP (DT This))\n True (DT This)\n False (VP (VBZ is) (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree)))\n True (VBZ is)\n False (NP (DT a) (ADJP (RB fairly) (JJ simple)) (NN parse) (NN tree))\n True (DT a)\n False (ADJP (RB fairly) (JJ simple))\n True (RB fairly)\n True (JJ simple)\n True (NN parse)\n True (NN tree)\n True (. .)\n\nMore examples and advanced features\n-----------------------------------\n\nSee the documentation and the `examples\n`_\ndirectory in the repository.\n\nReferences\n----------\n\nParser and reranker:\n\n* Eugene Charniak and Mark Johnson. \"`Coarse-to-fine n-best parsing and\n MaxEnt discriminative reranking\n `_.\" Proceedings of\n the 43rd Annual Meeting on Association for Computational Linguistics.\n `Association for Computational Linguistics, 2005\n `_.\n\n* Eugene Charniak. \"`A maximum-entropy-inspired parser\n `_.\" Proceedings of\n the 1st North American chapter of the Association for Computational\n Linguistics conference. `Association for Computational Linguistics, 2000\n `_.\n\nSelf-trained parsing models:\n\n* David McClosky, Eugene Charniak, and Mark Johnson.\n \"`Effective Self-Training for Parsing\n `_.\"\n Proceedings of the Conference on Human Language Technology\n and North American chapter of the `Association for\n Computational Linguistics (HLT-NAACL 2006), 2006\n `_.\n\nSyntactic fusion:\n\n* Do Kook Choe, David McClosky, and Eugene Charniak.\n \"`Syntactic Parse Fusion\n `_.\"\n Proceedings of the Conference on `Empirical Methods in Natural Language\n Processing (EMNLP 2015), 2015\n `_.\n\nRelease highlights\n------------------\n- 2016.9.11: Python 3.5 support\n- 2015.12.3: Python 3 support, ``Tree`` visualization methods, better test coverage, bugfixes\n- 2015.08.18: New APIs for easier use, integrated ``ModelFetcher`` with ``ParsingShell``, automatically organize models\n- 2015.08.15: Add syntactic fusion, ``sigeval``, and new self-trained model\n- 2015.07.23: Fix build error, other build system improvements\n- 2015.07.08: Constrained parsing, reranker can now be built with optimization (30% faster), other API additions\n- 2015.01.11: Improved ``PyStanfordDependencies`` support, memory leak fixed, API additions, bugfixes\n- 2014.08.29: Add ``Tree`` class, ``RerankerFeatureCorpus`` module, other API updates\n- 2014.02.09: Add ``ModelFetcher``, ``RerankingParser`` improvements\n- 2013.10.16: ``distutils`` support, initial PyPI release\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/BLLIP/bllip-parser", "keywords": "parsing", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "bllipparser", "package_url": "https://pypi.org/project/bllipparser/", "platform": "POSIX", "project_url": "https://pypi.org/project/bllipparser/", "project_urls": { "Homepage": "http://github.com/BLLIP/bllip-parser" }, "release_url": "https://pypi.org/project/bllipparser/2016.9.11/", "requires_dist": null, "requires_python": "", "summary": "Python bindings for the BLLIP natural language parser", "version": "2016.9.11" }, "last_serial": 2336917, "releases": { "2013.10.16": [ { "comment_text": "", "digests": { "md5": "84b8ffcad5955d21c648ff2b6b2f4c20", "sha256": "9a24c590345452b7a1659b55bb996df4f8c55bcebd7545bcdfa191a188bcd55e" }, "downloads": -1, "filename": "bllipparser-2013.10.16.tar.gz", "has_sig": false, "md5_digest": "84b8ffcad5955d21c648ff2b6b2f4c20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 461277, "upload_time": "2013-10-16T20:46:11", "url": "https://files.pythonhosted.org/packages/67/46/dafb61ec1e38fca4df7b205d17df0171ae54b865d07c8e07d020e069784e/bllipparser-2013.10.16.tar.gz" } ], "2013.10.16-1": [ { "comment_text": "", "digests": { "md5": "3b9c8eb5197e8cb51e768a0e0555face", "sha256": "9ca12eb677ed18db293d08f1c895406eeb405ff4bdfc864a6e04ea7efe06833d" }, "downloads": -1, "filename": "bllipparser-2013.10.16-1.tar.gz", "has_sig": false, "md5_digest": "3b9c8eb5197e8cb51e768a0e0555face", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 475624, "upload_time": "2013-10-17T02:16:40", "url": "https://files.pythonhosted.org/packages/71/1e/4fd93b81bc3dddc5b35fa33888b4ab33145ebce7d5ce78f7baec794f2465/bllipparser-2013.10.16-1.tar.gz" } ], "2014.02.09": [ { "comment_text": "", "digests": { "md5": "65273a35ac7bfe99611838bbc3a10a81", "sha256": "7921d4a48d336d2b2e7968339d51e4423734a513f31d9bac509a9fbf8d74fe4c" }, "downloads": -1, "filename": "bllipparser-2014.02.09.tar.gz", "has_sig": false, "md5_digest": "65273a35ac7bfe99611838bbc3a10a81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 479790, "upload_time": "2014-02-09T23:09:08", "url": "https://files.pythonhosted.org/packages/2c/dd/58b5a86a36b723bbe9560539d9fe5feea5ba6f67cfa7083fd2ea3f3db36d/bllipparser-2014.02.09.tar.gz" } ], "2014.08.29b": [ { "comment_text": "", "digests": { "md5": "bec426c4568251cc65196f9ef1e3ba57", "sha256": "3b01e23e957e65110b2d80a2d0cf154c49fc4a2221ae89071a46fe7b0a67674e" }, "downloads": -1, "filename": "bllipparser-2014.08.29b.tar.gz", "has_sig": false, "md5_digest": "bec426c4568251cc65196f9ef1e3ba57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 492808, "upload_time": "2014-08-29T19:21:43", "url": "https://files.pythonhosted.org/packages/47/39/5d15b2cbd6f83f86e34dd2a755b451b599f5073188e223413ba1cb47d589/bllipparser-2014.08.29b.tar.gz" } ], "2015.01.11": [ { "comment_text": "", "digests": { "md5": "3dfadefd329fa58d504c004949123c0b", "sha256": "ceaf86dc91918c12c6310a3e2640696aaa70f4da6b75e98eb83b466e2b2e76d3" }, "downloads": -1, "filename": "bllipparser-2015.01.11.tar.gz", "has_sig": false, "md5_digest": "3dfadefd329fa58d504c004949123c0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 501458, "upload_time": "2015-01-12T04:04:20", "url": "https://files.pythonhosted.org/packages/04/db/8f641b0850a348e3b93289148e5646534e7c5ff5630825af45cf4c5e3d2c/bllipparser-2015.01.11.tar.gz" } ], "2015.07.08": [ { "comment_text": "", "digests": { "md5": "3e0c2fda718b6e666162f732a5800b10", "sha256": "47a19c3df721a8cbf2d14d064def2a261be7f2c6b4df6eb044983322f6bbb14c" }, "downloads": -1, "filename": "bllipparser-2015.07.08.tar.gz", "has_sig": false, "md5_digest": "3e0c2fda718b6e666162f732a5800b10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 504207, "upload_time": "2015-07-08T18:42:39", "url": "https://files.pythonhosted.org/packages/c8/cc/ecd19730efaf54e8d88bcb1e881c14c29ed2a3ef04ed085d0149303a253a/bllipparser-2015.07.08.tar.gz" } ], "2015.07.23": [ { "comment_text": "", "digests": { "md5": "56b36afec1bd13c7e6e33383f8256618", "sha256": "c2bd9033d97edd86bbfb7879a74ac72114ae6d6677b1b2f6fa93486b88b594d0" }, "downloads": -1, "filename": "bllipparser-2015.07.23.tar.gz", "has_sig": false, "md5_digest": "56b36afec1bd13c7e6e33383f8256618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 514480, "upload_time": "2015-07-23T17:22:51", "url": "https://files.pythonhosted.org/packages/7c/e2/aa1f21ae7d21d2e50529590428260babd32c4d5545c7006eaa2051e683d8/bllipparser-2015.07.23.tar.gz" } ], "2015.08.15": [ { "comment_text": "", "digests": { "md5": "26152bbfc837afe66da5378f89e41b18", "sha256": "5231f6041cc114415a9c3fe4ea543afd594f47a32d0137cd9cf89f3bfb2bfb35" }, "downloads": -1, "filename": "bllipparser-2015.08.15.tar.gz", "has_sig": false, "md5_digest": "26152bbfc837afe66da5378f89e41b18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 531982, "upload_time": "2015-08-16T00:20:49", "url": "https://files.pythonhosted.org/packages/95/41/b3be19ce1268295db402e3d255f18b033ab266e2993e1f498f0af1485de3/bllipparser-2015.08.15.tar.gz" } ], "2015.08.18": [ { "comment_text": "", "digests": { "md5": "9a24ccc0af57135d0a6e2d47310b7c9b", "sha256": "f4a039e284b57d5e79dc3ebd9baa05cf8e5aaf8ee7d851a1b7dde94febfd9c72" }, "downloads": -1, "filename": "bllipparser-2015.08.18.tar.gz", "has_sig": false, "md5_digest": "9a24ccc0af57135d0a6e2d47310b7c9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 529102, "upload_time": "2015-08-18T14:50:46", "url": "https://files.pythonhosted.org/packages/5d/a3/80c463a305265b7badcdbee11323afe73b25827c44f015ccb0e7980f8623/bllipparser-2015.08.18.tar.gz" } ], "2015.12.3": [ { "comment_text": "", "digests": { "md5": "5ec1e27e5d36b26709b0e67052273174", "sha256": "f9de20bd78b0cab18818a0ba6a13093d6b092c525277148d9e81753f19f8ad01" }, "downloads": -1, "filename": "bllipparser-2015.12.3.tar.gz", "has_sig": false, "md5_digest": "5ec1e27e5d36b26709b0e67052273174", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 548174, "upload_time": "2015-12-04T01:05:34", "url": "https://files.pythonhosted.org/packages/50/e1/39852026449d1ae146d3e7a26a531b5b4fc6c3bcdc0b3951d9ee41ed44fd/bllipparser-2015.12.3.tar.gz" } ], "2016.9.11": [ { "comment_text": "", "digests": { "md5": "d691bb1b50e99339c9231e46d244efd1", "sha256": "f6881eedbfbedfaba665c8e93ec2582522c524f951e4cbf0892e64b28d5dd8b9" }, "downloads": -1, "filename": "bllipparser-2016.9.11.tar.gz", "has_sig": false, "md5_digest": "d691bb1b50e99339c9231e46d244efd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 555027, "upload_time": "2016-09-12T01:11:57", "url": "https://files.pythonhosted.org/packages/50/59/b6891ea1408f2992adef5becb713f19630d99fdd86c90b1b8ae493199183/bllipparser-2016.9.11.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d691bb1b50e99339c9231e46d244efd1", "sha256": "f6881eedbfbedfaba665c8e93ec2582522c524f951e4cbf0892e64b28d5dd8b9" }, "downloads": -1, "filename": "bllipparser-2016.9.11.tar.gz", "has_sig": false, "md5_digest": "d691bb1b50e99339c9231e46d244efd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 555027, "upload_time": "2016-09-12T01:11:57", "url": "https://files.pythonhosted.org/packages/50/59/b6891ea1408f2992adef5becb713f19630d99fdd86c90b1b8ae493199183/bllipparser-2016.9.11.tar.gz" } ] }