{"id":34033991,"url":"https://github.com/rlayers/pawpaw","last_synced_at":"2026-04-08T15:31:23.456Z","repository":{"id":61598386,"uuid":"545724455","full_name":"rlayers/pawpaw","owner":"rlayers","description":"Text Processing \u0026 Segmentation Framework","archived":false,"fork":false,"pushed_at":"2025-09-18T18:10:02.000Z","size":5614,"stargazers_count":25,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-15T10:41:08.732Z","etag":null,"topics":["extract-text","hierarchical-text-segmentation","information-extraction","knowledge-graph","lexer","natural-language-processing","nlp","parser","python","query-engine","query-language","text-processing","text-segmentation","tree","xml-parser","xmlparser"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rlayers.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-04T21:50:29.000Z","updated_at":"2025-09-18T18:10:07.000Z","dependencies_parsed_at":"2022-10-19T23:00:30.309Z","dependency_job_id":"62585230-d6eb-485c-8164-7f25b207327a","html_url":"https://github.com/rlayers/pawpaw","commit_stats":{"total_commits":842,"total_committers":2,"mean_commits":421.0,"dds":0.1769596199524941,"last_synced_commit":"e4e64d94201b410a1a87ec59d4a43d1d83ed3692"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/rlayers/pawpaw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlayers%2Fpawpaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlayers%2Fpawpaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlayers%2Fpawpaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlayers%2Fpawpaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rlayers","download_url":"https://codeload.github.com/rlayers/pawpaw/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlayers%2Fpawpaw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extract-text","hierarchical-text-segmentation","information-extraction","knowledge-graph","lexer","natural-language-processing","nlp","parser","python","query-engine","query-language","text-processing","text-segmentation","tree","xml-parser","xmlparser"],"created_at":"2025-12-13T19:27:46.573Z","updated_at":"2026-04-08T15:31:23.434Z","avatar_url":"https://github.com/rlayers.png","language":"Python","readme":"\u003c!-- Back to top link --\u003e\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n[![Python][Python-shield]][Python-url]\n[![Contributors][contributors-shield]][contributors-url]\n[![Watchers][watchers-shield]][watchers-url]\n[![Forks][forks-shield]][forks-url]\n[![MIT License][license-shield]][license-url]\n[![Stargazers][stars-social]][stars-url]\n\u003cbr /\u003e\n\n\u003c!-- ![Pawpaw](svg/title.svg) --\u003e\n\n# Pawpaw  [![High Performance Text Segmentation, Parsing, \u0026 Query][byline-img]][repo]\n\nPawpaw is a high-performance framework for parsing and text segmentation. The segments it generates are automatically organized into tree graphs, which can be easily serialized, traversed, and queried using a powerful structured query language called *plumule*. Creating a tree graph is simple — just provide spans, gaps, substrings, or even a regex/match object. Additionally, Pawpaw includes a robust pipelining engine, enabling you to create complex, multi-step, rules-based text parsers.\n\n\u003cimg align=\"right\" width=\"30%\" height=\"30%\" alt=\"Botanical Drawing: Asimina triloba: the American papaw\" src=\"https://raw.githubusercontent.com/rlayers/pawpaw/master/images/pawpaw.png\" /\u003e \n\n- Indexed string and substring representation\n  - Efficient memory utilization\n  - Fast processing\n  - Pythonic relative indexing and slicing\n  - Runtime \u0026 polymorphic value extraction\n  - Tree graphs for all indexed text\n- Search and Query\n  - Search trees using *plumule*: a powerful structured query language similar to XPATH\n  - Combine multiple axes, filters, and subqueries sequentially and recursively to any depth\n  - Optionally pre-compile queries for increased performance\n- Rules Pipelining Engine\n  - Develop complex lexical parsers with just a few lines of code\n  - Quickly and easily convert unstructured text into structured, indexed, \u0026 searchable tree graphs\n  - Pre-process text for downstream NLP/AI/ML consumers\n- XML Processing\n  - Features a drop-in replacement for ``ElementTree.XmlParser``\n  - Full text indices for all elements, attributes, tags, text, etc.\n  - Search the resulting XML using either XPATH and/or plumule\n  - Extract *both* ``ElementTree`` and Pawpaw datastructures in one go; with cross-linked nodes between trees\n- NLP Support:\n  - Ideal for *preprocessing* unstructured text for downstream NLP consumption\n  - Integrates well with other libraries, such as [NLTK](https://www.nltk.org/)\n- Efficient pickling and JSON persistence\n  - A security option allows persistence of index-only data, reinjecting referenced strings during deserialization\n- Stable \u0026 Defect Free\n  - Over 5,000 unit tests and counting!\n  - Pure Python, with only one external dependency: [regex](https://github.com/mrabarnett/mrab-regex)\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/rlayers/pawpaw/tree/master/docs\"\u003eExplore the docs\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://github.com/rlayers/pawpaw/issues\"\u003eRequest a feature or report a bug\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"https://github.com/rlayers/pawpaw/tree/master/pawpaw\"\u003eExplore the code\u003c/a\u003e\n\u003c/div\u003e\n\n\u003c!-- EXAMPLE --\u003e\n## Example\n\nWith Pawpaw, you can start with flattened text like this: \n\n```\nARTICLE I\nSection 1: Congress\nAll legislative Powers herein granted shall be vested in a Congress of the United States,\nwhich shall consist of a Senate and House of Representatives.\n\nSection 2: The House of Representatives\nThe House of Representatives shall be composed of Members chosen every second Year by the\nPeople of the several States, and the Electors in each State shall have the Qualifications\nrequisite for Electors of the most numerous Branch of the State Legislature.\n\nNo Person shall be a Representative who shall not have attained to the Age of twenty five\nYears, and been seven Years a Citizen of the United States, and who shall not, when elected,\nbe an Inhabitant of that State in which he shall be chosen.\n```\n\nand quickly and easily produce a tree that look like this:\n\n```mermaid\ngraph TD;\n  A1[\"[article]\u003cbr/\u003e#quot;ARTICLE I…#quot;\"]:::dark_brown --\u003e A1_k[\"[key]\u003cbr/\u003e#quot;I#quot;\"]:::dark_brown;\n  A1---\u003eSc1[\"[section]\u003cbr/\u003e#quot;Section 1…#quot;\"]:::light_brown;\n  Sc1--\u003eSc1_k[\"[key]\u003cbr/\u003e#quot;1#quot;\"]:::light_brown\n  Sc1---\u003eSc1_p1[\"[paragraph]\u003cbr/\u003e#quot;All legislative Powers…#quot;\"]:::peach\n  Sc1_p1--\u003eSc1_p1_s1[\"[sentence]\u003cbr/\u003e#quot;All legislative Powers…#quot;\"]:::dark_green\n  Sc1_p1_s1--\u003eSc1_p1_s1_w1[\"[word]\u003cbr/\u003e#quot;All#quot;\"]:::light_green\n  Sc1_p1_s1--\u003eSc1_p1_s1_w2[\"[word]\u003cbr/\u003e#quot;legislative#quot;\"]:::light_green\n  Sc1_p1_s1--\u003eSc1_p1_s1_w3[\"[word]\u003cbr/\u003e#quot;Powers#quot;\"]:::light_green\n  Sc1_p1_s1--\u003eSc1_p1_s1_w4[\"...\"]:::ellipsis\n\n  A1---\u003eSc2[\"[section]\u003cbr/\u003e#quot;Section 2#quot;\"]:::light_brown;\n  Sc2--\u003eSc2_k[\"[key]\u003cbr/\u003e#quot;2#quot;\"]:::light_brown\n  Sc2---\u003eSc2_p1[\"[paragraph]\u003cbr/\u003e#quot;The House of…#quot;\"]:::peach\n  Sc2_p1----\u003eSc2_p1_s1[\"[sentence]\u003cbr/\u003e#quot;The House of…#quot;\"]:::dark_green\n  Sc2_p1_s1--\u003eSc2_p1_s1_w1[\"[word]\u003cbr/\u003e#quot;The#quot;\"]:::light_green\n  Sc2_p1_s1--\u003eSc2_p1_s1_w2[\"[word]\u003cbr/\u003e#quot;House#quot;\"]:::light_green\n  Sc2_p1_s1--\u003eSc2_p1_s1_w3[\"[word]\u003cbr/\u003e#quot;of#quot;\"]:::light_green\n  Sc2_p1_s1--\u003eSc2_p1_s1_w4[\"...\"]:::ellipsis\n  Sc2---\u003eSc2_p2[\"[paragraph]\u003cbr/\u003e#quot;No Person shall…#quot;\"]:::peach\n  Sc2_p2----\u003eSc2_p2_s1[\"[sentence]\u003cbr/\u003e#quot;No Person shall…#quot;\"]:::dark_green\n  Sc2_p2_s1--\u003eSc2_p2_s1_w1[\"[word]\u003cbr/\u003e#quot;No#quot;\"]:::light_green\n  Sc2_p2_s1--\u003eSc2_p2_s1_w2[\"[word]\u003cbr/\u003e#quot;Person#quot;\"]:::light_green\n  Sc2_p2_s1--\u003eSc2_p2_s1_w3[\"[word]\u003cbr/\u003e#quot;shall#quot;\"]:::light_green\n  Sc2_p2_s1--\u003eSc2_p2_s1_w4[\"...\"]:::ellipsis\n\n  classDef dark_brown fill:#533E30,stroke:#000000,color:#FFFFFF;\n  classDef light_brown fill:#D2AC70,stroke:#000000,color:#000000;\n  classDef peach fill:#E4D1AE,stroke:#000000,color:#000000;\n  classDef dark_green fill:#517D3D,stroke:#000000,color:#FFFFFF;\n  classDef light_green fill:#90C246,stroke:#000000,color:#FFFFFF;\n\n  classDef ellipsis fill:#FFFFFF,stroke:#FFFFFF,color:#000000;\n```\n\nYou can then search your tree using plumule: a powerful structured query language:\n\n ```python\n'**[d:section]{**[d:word] \u0026 [lcs:power,right]}'  # Plumule query to find sections that containing words 'power' or 'right'\n ```\n\nTry out [this demo](docs/demos/us_constitution) yourself, which shows how easy it is to parse, visualize, and query the US Constitution using Pawpaw.\n\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\n\nPawpaw has extensive features and capabilities you can read about in the [Docs](/Docs).  As a quick example, say you have some text that would like to perform nlp-like segmentation on. \n\n```python\n\u003e\u003e\u003e s = 'nine 9 ten 10 eleven 11 TWELVE 12 thirteen 13'\n```\n\nYou can use a regular expression for segmentation as follows:\n\n```python\n\u003e\u003e\u003e import regex \n\u003e\u003e\u003e re = regex.compile(r'(?:(?P\u003cphrase\u003e(?P\u003cword\u003e(?P\u003cchar\u003e\\w)+) (?P\u003cnumber\u003e(?P\u003cdigit\u003e\\d)+))\\s*)+')\n```\n \nYou can then use this regex to feed **Pawpaw**:\n\n ```python\n\u003e\u003e\u003e import pawpaw \n\u003e\u003e\u003e doc = pawpaw.Ito.from_match(re.fullmatch(s))[0]\n ```\n\nWith this single line of code, Pawpaw generates a fully hierarchical, tree of phrases, words, chars, numbers, and digits.  You can visualize the tree:\n\n```python\n\u003e\u003e\u003e tree_vis = pawpaw.visualization.pepo.Tree()\n\u003e\u003e\u003e print(tree_vis.dumps(doc))\n(0, 45) '0' : 'nine 9 ten 10 eleven…ELVE 12 thirteen 13'\n├──(0, 6) 'phrase' : 'nine 9'\n│  ├──(0, 4) 'word' : 'nine'\n│  │  ├──(0, 1) 'char' : 'n'\n│  │  ├──(1, 2) 'char' : 'i'\n│  │  ├──(2, 3) 'char' : 'n'\n│  │  └──(3, 4) 'char' : 'e'\n│  └──(5, 6) 'number' : '9'\n│     └──(5, 6) 'digit' : '9'\n├──(7, 13) 'phrase' : 'ten 10'\n│  ├──(7, 10) 'word' : 'ten'\n│  │  ├──(7, 8) 'char' : 't'\n│  │  ├──(8, 9) 'char' : 'e'\n│  │  └──(9, 10) 'char' : 'n'\n│  └──(11, 13) 'number' : '10'\n│     ├──(11, 12) 'digit' : '1'\n│     └──(12, 13) 'digit' : '0'\n├──(14, 23) 'phrase' : 'eleven 11'\n│  ├──(14, 20) 'word' : 'eleven'\n│  │  ├──(14, 15) 'char' : 'e'\n│  │  ├──(15, 16) 'char' : 'l'\n│  │  ├──(16, 17) 'char' : 'e'\n│  │  ├──(17, 18) 'char' : 'v'\n│  │  ├──(18, 19) 'char' : 'e'\n│  │  └──(19, 20) 'char' : 'n'\n│  └──(21, 23) 'number' : '11'\n│     ├──(21, 22) 'digit' : '1'\n│     └──(22, 23) 'digit' : '1'\n├──(24, 33) 'phrase' : 'TWELVE 12'\n│  ├──(24, 30) 'word' : 'TWELVE'\n│  │  ├──(24, 25) 'char' : 'T'\n│  │  ├──(25, 26) 'char' : 'W'\n│  │  ├──(26, 27) 'char' : 'E'\n│  │  ├──(27, 28) 'char' : 'L'\n│  │  ├──(28, 29) 'char' : 'V'\n│  │  └──(29, 30) 'char' : 'E'\n│  └──(31, 33) 'number' : '12'\n│     ├──(31, 32) 'digit' : '1'\n│     └──(32, 33) 'digit' : '2'\n└──(34, 45) 'phrase' : 'thirteen 13'\n   ├──(34, 42) 'word' : 'thirteen'\n   │  ├──(34, 35) 'char' : 't'\n   │  ├──(35, 36) 'char' : 'h'\n   │  ├──(36, 37) 'char' : 'i'\n   │  ├──(37, 38) 'char' : 'r'\n   │  ├──(38, 39) 'char' : 't'\n   │  ├──(39, 40) 'char' : 'e'\n   │  ├──(40, 41) 'char' : 'e'\n   │  └──(41, 42) 'char' : 'n'\n   └──(43, 45) 'number' : '13'\n      ├──(43, 44) 'digit' : '1'\n      └──(44, 45) 'digit' : '3'\n```\n \nAnd you can search the tree using Pawpaw's *plumule*, a powerful XPATH-like structured query language:\n\n ```python\n \u003e\u003e\u003e print(*doc.find_all('**[d:digit]'), sep=', ')  # all digits\n9, 1, 0, 1, 1, 1, 2, 1, 3\n \u003e\u003e\u003e print(*doc.find_all('**[d:number]{\u003c/*[s:i]}'), sep=', ')  # all numbers with 'i' in their name\n9, 13\n ```\n\nThis example uses regular expressions as a source, however, Pawpaw is able to work with many other input types.  For example, you can use libraries such as [NLTK](https://www.nltk.org/) to grow Pawpaw trees, or, you can use Pawpaw's included parser framework to build your own sophisticated parsers quickly and easily.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n### Prerequisites\n\nPawpaw has been written and tested using Python 3.10.  The only dependency is\n``regex``, which will be fetched and installed automatically if you install Pawpaw\nwith pip or conda.\n\n### Installation Options\n\nThere are lots of ways to install Pawpaw.  Versioned instances that have passed all automated tests are available from [PyPI](https://pypi.org/project/pawpaw/):\n\n1. Install with pip from PyPI:  \n   ```\n   pip install pawpaw\n   ```\n   \n2. Install with conda from PyPI:\n   ```\n   conda activate myenv\n   conda install git pip\n   pip install pawpaw\n   ```\n\nAlternatively, you can pull from the main branch at GitHub.  This will ensure that you have the latest code, however, the main branch can potentially have internal inconsistencies and/or failed tests:\n\n1. Install with pip from GitHub:\n   ```\n   pip install git+https://github.com/rlayers/pawpaw.git\n   ```\n\n2. Install with conda from GitHub:\n   ```\n   conda activate myenv\n   conda install git pip\n   pip install git+https://github.com/rlayers/pawpaw.git\n   ```\n\n3. Clone the repo with git from GitHub:\n   ```\n   git clone https://github.com/rlayers/pawpaw\n   ```\n   \n### Verify Installation\n\nWhichever way you fetch Pawpaw, you can easily verify that it is installed correctly.  Just open Python prompt and type:\n\n```python\n\u003e\u003e\u003e from pawpaw import Ito\n\u003e\u003e\u003e Ito('Hello, World!')\nIto(span=(0, 13), desc='', substr='Hello, World!')\n```\n  \nIf your last line looks like this, you are up and running with Pawpaw!\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- HISTORY \u0026 ROADMAP --\u003e\n## History \u0026 Roadmap\n\nPawpaw is a rewrite of *desponia*, a now-deprecated Python 2.x segmentation framework that was itself based on a prior framework called *Ito*.  Currently in release-candidate status, many components and features are production ready.  However, documentation is still being written and some newer features are still undergoing work.  A rough outline of which components are finalized is as follows:\n\n- [x] arborform\n  - [x] itorator\n    - [x] Desc\n    - [x] Extract\n    - [x] Reflect\n    - [x] Split\n    - [x] ValueFunc\n  - [x] postorator\n    - [x] StackedReduce\n    - [x] WindowedJoin\n- [x] core\n  - [x] Errors\n  - [x] Infix\n  - [x] Ito\n  - [x] ItoChildren\n  - [x] nuco\n  - [x] Span\n  - [x] Types\n- [ ] documentation \u0026 examples\n- [x] query\n  - [x] radicle query engine\n  - [x] plumule\n- [ ] nlp\n- [x] visualization\n  - [x] ascibox\n  - [x] highlighter\n  - [x] pepo\n  - [x] sgr\n- [x] xml\n  - [x] XmlHelper\n  - [x] XmlParser\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- DONATIONS --\u003e\n## Donations\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"30%\"\u003e\u003cimg align=\"right\" alt=\"White bowl full of pawpaws\" src=\"https://raw.githubusercontent.com/rlayers/pawpaw/master/images/Bowl of Pawpaws.jpg\" /\u003e\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;\"\u003ePawpaw is distributed under the MIT License and is free to use, however, should you wish to help support the continued development of Pawpaw, you may do so via:\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \n|  Link   | QR Code |\n| :-----: | :-----: | \n| [![](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/donate/?hosted_button_id=ALXFKLFU8W2NE) | \u003cimg align=\"right\" width=\"100%\" height=\"100%\" alt=\"Paypal QR Code\" border=\"1\" src=\"https://raw.githubusercontent.com/rlayers/pawpaw/master/images/Paypal QR Code.png\" /\u003e  |\n\n\u003c/div\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the MIT License. See [LICENSE](LICENSE) for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTACTS --\u003e\n## Contacts\n\nRobert L. Ayers:\u0026nbsp;\u0026nbsp;\u003ca alt=\"e-mail\" href=\"email@a.nov.guy@gmail.com\"\u003ea.nov.guy@gmail.com\u003c/a\u003e\n\u003c!-- \u0026nbsp;\u0026nbsp;\u0026nbsp;[☕ Buy me a coffee](https://ko-fi.com/jlawrence) --\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- REFERENCES --\u003e\n## References\n\n* [Matthew Barnett's regex](https://github.com/mrabarnett/mrab-regex)\n* [NLTK](https://www.nltk.org/)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n\u003c!-- Palette Info:\n  \"Oriental Beauty\"\n  533E30\tD2AC70\tE4D1AE\t517D3D\t90C246\n  https://www.schemecolor.com/oriental-beauty-color-combination.php\n--\u003e\n\n[repo]: https://github.com/rlayers/pawpaw\n\n[byline-img]: https://img.shields.io/badge/-High%20Performance%20Text%20Segmentation%2C%20Parsing%2C%20%26%20Query-FFFFFF\n\n[byline2-img]: https://readme-typing-svg.demolab.com?font=Fira+Code\u0026weight=800\u0026duration=500\u0026pause=1500\u0026color=533E30\u0026vCenter=true\u0026width=375\u0026height=25\u0026lines=High+Performance+Text+Segmentation\n\n[Python-shield]: https://img.shields.io/badge/python-≥3.10-517D3D.svg?style=flat\n[Python-url]: https://www.python.org\n\n[contributors-shield]: https://img.shields.io/github/contributors/rlayers/pawpaw.svg?color=90C246\u0026style=flat\n[contributors-url]: https://github.com/rlayers/pawpaw/graphs/contributors\n\n[watchers-shield]: https://img.shields.io/github/watchers/rlayers/pawpaw.svg?color=E4D1AE\u0026style=flat\n[watchers-url]: https://github.com/rlayers/pawpaw/watchers\n\n[issues-shield]: https://img.shields.io/github/issues/rlayers/pawpaw.svg?style=flat\n[issues-url]: https://github.com/rlayers/pawpaw/issues\n\n[forks-social]: https://img.shields.io/github/forks/rlayers/pawpaw.svg?style=social\n[forks-shield]: https://img.shields.io/github/forks/rlayers/pawpaw.svg?color=D2AC70\u0026style=flat\n[forks-url]: https://github.com/rlayers/pawpaw/network/members\n\n[license-shield]: https://img.shields.io/github/license/rlayers/pawpaw.svg?color=533E30\u0026style=flat\n[license-url]: https://github.com/rlayers/pawpaw/blob/master/LICENSE\n\n[stars-social]: https://img.shields.io/github/stars/rlayers/pawpaw.svg?style=social\n[stars-shield]: https://img.shields.io/github/stars/rlayers/pawpaw.svg?style=flat\n[stars-url]: https://github.com/rlayers/pawpaw/stargazers\n\n[PyCharm-shield]: https://img.shields.io/badge/PyCharm-000000.svg?\u0026style=flat\u0026logo=PyCharm\u0026logoColor=white\n[PyCharm-url]: https://www.jetbrains.com/pycharm/\n","funding_links":["https://www.paypal.com/donate/?hosted_button_id=ALXFKLFU8W2NE","https://ko-fi.com/jlawrence"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlayers%2Fpawpaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frlayers%2Fpawpaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlayers%2Fpawpaw/lists"}