{ "info": { "author": "Vikash Singh", "author_email": "vikash.duliajan@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "=========\nFlashText\n=========\n\n.. image:: https://api.travis-ci.org/vi3k6i5/flashtext.svg?branch=master\n :target: https://travis-ci.org/vi3k6i5/flashtext\n :alt: Build Status\n\n.. image:: https://readthedocs.org/projects/flashtext/badge/?version=latest\n :target: http://flashtext.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://badge.fury.io/py/flashtext.svg\n :target: https://badge.fury.io/py/flashtext\n :alt: Version\n\n.. image:: https://coveralls.io/repos/github/vi3k6i5/flashtext/badge.svg?branch=master\n :target: https://coveralls.io/github/vi3k6i5/flashtext?branch=master\n :alt: Test coverage\n\n.. image:: https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000\n :target: https://github.com/vi3k6i5/flashtext/blob/master/LICENSE\n :alt: license\n\n\nThis module can be used to replace keywords in sentences or extract keywords from sentences. It is based on the `FlashText algorithm `_.\n\n\nInstallation\n------------\n::\n\n $ pip install flashtext\n\n\nAPI doc\n-------\n\nDocumentation can be found at `FlashText Read the Docs\n`_.\n\n\nUsage\n-----\nExtract keywords\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> # keyword_processor.add_keyword(, )\n >>> keyword_processor.add_keyword('Big Apple', 'New York')\n >>> keyword_processor.add_keyword('Bay Area')\n >>> keywords_found = keyword_processor.extract_keywords('I love Big Apple and Bay Area.')\n >>> keywords_found\n >>> # ['New York', 'Bay Area']\n\nReplace keywords\n >>> keyword_processor.add_keyword('New Delhi', 'NCR region')\n >>> new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')\n >>> new_sentence\n >>> # 'I love New York and NCR region.'\n\nCase Sensitive example\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor(case_sensitive=True)\n >>> keyword_processor.add_keyword('Big Apple', 'New York')\n >>> keyword_processor.add_keyword('Bay Area')\n >>> keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')\n >>> keywords_found\n >>> # ['Bay Area']\n\nSpan of keywords extracted\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_processor.add_keyword('Big Apple', 'New York')\n >>> keyword_processor.add_keyword('Bay Area')\n >>> keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info=True)\n >>> keywords_found\n >>> # [('New York', 7, 16), ('Bay Area', 21, 29)]\n\nGet Extra information with keywords extracted\n >>> from flashtext import KeywordProcessor\n >>> kp = KeywordProcessor()\n >>> kp.add_keyword('Taj Mahal', ('Monument', 'Taj Mahal'))\n >>> kp.add_keyword('Delhi', ('Location', 'Delhi'))\n >>> kp.extract_keywords('Taj Mahal is in Delhi.')\n >>> # [('Monument', 'Taj Mahal'), ('Location', 'Delhi')]\n >>> # NOTE: replace_keywords feature won't work with this.\n\nNo clean name for Keywords\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_processor.add_keyword('Big Apple')\n >>> keyword_processor.add_keyword('Bay Area')\n >>> keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')\n >>> keywords_found\n >>> # ['Big Apple', 'Bay Area']\n\nAdd Multiple Keywords simultaneously\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_dict = {\n >>> \"java\": [\"java_2e\", \"java programing\"],\n >>> \"product management\": [\"PM\", \"product manager\"]\n >>> }\n >>> # {'clean_name': ['list of unclean names']}\n >>> keyword_processor.add_keywords_from_dict(keyword_dict)\n >>> # Or add keywords from a list:\n >>> keyword_processor.add_keywords_from_list([\"java\", \"python\"])\n >>> keyword_processor.extract_keywords('I am a product manager for a java_2e platform')\n >>> # output ['product management', 'java']\n\nTo Remove keywords\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_dict = {\n >>> \"java\": [\"java_2e\", \"java programing\"],\n >>> \"product management\": [\"PM\", \"product manager\"]\n >>> }\n >>> keyword_processor.add_keywords_from_dict(keyword_dict)\n >>> print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))\n >>> # output ['product management', 'java']\n >>> keyword_processor.remove_keyword('java_2e')\n >>> # you can also remove keywords from a list/ dictionary\n >>> keyword_processor.remove_keywords_from_dict({\"product management\": [\"PM\"]})\n >>> keyword_processor.remove_keywords_from_list([\"java programing\"])\n >>> keyword_processor.extract_keywords('I am a product manager for a java_2e platform')\n >>> # output ['product management']\n\nTo check Number of terms in KeywordProcessor\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_dict = {\n >>> \"java\": [\"java_2e\", \"java programing\"],\n >>> \"product management\": [\"PM\", \"product manager\"]\n >>> }\n >>> keyword_processor.add_keywords_from_dict(keyword_dict)\n >>> print(len(keyword_processor))\n >>> # output 4\n\nTo check if term is present in KeywordProcessor\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_processor.add_keyword('j2ee', 'Java')\n >>> 'j2ee' in keyword_processor\n >>> # output: True\n >>> keyword_processor.get_keyword('j2ee')\n >>> # output: Java\n >>> keyword_processor['colour'] = 'color'\n >>> keyword_processor['colour']\n >>> # output: color\n\nGet all keywords in dictionary\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_processor.add_keyword('j2ee', 'Java')\n >>> keyword_processor.add_keyword('colour', 'color')\n >>> keyword_processor.get_all_keywords()\n >>> # output: {'colour': 'color', 'j2ee': 'Java'}\n\nFor detecting Word Boundary currently any character other than this `\\\\w` `[A-Za-z0-9_]` is considered a word boundary.\n\nTo set or add characters as part of word characters\n >>> from flashtext import KeywordProcessor\n >>> keyword_processor = KeywordProcessor()\n >>> keyword_processor.add_keyword('Big Apple')\n >>> print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))\n >>> # ['Big Apple']\n >>> keyword_processor.add_non_word_boundary('/')\n >>> print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))\n >>> # []\n\n\nTest\n----\n::\n\n $ git clone https://github.com/vi3k6i5/flashtext\n $ cd flashtext\n $ pip install pytest\n $ python setup.py test\n\n\nBuild Docs\n----------\n::\n\n $ git clone https://github.com/vi3k6i5/flashtext\n $ cd flashtext/docs\n $ pip install sphinx\n $ make html\n $ # open _build/html/index.html in browser to view it locally\n\n\nWhy not Regex?\n--------------\n\nIt's a custom algorithm based on `Aho-Corasick algorithm\n`_ and `Trie Dictionary\n`_.\n\n.. image:: https://github.com/vi3k6i5/flashtext/raw/master/benchmark.png\n :target: https://twitter.com/RadimRehurek/status/904989624589803520\n :alt: Benchmark\n\n\nTime taken by FlashText to find terms in comparison to Regex.\n\n.. image:: https://thepracticaldev.s3.amazonaws.com/i/xruf50n6z1r37ti8rd89.png\n\n\nTime taken by FlashText to replace terms in comparison to Regex.\n\n.. image:: https://thepracticaldev.s3.amazonaws.com/i/k44ghwp8o712dm58debj.png\n\nLink to code for benchmarking the `Find Feature `_ and `Replace Feature `_.\n\nThe idea for this library came from the following `StackOverflow question\n`_.\n\n\nCitation\n----------\n\nThe original paper published on `FlashText algorithm `_.\n\n::\n\n @ARTICLE{2017arXiv171100046S,\n author = {{Singh}, V.},\n title = \"{Replace or Retrieve Keywords In Documents at Scale}\",\n journal = {ArXiv e-prints},\n archivePrefix = \"arXiv\",\n eprint = {1711.00046},\n primaryClass = \"cs.DS\",\n keywords = {Computer Science - Data Structures and Algorithms},\n year = 2017,\n month = oct,\n adsurl = {http://adsabs.harvard.edu/abs/2017arXiv171100046S},\n adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n }\n\nThe article published on `Medium freeCodeCamp `_.\n\n\nContribute\n----------\n\n- Issue Tracker: https://github.com/vi3k6i5/flashtext/issues\n- Source Code: https://github.com/vi3k6i5/flashtext/\n\n\nLicense\n-------\n\nThe project is licensed under the MIT license.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/vi3k6i5/flashtext", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "flashtext", "package_url": "https://pypi.org/project/flashtext/", "platform": "any", "project_url": "https://pypi.org/project/flashtext/", "project_urls": { "Homepage": "http://github.com/vi3k6i5/flashtext" }, "release_url": "https://pypi.org/project/flashtext/2.7/", "requires_dist": null, "requires_python": "", "summary": "Extract/Replaces keywords in sentences.", "version": "2.7" }, "last_serial": 3586338, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "4d2242178df41241534ad49c69ddd7a3", "sha256": "6d8560df1634cc4cd3d5263e0892197775343991f9f8ed85a604dc456e7dddeb" }, "downloads": -1, "filename": "flashtext-1.0.tar.gz", "has_sig": false, "md5_digest": "4d2242178df41241534ad49c69ddd7a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5881, "upload_time": "2017-08-16T18:55:33", "url": "https://files.pythonhosted.org/packages/39/b6/bfaca1baff932792cb402b6c63cb85d778ed385c47ca2490c4239e4a737e/flashtext-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "f5b4778102754724a3e34f1fe6f57f27", "sha256": "204428451425c9253b228f3830b96678c110a78fbd73199a91674160441c1d70" }, "downloads": -1, "filename": "flashtext-1.1.tar.gz", "has_sig": false, "md5_digest": "f5b4778102754724a3e34f1fe6f57f27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5361, "upload_time": "2017-08-16T19:16:34", "url": "https://files.pythonhosted.org/packages/94/62/3598169f11d15e39a3e40d4213913f88e3ac598dc7c938b9ad29efc22f6c/flashtext-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "a0d7718b3aa64385694cf0c9c663ef0f", "sha256": "7594808c5a1b8f12bbe71788c1dfa39483d0fdd69b707eca94c13f9ae727dce6" }, "downloads": -1, "filename": "flashtext-1.2.tar.gz", "has_sig": false, "md5_digest": "a0d7718b3aa64385694cf0c9c663ef0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5457, "upload_time": "2017-08-20T08:06:00", "url": "https://files.pythonhosted.org/packages/b3/db/67d04dd3a096f9eec13812cf71f4bbf3edc2f30e5558cd92f90303202b18/flashtext-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "467f5fb4fba36e0b18ba4241f25a7883", "sha256": "a2e6285eb9fb51dcf710e9ff9c3bc2ca74eb9ec096d744ba1ae8b76debe3e591" }, "downloads": -1, "filename": "flashtext-1.3.tar.gz", "has_sig": false, "md5_digest": "467f5fb4fba36e0b18ba4241f25a7883", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5516, "upload_time": "2017-08-20T11:45:15", "url": "https://files.pythonhosted.org/packages/46/cd/7c9f12947d59cfe57d0038d6a74fe752287f5edd4b99ce763c4dc3b2bc57/flashtext-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "b70d40668f59ca7a4ce5c71dc2260893", "sha256": "261ffc5b9181e714061a06cda8d70029b835b3993fe3436d537468b0b0f247df" }, "downloads": -1, "filename": "flashtext-1.4.tar.gz", "has_sig": false, "md5_digest": "b70d40668f59ca7a4ce5c71dc2260893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6298, "upload_time": "2017-08-20T18:00:37", "url": "https://files.pythonhosted.org/packages/57/d3/1d6cebf7a237870166e1cd91af53acfb26f7c4dc45e9c7a9386cca1b51e4/flashtext-1.4.tar.gz" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "2b8054a1e6f61aecaf5a3e4484bba2a1", "sha256": "c119d312651e2fe5732c1ded25bf23e4e875519ac9b9445b3620fa0c958117f3" }, "downloads": -1, "filename": "flashtext-1.5.tar.gz", "has_sig": false, "md5_digest": "2b8054a1e6f61aecaf5a3e4484bba2a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6693, "upload_time": "2017-08-20T18:49:11", "url": "https://files.pythonhosted.org/packages/a8/ee/86064e71b3996bbdd443729fdf519da9ed7853166ea54ce6e1bd4fd0b0d5/flashtext-1.5.tar.gz" } ], "1.6": [ { "comment_text": "", "digests": { "md5": "54da71e7881dfbf3f859bf4496236d50", "sha256": "2e06ef481dc6280352ff9a8f2149883e70a5dad10e75758335fe1fa998d706d6" }, "downloads": -1, "filename": "flashtext-1.6.tar.gz", "has_sig": false, "md5_digest": "54da71e7881dfbf3f859bf4496236d50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6877, "upload_time": "2017-08-22T09:28:26", "url": "https://files.pythonhosted.org/packages/a3/a9/b41f6a2b9dbfb666d039c87e3177a0d353de2ee6da7e89abed3c5ba06d9b/flashtext-1.6.tar.gz" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "5f5cda71b512cb9eb3f2e9d17abd298d", "sha256": "422921a56bd021689c752ee56b6854f2dbf31c0155f35a7fc8f5433622eba2bb" }, "downloads": -1, "filename": "flashtext-1.7.tar.gz", "has_sig": false, "md5_digest": "5f5cda71b512cb9eb3f2e9d17abd298d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6913, "upload_time": "2017-08-22T11:17:03", "url": "https://files.pythonhosted.org/packages/3a/45/5b2a20265c2d2c05742e0ca45f4b16f56f84171e43ec4aae19b8103cce51/flashtext-1.7.tar.gz" } ], "1.8": [ { "comment_text": "", "digests": { "md5": "c8c484038c379786fc5e7b5d52aa43e6", "sha256": "71f5e95160e14abe86ff7498701b56172f713215a4dc294f407c57d1bef28e6c" }, "downloads": -1, "filename": "flashtext-1.8.tar.gz", "has_sig": false, "md5_digest": "c8c484038c379786fc5e7b5d52aa43e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6989, "upload_time": "2017-09-08T10:24:57", "url": "https://files.pythonhosted.org/packages/34/8d/0e75916c674181bd1b6474d30866de74ced9bcb1736a62b0306cc30cf8f0/flashtext-1.8.tar.gz" } ], "1.9": [ { "comment_text": "", "digests": { "md5": "733194dff238630dfa68841235bcd1c6", "sha256": "d0ae246d2d4d4fa9ad429dafad6c45408ae97dafe900130a232f384c2f2144a1" }, "downloads": -1, "filename": "flashtext-1.9.tar.gz", "has_sig": false, "md5_digest": "733194dff238630dfa68841235bcd1c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7167, "upload_time": "2017-09-12T15:45:07", "url": "https://files.pythonhosted.org/packages/9f/1d/633f293bad2e3ed474381e1f232e1241e6b2354a2dbdfbef7ec6ec03f3c1/flashtext-1.9.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "c37c2fad7fafc1d63e2ce7fccbecf27b", "sha256": "2e20c080849cbf9b4764f63913731e5b153836433c94d25f77618009ea2f4ad5" }, "downloads": -1, "filename": "flashtext-2.0.tar.gz", "has_sig": false, "md5_digest": "c37c2fad7fafc1d63e2ce7fccbecf27b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7206, "upload_time": "2017-09-12T18:13:12", "url": "https://files.pythonhosted.org/packages/b3/c5/f82ec8beb14e7df2e0a06be29b5d7cff04dab515af591b2605bdea6b19ef/flashtext-2.0.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "c55983e70ebab5fc64181950d03e3019", "sha256": "aac14c2e946a4213b942fc78301f8d80eb2ed75ee984a5c2e63db726a4198279" }, "downloads": -1, "filename": "flashtext-2.1.tar.gz", "has_sig": false, "md5_digest": "c55983e70ebab5fc64181950d03e3019", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8589, "upload_time": "2017-09-25T17:11:35", "url": "https://files.pythonhosted.org/packages/db/aa/88c5c2fc4afe2d3e272b65eaeb136d972095002ab7e8b1ee7711a8bbf7e2/flashtext-2.1.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "ce06d74cb1da3db5573f44d9ed531acb", "sha256": "cec81b4eafbb3ec37b2d985b14dee64620f200e4295232169d904086144c746d" }, "downloads": -1, "filename": "flashtext-2.2.tar.gz", "has_sig": false, "md5_digest": "ce06d74cb1da3db5573f44d9ed531acb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8609, "upload_time": "2017-09-25T17:27:59", "url": "https://files.pythonhosted.org/packages/a6/c9/a8253e1296c2d3dd257e71ebdf7e03e675c9031f8bc8b3c785b588a9c74a/flashtext-2.2.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "c8e679f74fdb99ec07c1e2380d7f6f85", "sha256": "74527f51044a191539d4570083e56605a5cc319f01ff1530c41d4c0c0df24817" }, "downloads": -1, "filename": "flashtext-2.3.tar.gz", "has_sig": false, "md5_digest": "c8e679f74fdb99ec07c1e2380d7f6f85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8774, "upload_time": "2017-10-27T12:29:11", "url": "https://files.pythonhosted.org/packages/8e/df/67c3a1c9e394a413edbdd6ace448229ef3f33ecae34c404db02844e3b154/flashtext-2.3.tar.gz" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "a9794dfbafcc8d8ad6c0376df4daf1fb", "sha256": "829c6d47c7786abc9654fef8587ce232cbee122bbde6bfc5c02a7e17b44d7dd7" }, "downloads": -1, "filename": "flashtext-2.4.tar.gz", "has_sig": false, "md5_digest": "a9794dfbafcc8d8ad6c0376df4daf1fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12981, "upload_time": "2017-11-19T18:26:26", "url": "https://files.pythonhosted.org/packages/56/88/d735c0ea70334aac2c8747eb5d6ebc192c2cca4c3bcacc0784427462dfc3/flashtext-2.4.tar.gz" } ], "2.5": [ { "comment_text": "", "digests": { "md5": "86bb6cd6666abfdec126edce30b5a70a", "sha256": "31be469e57a1153ddcd6c77dec88948d3ebfe2c2c219714a2eeddd10d287d76c" }, "downloads": -1, "filename": "flashtext-2.5.tar.gz", "has_sig": false, "md5_digest": "86bb6cd6666abfdec126edce30b5a70a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14066, "upload_time": "2017-11-21T18:49:57", "url": "https://files.pythonhosted.org/packages/9b/26/e481b4651dee5562395dfed6eebc83ebcba8b210d9d28a3a5feccd41ec90/flashtext-2.5.tar.gz" } ], "2.6": [ { "comment_text": "", "digests": { "md5": "8bcb07478000979b26bf665de16917f6", "sha256": "09481973bcd4e4303ccb159fecf8894604acd93ffe97d7bb81b50d66dd40d5fe" }, "downloads": -1, "filename": "flashtext-2.6.tar.gz", "has_sig": false, "md5_digest": "8bcb07478000979b26bf665de16917f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14391, "upload_time": "2018-01-26T15:24:13", "url": "https://files.pythonhosted.org/packages/14/e2/45c2a4c874e65bfcc0afe73fa4648046289df753bb19dbe96d4b1ae7ab22/flashtext-2.6.tar.gz" } ], "2.7": [ { "comment_text": "", "digests": { "md5": "2a8b58110dffa7ddbc68751542c9e20e", "sha256": "a1be2b93e09d4f0deee4aad72b91a7127b61fb8b8034ca9a9c78ea745d8b05cf" }, "downloads": -1, "filename": "flashtext-2.7.tar.gz", "has_sig": false, "md5_digest": "2a8b58110dffa7ddbc68751542c9e20e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14536, "upload_time": "2018-02-16T05:24:17", "url": "https://files.pythonhosted.org/packages/81/d8/2cd0656eae456d615c2f1efbcae8dfca2cb871a31f34ba8925aba47d5e09/flashtext-2.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2a8b58110dffa7ddbc68751542c9e20e", "sha256": "a1be2b93e09d4f0deee4aad72b91a7127b61fb8b8034ca9a9c78ea745d8b05cf" }, "downloads": -1, "filename": "flashtext-2.7.tar.gz", "has_sig": false, "md5_digest": "2a8b58110dffa7ddbc68751542c9e20e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14536, "upload_time": "2018-02-16T05:24:17", "url": "https://files.pythonhosted.org/packages/81/d8/2cd0656eae456d615c2f1efbcae8dfca2cb871a31f34ba8925aba47d5e09/flashtext-2.7.tar.gz" } ] }