{ "info": { "author": "Stephan Richter, Russ Ferriday and the Zope Community", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "This package determines important terms within a given piece of content. It\nuses linguistic tools such as Parts-Of-Speech (POS) and some simple\nstatistical analysis to determine the terms and their strength.\n\n\nDetailed Documentation\n**********************\n\n===============\nTerm Extraction\n===============\n\nThis package implements text term extraction by making use of a simple\nParts-Of-Speech (POS) tagging algorithm.\n\nhttp://bioie.ldc.upenn.edu/wiki/index.php/Part-of-Speech\n\n\nThe POS Tagger\n--------------\n\nPOS Taggers use a lexicon to mark words with a tag. A list of available tags\ncan be found at:\n\nhttp://bioie.ldc.upenn.edu/wiki/index.php/POS_tags\n\nSince words can have multiple tags, the determination of the correct tag is\nnot always simple. This implementation, however, does not try to infer\nlinguistic use and simply chooses the first tag in the lexicon.\n\n >>> from topia.termextract import tag\n >>> tagger = tag.Tagger()\n >>> tagger\n \n\nTo get the tagger ready for its work, we need to initialize it. In this\nimplementation the lexicon is loaded.\n\n >>> tagger.initialize()\n\nNow we are ready to rock and roll.\n\nTokenizing\n~~~~~~~~~~\n\nThe first step of tagging is to tokenize the text into terms.\n\n >>> tagger.tokenize('This is a simple example.')\n ['This', 'is', 'a', 'simple', 'example', '.']\n\nWhile most tokenizers ignore punctuation, it is important for us to keep it,\nsince we need it later for the term extraction. Let's now look at some more\ncomplex cases:\n\n- Quoted Text\n\n >>> tagger.tokenize('This is a \"simple\" example.')\n ['This', 'is', 'a', '\"', 'simple', '\"', 'example', '.']\n\n >>> tagger.tokenize('\"This is a simple example.\"')\n ['\"', 'This', 'is', 'a', 'simple', 'example', '.\"']\n\n- Non-letters within words.\n\n >>> tagger.tokenize('Parts-Of-Speech')\n ['Parts-Of-Speech']\n\n >>> tagger.tokenize('amazon.com')\n ['amazon.com']\n\n >>> tagger.tokenize('Go to amazon.com.')\n ['Go', 'to', 'amazon.com', '.']\n\n- Various punctuation.\n\n >>> tagger.tokenize('Quick, go to amazon.com.')\n ['Quick', ',', 'go', 'to', 'amazon.com', '.']\n\n >>> tagger.tokenize('Live free; or die?')\n ['Live', 'free', ';', 'or', 'die', '?']\n\n- Tolerance to incorrect punctuation.\n\n >>> tagger.tokenize('Hi , I am here.')\n ['Hi', ',', 'I', 'am', 'here', '.']\n\n- Possessive structures.\n\n >>> tagger.tokenize(\"my parents' car\")\n ['my', 'parents', \"'\", 'car']\n >>> tagger.tokenize(\"my father's car\")\n ['my', 'father', \"'s\", 'car']\n\n- Numbers.\n\n >>> tagger.tokenize(\"12.4\")\n ['12.4']\n >>> tagger.tokenize(\"-12.4\")\n ['-12.4']\n >>> tagger.tokenize(\"$12.40\")\n ['$12.40']\n\n- Dates.\n\n >>> tagger.tokenize(\"10/3/2009\")\n ['10/3/2009']\n >>> tagger.tokenize(\"3.10.2009\")\n ['3.10.2009']\n\nOkay, that's it.\n\n\nTagging\n-------\n\nThe next step is tagging. Tagging is done in two phases. During the first\nphase terms are assigned a tag by looking at the lexicon and the normalized\nform is set to the term itself. In the second phase, a set of rules is applied\nto each tagged term and the tagging and normalization is tweaked.\n\n >>> tagger('This is a simple example.')\n [['This', 'DT', 'This'],\n ['is', 'VBZ', 'is'],\n ['a', 'DT', 'a'],\n ['simple', 'JJ', 'simple'],\n ['example', 'NN', 'example'],\n ['.', '.', '.']]\n\nSo wow, this determination was dead on. Let's try a plural form noun and see\nwhat happens:\n\n >>> tagger('These are simple examples.')\n [['These', 'DT', 'These'],\n ['are', 'VBP', 'are'],\n ['simple', 'JJ', 'simple'],\n ['examples', 'NNS', 'example'],\n ['.', '.', '.']]\n\nSo far so good. Let's test a few more cases:\n\n >>> tagger(\"The fox's tail is red.\")\n [['The', 'DT', 'The'],\n ['fox', 'NN', 'fox'],\n [\"'s\", 'POS', \"'s\"],\n ['tail', 'NN', 'tail'],\n ['is', 'VBZ', 'is'],\n ['red', 'JJ', 'red'],\n ['.', '.', '.']]\n\n >>> tagger(\"The fox can't really jump over the fox's tail.\")\n [['The', 'DT', 'The'],\n ['fox', 'NN', 'fox'],\n ['can', 'MD', 'can'],\n [\"'t\", 'RB', \"'t\"],\n ['really', 'RB', 'really'],\n ['jump', 'VB', 'jump'],\n ['over', 'IN', 'over'],\n ['the', 'DT', 'the'],\n ['fox', 'NN', 'fox'],\n [\"'s\", 'POS', \"'s\"],\n ['tail', 'NN', 'tail'],\n ['.', '.', '.']]\n\nRules\n~~~~~\n\n- Correct Default Noun Tag\n\n >>> tagger('Ikea')\n [['Ikea', 'NN', 'Ikea']]\n >>> tagger('Ikeas')\n [['Ikeas', 'NNS', 'Ikea']]\n\n- Verify proper nouns at beginning of sentence.\n\n >>> tagger('. Police')\n [['.', '.', '.'], ['police', 'NN', 'police']]\n >>> tagger('Police')\n [['police', 'NN', 'police']]\n >>> tagger('. Stephan')\n [['.', '.', '.'], ['Stephan', 'NNP', 'Stephan']]\n\n- Determine Verb after Modal Verb\n\n >>> tagger('The fox can jump')\n [['The', 'DT', 'The'],\n ['fox', 'NN', 'fox'],\n ['can', 'MD', 'can'],\n ['jump', 'VB', 'jump']]\n >>> tagger(\"The fox can't jump\")\n [['The', 'DT', 'The'],\n ['fox', 'NN', 'fox'],\n ['can', 'MD', 'can'],\n [\"'t\", 'RB', \"'t\"],\n ['jump', 'VB', 'jump']]\n >>> tagger('The fox can really jump')\n [['The', 'DT', 'The'],\n ['fox', 'NN', 'fox'],\n ['can', 'MD', 'can'],\n ['really', 'RB', 'really'],\n ['jump', 'VB', 'jump']]\n\n- Normalize Plural Forms\n\n >>> tagger('examples')\n [['examples', 'NNS', 'example']]\n >>> tagger('stresses')\n [['stresses', 'NNS', 'stress']]\n >>> tagger('cherries')\n [['cherries', 'NNS', 'cherry']]\n\n Some cases that do not work:\n\n >>> tagger('men')\n [['men', 'NNS', 'men']]\n >>> tagger('feet')\n [['feet', 'NNS', 'feet']]\n\n\nTerm Extraction\n---------------\n\nNow that we can tag a text, let's have a look at the term extractions.\n\n >>> from topia.termextract import extract\n >>> extractor = extract.TermExtractor()\n >>> extractor\n >\n\nAs you can see, the extractor maintains a tagger:\n\n >>> extractor.tagger\n \n\nWhen creating an extractor, you can also pass in a tagger to avoid frequent\ntagger initialization:\n\n >>> extractor = extract.TermExtractor(tagger)\n >>> extractor.tagger is tagger\n True\n\nLet's get the terms for a simple text.\n\n >>> extractor(\"The fox can't jump over the fox's tail.\")\n []\n\nWe got no terms. That's because by default at least 3 occurences of a\nterm must be detected, if the term consists of a single word.\n\nThe extractor maintains a filter component. Let's register the trivial\npermissive filter, which simply return everything that the extractor suggests:\n\n >>> extractor.filter = extract.permissiveFilter\n >>> extractor(\"The fox can't jump over the fox's tail.\")\n [('tail', 1, 1), ('fox', 2, 1)]\n\nBut let's look at the default filter again, since it allows tweaking its\nparameters:\n\n >>> extractor.filter = extract.DefaultFilter(singleStrengthMinOccur=2)\n >>> extractor(\"The fox can't jump over the fox's tail.\")\n [('fox', 2, 1)]\n\nLet's now have a look at multi-word terms. Oftentimes multi-word nouns and\nproper names occur only once or twice in a text. But they are often great\nterms! To handle this scenario, the concept of \"strength\" was\nintroduced. Currently the strength is simply the amount of words in the\nterm. By default, all terms with a strength larger than 1 are selected\nregardless of the number of occurances.\n\n >>> extractor('The German consul of Boston resides in Newton.')\n [('German consul', 1, 2)]\n\n\n\n===========================\nAn Exmaple - A News Article\n===========================\n\nThis document provides a simple example of extracting the terms of a BBC\narticle from May 29, 2009. We will use several term extraction tools to\ncompare the outcome.\n\n >>> text ='''\n ... Police shut Palestinian theatre in Jerusalem.\n ...\n ... Israeli police have shut down a Palestinian theatre in East Jerusalem.\n ...\n ... The action, on Thursday, prevented the closing event of an international\n ... literature festival from taking place.\n ...\n ... Police said they were acting on a court order, issued after intelligence\n ... indicated that the Palestinian Authority was involved in the event.\n ...\n ... Israel has occupied East Jerusalem since 1967 and has annexed the\n ... area. This is not recognised by the international community.\n ...\n ... The British consul-general in Jerusalem , Richard Makepeace, was\n ... attending the event.\n ...\n ... \"I think all lovers of literature would regard this as a very\n ... regrettable moment and regrettable decision,\" he added.\n ...\n ... Mr Makepeace said the festival's closing event would be reorganised to\n ... take place at the British Council in Jerusalem.\n ...\n ... The Israeli authorities often take action against events in East\n ... Jerusalem they see as connected to the Palestinian Authority.\n ...\n ... Saturday's opening event at the same theatre was also shut down.\n ...\n ... A police notice said the closure was on the orders of Israel's internal\n ... security minister on the grounds of a breach of interim peace accords\n ... from the 1990s.\n ...\n ... These laid the framework for talks on establishing a Palestinian state\n ... alongside Israel, but left the status of Jerusalem to be determined by\n ... further negotiation.\n ...\n ... Israel has annexed East Jerusalem and declares it part of its eternal\n ... capital.\n ...\n ... Palestinians hope to establish their capital in the area.\n ... '''\n\n\nYahoo Keyword Extractor\n-----------------------\n\nYahoo provides a service that extracts terms from a piece of content using\nits immense search database.\n\nhttp://developer.yahoo.com/search/content/V1/termExtraction.html\n\nAs you can see, the result is excellent::\n\n \n british consul general\n east jerusalem\n literature festival\n richard makepeace\n international literature\n israeli authorities\n eternal capital\n peace accords\n security minister\n israeli police\n internal security\n palestinian state\n palestinian authority\n british council\n palestinians\n negotiation\n breach\n 1990s\n closure\n israel\n \n\nUnfortunately, the service allows only 5000 requests per 24 hours. Also, there\nis no strength indicator on the terms.\n\n\nTreeTagger\n----------\n\nA POS tagger that uses some linguistics to tag a text. Here is its output::\n\n Police NNS Police\n shut VVD shut\n Palestinian JJ Palestinian\n theatre NN theatre\n in IN in\n Jerusalem NP Jerusalem\n . SENT .\n Israeli JJ Israeli\n police NNS police\n have VHP have\n shut VVN shut\n down RP down\n a DT a\n Palestinian JJ Palestinian\n theatre NN theatre\n in IN in\n East NP East\n Jerusalem NP Jerusalem\n . SENT .\n The DT the\n action NN action\n , , ,\n on IN on\n Thursday NP Thursday\n , , ,\n prevented VVD prevent\n the DT the\n closing NN closing\n event NN event\n of IN of\n an DT an\n international JJ international\n literature NN literature\n festival NN festival\n from IN from\n taking VVG take\n place NN place\n . SENT .\n Police NNS Police\n said VVD say\n they PP they\n were VBD be\n acting VVG act\n on IN on\n a DT a\n court NN court\n order NN order\n , , ,\n issued VVN issue\n after IN after\n intelligence NN intelligence\n indicated VVN indicate\n that IN that\n the DT the\n Palestinian NP Palestinian\n Authority NP Authority\n was VBD be\n involved VVN involve\n in IN in\n the DT the\n event NN event\n . SENT .\n Israel NP Israel\n has VHZ have\n occupied VVN occupy\n East NP East\n Jerusalem NP Jerusalem\n since IN since\n 1967 CD @card@\n and CC and\n has VHZ have\n annexed VVN annex\n the DT the\n area NN area\n . SENT .\n This DT this\n is VBZ be\n not RB not\n recognised VVN recognise\n by IN by\n the DT the\n international JJ international\n community NN community\n . SENT .\n The DT the\n British JJ British\n consul-general NN \n in IN in\n Jerusalem NP Jerusalem\n , , ,\n Richard NP Richard\n Makepeace NP Makepeace\n , , ,\n was VBD be\n attending VVG attend\n the DT the\n event NN event\n . SENT .\n \" `` \"\n I PP I\n think VVP think\n all DT all\n lovers NNS lover\n of IN of\n literature NN literature\n would MD would\n regard VV regard\n this DT this\n as IN as\n a DT a\n very RB very\n regrettable JJ regrettable\n moment NN moment\n and CC and\n regrettable JJ regrettable\n decision NN decision\n , , ,\n \" '' \"\n he PP he\n added VVD add\n . SENT .\n Mr NP Mr\n Makepeace NP Makepeace\n said VVD say\n the DT the\n festival NN festival\n 's POS 's\n closing NN closing\n event NN event\n would MD would\n be VB be\n reorganised VVN \n to TO to\n take VV take\n place NN place\n at IN at\n the DT the\n British NP British\n Council NP Council\n in IN in\n Jerusalem NP Jerusalem\n . SENT .\n The DT the\n Israeli JJ Israeli\n authorities NNS authority\n often RB often\n take VVP take\n action NN action\n against IN against\n events NNS event\n in IN in\n East NP East\n Jerusalem NP Jerusalem\n they PP they\n see VVP see\n as RB as\n connected VVN connect\n to TO to\n the DT the\n Palestinian JJ Palestinian\n Authority NP Authority\n . SENT .\n Saturday NP Saturday\n 's POS 's\n opening NN opening\n event NN event\n at IN at\n the DT the\n same JJ same\n theatre NN theatre\n was VBD be\n also RB also\n shut VVN shut\n down RP down\n . SENT .\n A DT a\n police NN police\n notice NN notice\n said VVD say\n the DT the\n closure NN closure\n was VBD be\n on IN on\n the DT the\n orders NNS order\n of IN of\n Israel NP Israel\n 's POS 's\n internal JJ internal\n security NN security\n minister NN minister\n on IN on\n the DT the\n grounds NNS ground\n of IN of\n a DT a\n breach NN breach\n of IN of\n interim JJ interim\n peace NN peace\n accords NNS accord\n from IN from\n the DT the\n 1990s NNS 1990s\n . SENT .\n These DT these\n laid VVD lay\n the DT the\n framework NN framework\n for IN for\n talks NNS talk\n on IN on\n establishing VVG establish\n a DT a\n Palestinian JJ Palestinian\n state NN state\n alongside IN alongside\n Israel NP Israel\n , , ,\n but CC but\n left VVD leave\n the DT the\n status NN status\n of IN of\n Jerusalem NP Jerusalem\n to TO to\n be VB be\n determined VVN determine\n by IN by\n further JJR further\n negotiation NN negotiation\n . SENT .\n Israel NP Israel\n has VHZ have\n annexed VVN annex\n East NP East\n Jerusalem NP Jerusalem\n and CC and\n declares VVZ declare\n it PP it\n part NN part\n of IN of\n its PP$ its\n eternal JJ eternal\n capital NN capital\n . SENT .\n Palestinians NPS Palestinians\n hope VVP hope\n to TO to\n establish VV establish\n their PP$ their\n capital NN capital\n in IN in\n the DT the\n area NN area\n . SENT .\n\nAs you can see, the identification of TreeTagger is pretty good, but the\noutput would need some analysis to produce a useful set of terms. Furthermore,\nTreeTagger is not free for commercial use.\n\nTopia's Term Extractor\n----------------------\n\nTopia's Term Extractor tries to produce results somewhere between a POS\ntagger like TreeTagger and Yahoo Keyword Extraction.\n\nSince we are only interested in nouns, a very simple POS tagging algorithm can\nbe deployed, which will provide good results most of the time. We then use\nsome simple statistics and linguistics to produce a narrow but strong list of\nterms for the content.\n\n >>> from topia.termextract import extract\n >>> extractor = extract.TermExtractor()\n\nLet's look at the result of the tagger first:\n\n >>> printTaggedTerms(extractor.tagger(text)) #doctest: +REPORT_NDIFF\n police NN police\n shut VBN shut\n Palestinian JJ Palestinian\n theatre NN theatre\n in IN in\n Jerusalem NNP Jerusalem\n . . .\n Israeli JJ Israeli\n police NN police\n have VBP have\n shut VBN shut\n down RB down\n a DT a\n Palestinian JJ Palestinian\n theatre NN theatre\n in IN in\n East NNP East\n Jerusalem NNP Jerusalem\n . . .\n The DT The\n action NN action\n , , ,\n on IN on\n Thursday NNP Thursday\n , , ,\n prevented VBN prevented\n the DT the\n closing VBG closing\n event NN event\n of IN of\n an DT an\n international JJ international\n literature NN literature\n festival NN festival\n from IN from\n taking VBG taking\n place NN place\n . . .\n police NN police\n said VBD said\n they PRP they\n were VBD were\n acting VBG acting\n on IN on\n a DT a\n court NN court\n order NN order\n , , ,\n issued VBN issued\n after IN after\n intelligence NN intelligence\n indicated VBD indicated\n that IN that\n the DT the\n Palestinian JJ Palestinian\n Authority NNP Authority\n was VBD was\n involved VBN involved\n in IN in\n the DT the\n event NN event\n . . .\n Israel NNP Israel\n has VBZ has\n occupied VBN occupied\n East NNP East\n Jerusalem NNP Jerusalem\n since IN since\n 1967 NN 1967\n and CC and\n has VBZ has\n annexed VBD annexed\n the DT the\n area NN area\n . . .\n This DT This\n is VBZ is\n not RB not\n recognised VBD recognised\n by IN by\n the DT the\n international JJ international\n community NN community\n . . .\n The DT The\n British JJ British\n consul-general NN consul-general\n in IN in\n Jerusalem NNP Jerusalem\n , , ,\n Richard NNP Richard\n Makepeace NNP Makepeace\n , , ,\n was VBD was\n attending VBG attending\n the DT the\n event NN event\n . . .\n \" \" \"\n I PRP I\n think VBP think\n all DT all\n lovers NNS lover\n of IN of\n literature NN literature\n would MD would\n regard VB regard\n this DT this\n as IN as\n a DT a\n very RB very\n regrettable JJ regrettable\n moment NN moment\n and CC and\n regrettable JJ regrettable\n decision NN decision\n ,\" , ,\"\n he PRP he\n added VBD added\n . . .\n Mr NNP Mr\n Makepeace NNP Makepeace\n said VBD said\n the DT the\n festival NN festival\n 's POS 's\n closing VBG closing\n event NN event\n would MD would\n be VB be\n reorganised NN reorganised\n to TO to\n take VB take\n place NN place\n at IN at\n the DT the\n British JJ British\n Council NNP Council\n in IN in\n Jerusalem NNP Jerusalem\n . . .\n The DT The\n Israeli JJ Israeli\n authorities NNS authority\n often RB often\n take VB take\n action NN action\n against IN against\n events NNS event\n in IN in\n East NNP East\n Jerusalem NNP Jerusalem\n they PRP they\n see VB see\n as IN as\n connected VBN connected\n to TO to\n the DT the\n Palestinian JJ Palestinian\n Authority NNP Authority\n . . .\n Saturday NNP Saturday\n 's POS 's\n opening NN opening\n event NN event\n at IN at\n the DT the\n same JJ same\n theatre NN theatre\n was VBD was\n also RB also\n shut VBN shut\n down RB down\n . . .\n A DT A\n police NN police\n notice NN notice\n said VBD said\n the DT the\n closure NN closure\n was VBD was\n on IN on\n the DT the\n orders NNS order\n of IN of\n Israel NNP Israel\n 's POS 's\n internal JJ internal\n security NN security\n minister NN minister\n on IN on\n the DT the\n grounds NNS ground\n of IN of\n a DT a\n breach NN breach\n of IN of\n interim JJ interim\n peace NN peace\n accords NNS accord\n from IN from\n the DT the\n 1990 NN 1990\n s PRP s\n . . .\n These DT These\n laid VBN laid\n the DT the\n framework NN framework\n for IN for\n talks NNS talk\n on IN on\n establishing VBG establishing\n a DT a\n Palestinian JJ Palestinian\n state NN state\n alongside IN alongside\n Israel NNP Israel\n , , ,\n but CC but\n left VBN left\n the DT the\n status NN status\n of IN of\n Jerusalem NNP Jerusalem\n to TO to\n be VB be\n determined VBN determined\n by IN by\n further JJ further\n negotiation NN negotiation\n . . .\n Israel NNP Israel\n has VBZ has\n annexed VBD annexed\n East NNP East\n Jerusalem NNP Jerusalem\n and CC and\n declares VBZ declares\n it PRP it\n part NN part\n of IN of\n its PRP$ its\n eternal JJ eternal\n capital NN capital\n . . .\n Palestinians NNPS Palestinian\n hope NN hope\n to TO to\n establish VB establish\n their PRP$ their\n capital NN capital\n in IN in\n the DT the\n area NN area\n . . .\n\nLet's now apply the extractor.\n\n >>> sorted(extractor(text))\n [('British Council', 1, 2),\n ('British consul-general', 1, 2),\n ('East', 4, 1),\n ('East Jerusalem', 4, 2),\n ('Israel', 4, 1),\n ('Israeli authorities', 1, 2),\n ('Israeli police', 1, 2),\n ('Jerusalem', 8, 1),\n ('Mr Makepeace', 1, 2),\n ('Palestinian', 6, 1),\n ('Palestinian Authority', 2, 2),\n ('Palestinian state', 1, 2),\n ('Palestinian theatre', 2, 2),\n ('Palestinians hope', 1, 2),\n ('Richard Makepeace', 1, 2),\n ('court order', 1, 2),\n ('event', 6, 1),\n ('literature festival', 1, 2),\n ('opening event', 1, 2),\n ('peace accords', 1, 2),\n ('police', 4, 1),\n ('police notice', 1, 2),\n ('security minister', 1, 2),\n ('theatre', 3, 1)]\n\n\n=======\nCHANGES\n=======\n\n1.1.0 (2009-06-29)\n------------------\n\n- Improved the dictionary a little bit to improve real scenarios.\n\n\n1.0.0 (2009-05-30)\n------------------\n\n- Initial Release\n\n * Part-Of-Speech Text Tagging using existing lexicon ans very simplisitc\n linguistic rules.\n\n * Term Extraction based on occurances and term strength.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/topia.termextract", "keywords": "content term extract pos tagger linguistics", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "topia.termextract", "package_url": "https://pypi.org/project/topia.termextract/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/topia.termextract/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/topia.termextract" }, "release_url": "https://pypi.org/project/topia.termextract/1.1.0/", "requires_dist": null, "requires_python": null, "summary": "Content Term Extraction using POS Tagging", "version": "1.1.0" }, "last_serial": 800798, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "8f59f8e38a573496f7db921efa4b98af", "sha256": "58ebdb1724e09a943512c26b278e026f481ed9009de99d1c218ad2a2fa479989" }, "downloads": -1, "filename": "topia.termextract-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8f59f8e38a573496f7db921efa4b98af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 571072, "upload_time": "2009-05-30T18:11:18", "url": "https://files.pythonhosted.org/packages/25/2f/5d36cb17f1260611f505eb06d6e26af819197d9ce4e48843c175a4a280ab/topia.termextract-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "1db016dd114588b75bdc3c458eb97f01", "sha256": "86f82423613d6c33a975e666484af936d7b0c54ff5af6264d3b007c1a168f6bf" }, "downloads": -1, "filename": "topia.termextract-1.1.0.tar.gz", "has_sig": false, "md5_digest": "1db016dd114588b75bdc3c458eb97f01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 571685, "upload_time": "2009-06-30T07:51:32", "url": "https://files.pythonhosted.org/packages/d1/b9/452257976ebee91d07c74bc4b34cfce416f45b94af1d62902ae39bf902cf/topia.termextract-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1db016dd114588b75bdc3c458eb97f01", "sha256": "86f82423613d6c33a975e666484af936d7b0c54ff5af6264d3b007c1a168f6bf" }, "downloads": -1, "filename": "topia.termextract-1.1.0.tar.gz", "has_sig": false, "md5_digest": "1db016dd114588b75bdc3c458eb97f01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 571685, "upload_time": "2009-06-30T07:51:32", "url": "https://files.pythonhosted.org/packages/d1/b9/452257976ebee91d07c74bc4b34cfce416f45b94af1d62902ae39bf902cf/topia.termextract-1.1.0.tar.gz" } ] }