{ "info": { "author": "abusix", "author_email": "fp@abusix.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://img.shields.io/travis/abusix/ahocorapy/master.svg)](https://travis-ci.org/abusix/ahocorapy)\n[![Test Coverage](https://img.shields.io/coveralls/github/abusix/ahocorapy/master.svg)](https://coveralls.io/github/abusix/ahocorapy)\n[![PyPi Version](https://img.shields.io/pypi/v/ahocorapy.svg)](https://pypi.python.org/pypi/ahocorapy)\n[![PyPi License](https://img.shields.io/pypi/l/ahocorapy.svg)](https://pypi.python.org/pypi/ahocorapy)\n[![PyPi Versions](https://img.shields.io/pypi/pyversions/ahocorapy.svg)](https://pypi.python.org/pypi/ahocorapy)\n[![PyPi Wheel](https://img.shields.io/pypi/wheel/ahocorapy.svg)](https://pypi.python.org/pypi/ahocorapy)\n\n# ahocorapy - Fast Many-Keyword Search in Pure Python\n\nahocorapy is a pure python implementation of the Aho-Corasick Algorithm.\nGiven a list of keywords one can check if at least one of the keywords exist in a given text in linear time.\n\n## Comparison:\n\n### Why another Aho-Corasick implementation?\n\nWe started working on this in the beginning of 2016. Our requirements included unicode support combined with python2.7. That\nwas impossible with C-extension based libraries (like [pyahocorasick](https://github.com/WojciechMula/pyahocorasick/)). Pure \npython libraries were very slow or unusable due to memory explosion. Since then another pure python library was released \n[py-aho-corasick](https://github.com/JanFan/py-aho-corasick). The repository also contains some discussion about different\nimplementations. \nThere is also [acora](https://github.com/scoder/acora), but it includes the note ('current construction algorithm is not \nsuitable for really large sets of keywords') which really was the case the last time I tested, because RAM ran out quickly.\n\n### Differences\n\n- Compared to [pyahocorasick](https://github.com/WojciechMula/pyahocorasick/) our library supports unicode in python 2.7 just like [py-aho-corasick](https://github.com/JanFan/py-aho-corasick).\nWe don't use any C-Extension so the library is not platform dependant.\n\n- On top of the standard Aho-Corasick longest suffix search, we also perform a shortcutting routine in the end, so\nthat our lookup is fast while, the setup takes longer. During set up we go through the states and directly add transitions that are\n\"offered\" by the longest suffix or their longest suffixes. This leads to faster lookup times, because in the end we only have to\nfollow simple transitions and don't have to perform any additional suffix lookup. It also leads to a bigger memory footprint,\nbecause the number of transitions is higher, because they are all included explicitely and not implicitely hidden by suffix pointers.\n\n- We added a small tool that helps you visualize the resulting graph. This may help understanding the algorithm, if you'd like. See below.\n\n- Fully pickleable (pythons built-in de-/serialization). ahocorapy uses a non-recursive custom implementation for de-/serialization so that even huge keyword trees can be pickled.\n\n### Performance\n\nI compared the two libraries mentioned above with ahocorapy. We used 50,000 keywords long list and an input text of 34,199 characters.\nIn the text only one keyword of the list is contained.\nThe setup process was run once per library and the search process was run 100 times. The following results are in seconds (not averaged for the lookup).\n\nYou can perform this test yourself using `python tests/ahocorapy_performance_test.py`. (Except for the pyahocorasick_py results. These were taken by importing the\npure python version of the code of [pyahocorasick](https://github.com/WojciechMula/pyahocorasick/). It's not available through pypi\nas stated in the code.)\n\nI also added measurements for the pure python libraries with run with pypy.\n\nThese are the results:\n\n| Library (Variant) | Setup (1x) | Search (100x) |\n|----------------------------------------------------|------------|---------------|\n| ahocorapy | 1.2s | 1.76s |\n| ahocorapy (run with pypy) | 0.9s | 0.09s |\n| pyahocorasick | 0.1s | 0.06s |\n| pyahocorasick (pure python variant in github repo) | 0.5s | 1.68s |\n| py_aho_corasick | 1.9s | 13.2s |\n| py_aho_corasick (run with pypy) | 1.3s | 3.71s |\n\nAs expected the C-Extension shatters the pure python implementations. Even though there is probably still room for optimization in\nahocorapy we are not going to get to the mark that pyahocorasick sets. ahocorapy's lookups are faster than py_aho_corasick. \nWhen run with pypy [PyPy 5.1.2 with GCC 5.3.1 20160413] ahocorapy is almost as fast as pyahocorasick, at least when it comes to\nsearching. The setup overhead is higher due to the suffix shortcutting mechanism used.\n\n\n## Basic Usage:\n\n### Installation\n\n```\npip install ahocorapy\n```\n\n### Creation of the Search Tree\n\n```python\nfrom ahocorapy.keywordtree import KeywordTree\nkwtree = KeywordTree(case_insensitive=True)\nkwtree.add('malaga')\nkwtree.add('lacrosse')\nkwtree.add('mallorca')\nkwtree.add('mallorca bella')\nkwtree.add('orca')\nkwtree.finalize()\n```\n\n### Searching\n\n```python\nresult = kwtree.search('My favorite islands are malaga and sylt.')\nprint(result)\n```\n\nPrints :\n```python\n('malaga', 24)\n```\n\nThe search_all method returns a generator for all keywords found, or None if there is none.\n\n```python\nresults = kwtree.search_all('malheur on mallorca bellacrosse')\nfor result in results:\n print(result)\n```\n\nPrints :\n```python\n('mallorca', 11)\n('orca', 15)\n('mallorca bella', 11)\n('lacrosse', 23)\n```\n\n## Drawing Graph\n\nYou can print the underlying graph with the Visualizer class.\nThis feature requires a working pygraphviz library installed.\n\n```python\nfrom ahocorapy_visualizer.visualizer import Visualizer\nvisualizer = Visualizer()\nvisualizer.draw('readme_example.png', kwtree)\n```\n\nThe resulting .png of the graph looks like this: \n\n![graph for kwtree](https://raw.githubusercontent.com/abusix/ahocorapy/master/img/readme_example.png \"Keyword Tree\")\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/abusix/ahocorapy", "keywords": "keyword,search,purepython,aho-corasick,ahocorasick,abusix", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ahocorapy", "package_url": "https://pypi.org/project/ahocorapy/", "platform": "", "project_url": "https://pypi.org/project/ahocorapy/", "project_urls": { "Company": "https://www.abusix.com/", "Homepage": "https://github.com/abusix/ahocorapy", "Source": "https://github.com/abusix/ahocorapy" }, "release_url": "https://pypi.org/project/ahocorapy/1.5.2/", "requires_dist": [ "future" ], "requires_python": ">=2.7", "summary": "ahocorapy - Pure python ahocorasick implementation", "version": "1.5.2" }, "last_serial": 5148744, "releases": { "1.1.0": [ { "comment_text": "", "digests": { "md5": "c5ed55ba4c8c5c7184d4caca0d8f1def", "sha256": "22a633103843ffabbfed2bd037fad5e4f73175023186a7e5b15ee77c40272b2f" }, "downloads": -1, "filename": "ahocorapy-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c5ed55ba4c8c5c7184d4caca0d8f1def", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6548, "upload_time": "2018-02-28T17:57:07", "url": "https://files.pythonhosted.org/packages/c5/0e/d09fda3508e3294288a3f686f861035382b9bc779a3c8059b6d6d095d217/ahocorapy-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "2fe8a198b116d6161dea44697a71cdc8", "sha256": "d18ed23150cb4d618134f47891f7302ff037500eae976cc3e7e31023e5d69c67" }, "downloads": -1, "filename": "ahocorapy-1.1.1.tar.gz", "has_sig": false, "md5_digest": "2fe8a198b116d6161dea44697a71cdc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6580, "upload_time": "2018-02-28T18:05:31", "url": "https://files.pythonhosted.org/packages/3c/12/41c2d852cf0698e05dcc79c1f9e5557c86886ba89c2be9be8f0a08b8f606/ahocorapy-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "810aadb89e4421a74e3201be782f14aa", "sha256": "951d775b89b39ef7f41101ace7eb88afb5324522abe7af256ff9d3ffe3793fb7" }, "downloads": -1, "filename": "ahocorapy-1.1.2.tar.gz", "has_sig": false, "md5_digest": "810aadb89e4421a74e3201be782f14aa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7212, "upload_time": "2018-03-01T09:33:59", "url": "https://files.pythonhosted.org/packages/f4/ea/8976c4a03ebed03ae9b09d14dfe4f1a381cbfcf8c67252865962fbe204b9/ahocorapy-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "81467b1b3ac0973e7207cd8d0032f7b9", "sha256": "bae7fc7e96015dbd376d87cb7084afcfd8e765c6632468d38b0cdf9607e85ea0" }, "downloads": -1, "filename": "ahocorapy-1.2.0.tar.gz", "has_sig": false, "md5_digest": "81467b1b3ac0973e7207cd8d0032f7b9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7903, "upload_time": "2018-03-01T11:51:03", "url": "https://files.pythonhosted.org/packages/91/85/06554cbe0c6566062218c9be121995b8d0e72de926e48318585227c2d973/ahocorapy-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "226f6f9a3f378c89ad24c49c2ebcd4dc", "sha256": "bb03e07ce5c34d446403196ed2a3c735e740d63bf382dfa4365bb67749207aa5" }, "downloads": -1, "filename": "ahocorapy-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "226f6f9a3f378c89ad24c49c2ebcd4dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 11130, "upload_time": "2018-03-01T12:35:56", "url": "https://files.pythonhosted.org/packages/49/ef/bb000e1b03e49e975d5530f34d865f9fb90cbebe751a837d83b697bbe833/ahocorapy-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dca20866629b4b27348ad97e4d402ce5", "sha256": "b4b7c7cf0d23485120b0453cfb94dbe26b4b2a3e039fc13526a20f7c14b1cdaa" }, "downloads": -1, "filename": "ahocorapy-1.2.1.tar.gz", "has_sig": false, "md5_digest": "dca20866629b4b27348ad97e4d402ce5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7902, "upload_time": "2018-03-01T12:03:14", "url": "https://files.pythonhosted.org/packages/2d/1c/37aa36a089b3477acb45e0baad5591447321da81b42ead0fa7950b990240/ahocorapy-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "9716a380673392697964dcc1cdc8f5df", "sha256": "157e9fb5b67abd7252a187006b9643bc367aa6b0e8c072eda8670bf8a8dd7c7c" }, "downloads": -1, "filename": "ahocorapy-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9716a380673392697964dcc1cdc8f5df", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10601, "upload_time": "2018-03-01T16:32:47", "url": "https://files.pythonhosted.org/packages/47/48/60e590ec1b9c46acb80bf54e74d5422f9af80b30554268d1e8bc072b5455/ahocorapy-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be175fb6abaad4560a4ea1ef314ba40f", "sha256": "4fbca407312463afed0a384485ada9b5f93af55c2b0ba07adcad49e9996bdf4a" }, "downloads": -1, "filename": "ahocorapy-1.3.0.tar.gz", "has_sig": false, "md5_digest": "be175fb6abaad4560a4ea1ef314ba40f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7371, "upload_time": "2018-03-01T16:32:56", "url": "https://files.pythonhosted.org/packages/9a/33/cdfd8899b48ca4773773ba1cb31a34da900a5a30832ee35d34b746f94daa/ahocorapy-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "627235d1cb9b1a2b1cc412edf0a12ff4", "sha256": "02e5f34b4f93b4bd849cc19aea6ce8f74adb35d32f71b93d5a489ef70f6cf6c4" }, "downloads": -1, "filename": "ahocorapy-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "627235d1cb9b1a2b1cc412edf0a12ff4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10663, "upload_time": "2018-03-02T08:34:26", "url": "https://files.pythonhosted.org/packages/cb/fd/e76c10bbe7134683245ed7b652aa52534099fe353b285d379521b12c8897/ahocorapy-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b33885643995606bbcd736b36fdd69d3", "sha256": "a3c080e9b049f5794af9fa19f580fd362f446dda1341b3618fb1b92d97831a59" }, "downloads": -1, "filename": "ahocorapy-1.3.1.tar.gz", "has_sig": false, "md5_digest": "b33885643995606bbcd736b36fdd69d3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7415, "upload_time": "2018-03-02T08:34:28", "url": "https://files.pythonhosted.org/packages/ea/31/fd99983a05f54149be1183c24b6f65d4a8776cf8235dda1ae68e0d65b00e/ahocorapy-1.3.1.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "415d63a94c50af23a7a8e42b7fa96912", "sha256": "1a64fc140faab8dae4b2233c230a8bcc9299285a4ef1cff30aa648911f94e907" }, "downloads": -1, "filename": "ahocorapy-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "415d63a94c50af23a7a8e42b7fa96912", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10779, "upload_time": "2018-03-08T12:49:44", "url": "https://files.pythonhosted.org/packages/72/09/fd78bd61fe0054d99fc8d86b853c22ae244a689c4f612662498e758e9e83/ahocorapy-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a5d85d0f8fa58999cba39452834d7f4", "sha256": "e34d12cce72a8e2b350a8f6941f19850676b61d31af2ff2b37968596d7beedd4" }, "downloads": -1, "filename": "ahocorapy-1.4.0.tar.gz", "has_sig": false, "md5_digest": "4a5d85d0f8fa58999cba39452834d7f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7546, "upload_time": "2018-03-08T12:49:46", "url": "https://files.pythonhosted.org/packages/f5/ba/fcc8432225bb0891b98dba7956c421d716b8a02e78f0d4ec6dcd1971de93/ahocorapy-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "da209b3bd6613d8fdf8f9f2a5e70f995", "sha256": "020df0042229360a2beac69c9f454b050842df2feaed4053202118b09b8720f8" }, "downloads": -1, "filename": "ahocorapy-1.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da209b3bd6613d8fdf8f9f2a5e70f995", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 11038, "upload_time": "2018-03-23T13:32:51", "url": "https://files.pythonhosted.org/packages/dc/07/2842120b199a014ee7dbd98573bd34ef324c9b4632a5d99b4d18b8421f78/ahocorapy-1.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1a001c959871ce93613e5bc17cc99ec", "sha256": "88f7360ebad64e508e1096914b04362ff69877b4fee07dfd9e08449a417c7b64" }, "downloads": -1, "filename": "ahocorapy-1.4.1.tar.gz", "has_sig": false, "md5_digest": "a1a001c959871ce93613e5bc17cc99ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7788, "upload_time": "2018-03-23T13:32:52", "url": "https://files.pythonhosted.org/packages/97/87/0caffb8a0a2cdb9a32d8f0aa5cc1506099546c1d4c3d1abf51c4c1444ef4/ahocorapy-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "6998bbfb1151b28ef4cd9715723a07d7", "sha256": "dd2a839f69fdb395580012fd105e896f2922b737fb5a203388ff71653f577cc8" }, "downloads": -1, "filename": "ahocorapy-1.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6998bbfb1151b28ef4cd9715723a07d7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 10950, "upload_time": "2018-03-26T12:58:07", "url": "https://files.pythonhosted.org/packages/2a/62/e996f4b60df195f9bd3fad2bcb53b0974cf8ce54e5613b9998aff1792d82/ahocorapy-1.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6b9cef6208dbd1d5f2c5328b3d546330", "sha256": "9960cda4353fae9de6a4e5d617b79fc9535358a4cf23c77b7fadbee96cead9a4" }, "downloads": -1, "filename": "ahocorapy-1.4.2.tar.gz", "has_sig": false, "md5_digest": "6b9cef6208dbd1d5f2c5328b3d546330", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7719, "upload_time": "2018-03-26T12:58:08", "url": "https://files.pythonhosted.org/packages/5e/13/9d2ac5904110a2bf736985c4ed37709ca48e99addb5315c8c26ef665bddb/ahocorapy-1.4.2.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "1ad0abcb5a69469c7660ad29d578c92d", "sha256": "5440ce539d5e77bf21ed3ff5f5edafee71a51a61dc1979151f59ec5a06cd85bb" }, "downloads": -1, "filename": "ahocorapy-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1ad0abcb5a69469c7660ad29d578c92d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7912, "upload_time": "2018-08-27T09:48:19", "url": "https://files.pythonhosted.org/packages/3d/25/c132e9b2e3761d593616a305ee14027cd1d8a3696fa9fb28f388b8cd5b96/ahocorapy-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "afc090c7260f33627094898029a91280", "sha256": "254097fc1900898a24d8c1bbd936295b34c749e0f702654ae1eafd0c7b900226" }, "downloads": -1, "filename": "ahocorapy-1.5.0.tar.gz", "has_sig": false, "md5_digest": "afc090c7260f33627094898029a91280", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7644, "upload_time": "2018-08-27T09:48:20", "url": "https://files.pythonhosted.org/packages/d4/72/f221b67596bdbf001bd83dc9c74528c7ed778d19aa0913c482c16db672af/ahocorapy-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "b7331deb733b7e3c19d504a29e5b8188", "sha256": "970be702e49aca7bc73c5741579954a5b5bdf5453f51543eb56404f689e448d0" }, "downloads": -1, "filename": "ahocorapy-1.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b7331deb733b7e3c19d504a29e5b8188", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7887, "upload_time": "2018-08-27T11:35:25", "url": "https://files.pythonhosted.org/packages/b3/ea/304981abf84a6487f52d32211180752d6a6dfbc617d95822a444e9662f42/ahocorapy-1.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7e254f6149d7dfda31c03b9989a2a24", "sha256": "f6bbd2e42f0027e0a499af8f85c3466d2b6802cabf120c44fdd4b783b1d680e5" }, "downloads": -1, "filename": "ahocorapy-1.5.1.tar.gz", "has_sig": false, "md5_digest": "d7e254f6149d7dfda31c03b9989a2a24", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7606, "upload_time": "2018-08-27T11:35:26", "url": "https://files.pythonhosted.org/packages/85/d5/c1a5414f3e266e4b6b159fa22dd1f0a23ff205896d721f53f9a07df0a6ce/ahocorapy-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "39f86d96ab80b17d60f9c97a3f79a1bc", "sha256": "fc2dec2961c001d21cbac04fbc30ba6f3e48d373519d3b033b2f2307700b642d" }, "downloads": -1, "filename": "ahocorapy-1.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39f86d96ab80b17d60f9c97a3f79a1bc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 8000, "upload_time": "2019-04-16T08:17:34", "url": "https://files.pythonhosted.org/packages/d0/83/f99cd02d37b10f744fba5ea99f26ca3a2778d96e3e0ece0ba81166bd233f/ahocorapy-1.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3c0017fc53b204f051bad731088cecc", "sha256": "fe4dec7304238b363008c5f187bb256c323c7088137428c984fee682d5e66374" }, "downloads": -1, "filename": "ahocorapy-1.5.2.tar.gz", "has_sig": false, "md5_digest": "a3c0017fc53b204f051bad731088cecc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7725, "upload_time": "2019-04-16T08:17:35", "url": "https://files.pythonhosted.org/packages/a2/0a/0585dba8dcd1378368f95c0de2399eb9d6bef56c608f0598c4b29caf44c9/ahocorapy-1.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "39f86d96ab80b17d60f9c97a3f79a1bc", "sha256": "fc2dec2961c001d21cbac04fbc30ba6f3e48d373519d3b033b2f2307700b642d" }, "downloads": -1, "filename": "ahocorapy-1.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39f86d96ab80b17d60f9c97a3f79a1bc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 8000, "upload_time": "2019-04-16T08:17:34", "url": "https://files.pythonhosted.org/packages/d0/83/f99cd02d37b10f744fba5ea99f26ca3a2778d96e3e0ece0ba81166bd233f/ahocorapy-1.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3c0017fc53b204f051bad731088cecc", "sha256": "fe4dec7304238b363008c5f187bb256c323c7088137428c984fee682d5e66374" }, "downloads": -1, "filename": "ahocorapy-1.5.2.tar.gz", "has_sig": false, "md5_digest": "a3c0017fc53b204f051bad731088cecc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 7725, "upload_time": "2019-04-16T08:17:35", "url": "https://files.pythonhosted.org/packages/a2/0a/0585dba8dcd1378368f95c0de2399eb9d6bef56c608f0598c4b29caf44c9/ahocorapy-1.5.2.tar.gz" } ] }