├── .gitignore ├── .python-version ├── .travis.yml ├── LICENSE ├── README.md ├── _config.yml ├── assets ├── frankenstein_haiku.json ├── gutenhaiku.gif └── header.png ├── gutenhaiku ├── __init__.py ├── app.py ├── cleaner.py ├── download.py ├── models │ ├── __init__.py │ └── params ├── pipeline.py └── utils.py ├── noxfile.py ├── poetry.lock ├── pyproject.toml └── tests ├── app_setup.txt ├── app_setup_already_downloaded.txt ├── app_splash.txt ├── input_text.txt └── test_all.py /.gitignore: -------------------------------------------------------------------------------- 1 | books 2 | .env 3 | .vscode 4 | haiku.json 5 | gutenhaiku/models/checkpoint 6 | gutenhaiku/models/params### macOS ### 7 | # General 8 | .DS_Store 9 | .AppleDouble 10 | .LSOverride 11 | 12 | # Icon must end with two \r 13 | Icon 14 | 15 | # Thumbnails 16 | ._* 17 | 18 | # Files that might appear in the root of a volume 19 | .DocumentRevisions-V100 20 | .fseventsd 21 | .Spotlight-V100 22 | .TemporaryItems 23 | .Trashes 24 | .VolumeIcon.icns 25 | .com.apple.timemachine.donotpresent 26 | 27 | # Directories potentially created on remote AFP share 28 | .AppleDB 29 | .AppleDesktop 30 | Network Trash Folder 31 | Temporary Items 32 | .apdisk 33 | 34 | ### Python ### 35 | # Byte-compiled / optimized / DLL files 36 | __pycache__/ 37 | *.py[cod] 38 | *$py.class 39 | 40 | # C extensions 41 | *.so 42 | 43 | # Distribution / packaging 44 | .Python 45 | build/ 46 | develop-eggs/ 47 | dist/ 48 | downloads/ 49 | eggs/ 50 | .eggs/ 51 | lib/ 52 | lib64/ 53 | parts/ 54 | sdist/ 55 | var/ 56 | wheels/ 57 | pip-wheel-metadata/ 58 | share/python-wheels/ 59 | *.egg-info/ 60 | .installed.cfg 61 | *.egg 62 | MANIFEST 63 | 64 | # PyInstaller 65 | # Usually these files are written by a python script from a template 66 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 67 | *.manifest 68 | *.spec 69 | 70 | # Installer logs 71 | pip-log.txt 72 | pip-delete-this-directory.txt 73 | 74 | # Unit test / coverage reports 75 | htmlcov/ 76 | .tox/ 77 | .nox/ 78 | .coverage 79 | .coverage.* 80 | .cache 81 | nosetests.xml 82 | coverage.xml 83 | *.cover 84 | .hypothesis/ 85 | .pytest_cache/ 86 | 87 | # Translations 88 | *.mo 89 | *.pot 90 | 91 | # Scrapy stuff: 92 | .scrapy 93 | 94 | # Sphinx documentation 95 | docs/_build/ 96 | 97 | # PyBuilder 98 | target/ 99 | 100 | # pipenv 101 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 102 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 103 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 104 | # install all needed dependencies. 105 | #Pipfile.lock 106 | 107 | # celery beat schedule file 108 | celerybeat-schedule 109 | 110 | # SageMath parsed files 111 | *.sage.py 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # Mr Developer 121 | .mr.developer.cfg 122 | .project 123 | .pydevproject 124 | 125 | # mkdocs documentation 126 | /site 127 | 128 | # mypy 129 | .mypy_cache/ 130 | .dmypy.json 131 | dmypy.json 132 | 133 | # Pyre type checker 134 | .pyre/ 135 | 136 | # End of https://www.gitignore.io/api/macos,python 137 | 138 | .vscode 139 | .venv -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.7.5 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | dist: xenial 4 | 5 | matrix: 6 | include: 7 | - python: '3.7' 8 | env: NOXSESSION="test-3.7" 9 | - python: '3.7' 10 | env: NOXSESSION="lint" 11 | 12 | before_install: 13 | - pip install --upgrade pip 14 | - pip install poetry 15 | 16 | install: 17 | - poetry install 18 | 19 | script: 20 | - poetry run nox --non-interactive --session "$NOXSESSION" 21 | 22 | branches: 23 | only: 24 | - master 25 | 26 | notifications: 27 | email: false -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 sloev 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Guten Haiku 4 | 5 | [![Build Status](https://travis-ci.org/sloev/gutenhaiku.svg?branch=master)](https://travis-ci.org/sloev/gutenhaiku) [![Latest Version](https://img.shields.io/pypi/v/gutenhaiku.svg)](https://pypi.python.org/pypi/gutenhaiku) [![Python Support](https://img.shields.io/pypi/pyversions/gutenhaiku.svg)](https://pypi.python.org/pypi/gutenhaiku) 6 | 7 | Buy Me A Coffee 8 | 9 | A Commandline tool to mine haiku poems from text 10 | 11 | * 80's cli interface with **colors** 12 | * Works great with gutenberg books thx to a builtin cleaner script from [Peyman Mohseni Kiasari](https://github.com/kiasar/gutenberg_cleaner) 13 | * Reconstructs punctuation of haikus using [deepcorrect](https://github.com/bedapudi6788/deepcorrect) 14 | * Appends json haiku's to a file 15 | 16 | ## Install 17 | 18 | ```bash 19 | $ pip install gutenhaiku 20 | ``` 21 | 22 | Then you need to download the models in cache: 23 | 24 | ```bash 25 | $ gutenhaiku setup 26 | ``` 27 | 28 | ## Usage 29 | 30 | ```bash 31 | $ gutenhaiku -f frankenstein.txt -a 'mary shelley' -t 'frankenstein' -d '1818-01-01' 32 | ``` 33 | 34 | 35 | 36 | ```bash 37 | Wat? Guten Haiku lets you extract haiku poems from text 38 | Usage: gutenhaiku \ 39 | -f frankenstein.txt \ 40 | -a 'Mary Wollstonecraft Shelley' \ 41 | -t 'frankenstein' \ 42 | -d '1818-01-01' 43 | Optional params: --commandfile [-cf] a file with comma seperated 44 | values for f,a,t,d params 45 | --outputfile [-o] the output file path [default haiku.json 46 | --eighties [-e] eighties mode [default 1] 47 | 48 | Advanced usage: gutenhaiku \ 49 | -f frankenstein.txt \ 50 | -a 'Mary Wollstonecraft Shelley' \ 51 | -t 'frankenstein' \ 52 | -d '1818-01-01' \ 53 | -f dracula.txt \ 54 | -a 'Bram Stoker' \ 55 | -t 'dracula' \ 56 | -d '1897-05-26' 57 | 58 | setup: gutenhaiku setup 59 | downloads AI models 60 | 61 | ``` 62 | 63 | ### Output format 64 | 65 | *example from [assets](assets/frankenstein_haiku.json)* 66 | ```json 67 | { 68 | "page": 261, 69 | "word_number": 65407, 70 | "haiku": [ 71 | "He pointed towards.", 72 | "The corpse of my wife I rushed.", 73 | "Towards the window." 74 | ], 75 | "author": "mary shelley", 76 | "title": "frankenstein", 77 | "date": "1818-01-01T00:00:00" 78 | } 79 | ``` 80 | 81 | ## Dev 82 | 83 | Run tests with 84 | 85 | ```bash 86 | $ poetry run nox 87 | ``` 88 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-hacker -------------------------------------------------------------------------------- /assets/frankenstein_haiku.json: -------------------------------------------------------------------------------- 1 | {"page": 19, "word_number": 4846, "haiku": ["Friend ought to be do.", "Our weak and faulty natures I.", "Once had a friend the."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 2 | {"page": 42, "word_number": 10527, "haiku": ["Late We could not tear.", "Ourselves away from each other.", "Nor persuade ourselves."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 3 | {"page": 64, "word_number": 16149, "haiku": ["Thousand florins a year.", "Without Greek I eat heartily.", "Without Greek But his."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 4 | {"page": 69, "word_number": 17414, "haiku": ["Not being able to.", "It myself I figure to.", "Myself that the task."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 5 | {"page": 95, "word_number": 23955, "haiku": ["The advocate against.", "Strange facts combined against her which.", "Anyone who had not."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 6 | {"page": 96, "word_number": 24028, "haiku": ["Returned a confused.", "And Unintelligible.", "Answer She returned."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 7 | {"page": 101, "word_number": 25346, "haiku": ["All judges had rather that.", "Ten innocent should suffer.", "Than that one guilty should."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 8 | {"page": 114, "word_number": 28633, "haiku": ["That overhangs it Soon.", "I entered the valley of.", "Chamounix This valley is."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 9 | {"page": 115, "word_number": 28828, "haiku": ["Myself or in A.", "More desperate fashion I.", "And threw myself on."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 10 | {"page": 145, "word_number": 36267, "haiku": ["Before this change seemed.", "For Gods, which so short a time.", "Before was bleak damp."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 11 | {"page": 220, "word_number": 55045, "haiku": ["But revenge remains.", "Revenge Henceforth Dearer than.", "Light or food I may."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 12 | {"page": 261, "word_number": 65407, "haiku": ["He pointed towards.", "The corpse of my wife I rushed.", "Towards the window."], "author": "mary shelley", "title": "frankenstein", "date": "1818-01-01T00:00:00"} 13 | -------------------------------------------------------------------------------- /assets/gutenhaiku.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sloev/gutenhaiku/7225322e11ebfe4852c9e6c1a1ebc493c961ffb7/assets/gutenhaiku.gif -------------------------------------------------------------------------------- /assets/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sloev/gutenhaiku/7225322e11ebfe4852c9e6c1a1ebc493c961ffb7/assets/header.png -------------------------------------------------------------------------------- /gutenhaiku/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sloev/gutenhaiku/7225322e11ebfe4852c9e6c1a1ebc493c961ffb7/gutenhaiku/__init__.py -------------------------------------------------------------------------------- /gutenhaiku/app.py: -------------------------------------------------------------------------------- 1 | import random 2 | import time 3 | import json 4 | import click 5 | from click.exceptions import UsageError 6 | 7 | from colorama.ansi import Fore, Back, Style, clear_line, Cursor, clear_screen, set_title 8 | from gutenhaiku import models, download 9 | 10 | magenta = Style.BRIGHT + Fore.MAGENTA 11 | yellow = Style.BRIGHT + Fore.YELLOW 12 | green = Style.BRIGHT + Fore.GREEN 13 | red = Style.BRIGHT + Fore.RED 14 | 15 | 16 | def format_haiku_json( 17 | author, title, date, haiku, page=None, left_padding=10, **kwargs_dump 18 | ): 19 | return ( 20 | green 21 | + "author: ".rjust(left_padding) 22 | + f"{yellow}{author}\n" 23 | + green 24 | + "title: ".rjust(left_padding) 25 | + f"{yellow}{title}\n" 26 | + green 27 | + "date: ".rjust(left_padding) 28 | + f"{yellow}{date}\n" 29 | + green 30 | + ("page: ".rjust(left_padding) + f"{yellow}{page}\n" if page else "") 31 | + green 32 | + "haiku: ".rjust(left_padding) 33 | + f"{magenta}{haiku[0]}\n" 34 | + (" " * left_padding) 35 | + f"{magenta}{haiku[1]}\n" 36 | + (" " * left_padding) 37 | + f"{magenta}{haiku[2]}\n" 38 | + Style.RESET_ALL 39 | + green 40 | ) 41 | 42 | 43 | nice_things_to_say = [ 44 | "what a nice book!", 45 | "I remember reading that one when i was little, great book!", 46 | "WAT! where did you find that one!", 47 | "Oh yeah, one of the best!", 48 | "Great choice!", 49 | ] 50 | 51 | LOGO = ( 52 | Style.BRIGHT 53 | + green 54 | + "\n" 55 | + " .| \n" 56 | " | | \n" 57 | " |'| ._____ \n" 58 | " ___ | | |. |' .----|\n" 59 | " _ .-' '-. | | .--'| || | _| |\n" 60 | " .-'| _.| | || '-__ | | | || |\n" 61 | " |' | |. | || | | | | || |\n" 62 | " | '-' ' " 63 | " '-' '-.' '` |\n" 64 | " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" 65 | "\n" + yellow + " ██████╗ ██╗ ██╗████████╗███████╗███╗ ██╗\n" 66 | " ██╔════╝ ██║ ██║╚══██╔══╝██╔════╝████╗ ██║\n" 67 | " ██║ ███╗██║ ██║ ██║ █████╗ ██╔██╗ ██║\n" 68 | " ██║ ██║██║ ██║ ██║ ██╔══╝ ██║╚██╗██║\n" 69 | " ╚██████╔╝╚██████╔╝ ██║ ███████╗██║ ╚████║\n" 70 | " ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝\n" 71 | "\n" + magenta + " ██╗ ██╗ █████╗ ██╗██╗ ██╗██╗ ██╗\n" 72 | " ██║ ██║██╔══██╗██║██║ ██╔╝██║ ██║\n" 73 | " ███████║███████║██║█████╔╝ ██║ ██║\n" 74 | " ██╔══██║██╔══██║██║██╔═██╗ ██║ ██║\n" 75 | " ██║ ██║██║ ██║██║██║ ██╗╚██████╔╝\n" 76 | " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝ \n" 77 | f"\n {green}by {magenta}Sloev" + "\n" * 5 78 | ) 79 | 80 | USAGE = ( 81 | "\n" 82 | + green 83 | + "Wat?".ljust(17) 84 | + magenta 85 | + f"Guten Haiku {yellow}lets you extract haiku poems from text" 86 | "\n" 87 | + green 88 | + "Usage: ".ljust(17) 89 | + yellow 90 | + f"{magenta}gutenhaiku{yellow} \\\n" 91 | + " -f frankenstein.txt \\\n" 92 | + " -a 'Mary Wollstonecraft Shelley' \\\n" 93 | + " -t 'frankenstein' \\\n" 94 | + " -d '1818-01-01'" 95 | + "\n" 96 | + green 97 | + f"Optional params: {magenta}--commandfile " 98 | + f"{yellow}[-cf] a file with comma seperated \n" 99 | + " values for f,a,t,d params\n" 100 | + f" {magenta}--outputfile " 101 | + f"{yellow} [-o] the output file path [default haiku.json\n" 102 | + f" {magenta}--eighties " 103 | + f"{yellow} [-e] eighties mode [default 1]" 104 | + green 105 | + "\n\n" 106 | + f"Advanced usage: {magenta}gutenhaiku{yellow} \\\n" 107 | + " -f frankenstein.txt \\\n" 108 | + " -a 'Mary Wollstonecraft Shelley' \\\n" 109 | + " -t 'frankenstein' \\\n" 110 | + " -d '1818-01-01' \\\n" 111 | + " -f dracula.txt \\\n" 112 | + " -a 'Bram Stoker' \\\n" 113 | + " -t 'dracula' \\\n" 114 | + " -d '1897-05-26'\n\n" 115 | + green 116 | + f"setup: {magenta}gutenhaiku{yellow} setup\n" 117 | + green 118 | + " downloads AI models\n" 119 | + green 120 | ) 121 | 122 | 123 | def loading_sequence(*items): 124 | click.echo(clear_screen()) 125 | 126 | for label, splash in items: 127 | click.echo(green) 128 | 129 | if label is not None: 130 | with click.progressbar(label=label, length=10) as bar: 131 | for i in range(10): 132 | bar.update(i) 133 | time.sleep(1.0 - (i * 0.1)) 134 | click.echo(clear_screen()) 135 | for line in splash.splitlines(): 136 | click.echo(line) 137 | time.sleep(0.05) 138 | 139 | 140 | @click.group(invoke_without_command=True) 141 | @click.pass_context 142 | @click.option("--eighties", "-e", type=bool, default=True) 143 | @click.option("--commandfile", "-cf", type=click.File("rb"), default=None) 144 | @click.option("--outputfile", "-o", type=click.File("a"), default="haiku.json") 145 | @click.option("--file", "-f", type=click.File("r"), multiple=True) 146 | @click.option("--author", "-a", type=str, multiple=True) 147 | @click.option("--title", "-t", type=str, multiple=True) 148 | @click.option("--date", "-d", type=click.DateTime(), multiple=True) 149 | def cli(ctx, eighties, commandfile, outputfile, file, author, title, date): 150 | """Simple program that greets NAME for a total of COUNT times.""" 151 | click.echo(set_title("Guten Haiku"), nl=False) 152 | if ctx.invoked_subcommand is None: 153 | if not (commandfile or file): 154 | if eighties: 155 | loading_sequence(("Loading Guten Haiku", LOGO), (None, USAGE)) 156 | else: 157 | click.echo(USAGE) 158 | exit(0) 159 | if not models.MODELS_ARE_DOWNLOADED: 160 | click.echo(f"{red}models are not downloaded, run {magenta}gutenhaiku setup") 161 | exit(1) 162 | if not (len(file) == len(author) == len(title) == len(date)): 163 | click.echo(f"{red}bad args: -f, -a, -t, -d needs to be same amount") 164 | exit(1) 165 | if eighties: 166 | loading_sequence(("Loading Guten Haiku", LOGO)) 167 | 168 | click.echo( 169 | magenta 170 | + f"\n Now processing {len(file)} {'books' if len(file)>1 else 'book'}\n" 171 | f" Starting with {yellow}{title[0]} {magenta}by {yellow}{author[0]}{magenta}\n" 172 | f" {random.choice(nice_things_to_say)}\n" 173 | f"{green} We start by doing some loading of {magenta}fancy AI models{green}", 174 | nl=False, 175 | ) 176 | for i in range(1, 9, 4): 177 | time.sleep(i / 4.0) 178 | click.echo(".", nl=False) 179 | 180 | from gutenhaiku import pipeline 181 | 182 | if eighties: 183 | click.echo(".", nl=False) 184 | time.sleep(0.2) 185 | 186 | click.echo( 187 | f"\n{green} Now we are ready to scan through the book, enjoy!\n" 188 | ) 189 | 190 | for f, a, t, d in zip(file, author, title, date): 191 | for data in pipeline.process_generator( 192 | f.read(), progress_bar=click.progressbar 193 | ): 194 | data["author"] = a 195 | data["title"] = t 196 | data["date"] = d.isoformat() 197 | if eighties: 198 | click.echo(clear_line()) 199 | click.echo(format_haiku_json(**data)) 200 | outputfile.write(json.dumps(data) + "\n") 201 | 202 | click.echo(clear_line()) 203 | if eighties: 204 | click.echo(f"\n{green} All done, have a great day!\n") 205 | 206 | 207 | def show_help(*args, **kwargs): 208 | click.echo(LOGO) 209 | click.echo(USAGE) 210 | try: 211 | self = args[0] 212 | click.echo(red + f"Error: {self.format_message()}") 213 | except: 214 | logging.exception("fuck") 215 | pass 216 | 217 | 218 | UsageError.show = show_help 219 | cli.get_help = show_help 220 | 221 | 222 | @cli.command() 223 | def help(): 224 | show_help() 225 | 226 | 227 | @cli.command() 228 | @click.option("--eighties", "-e", type=bool, default=True) 229 | def setup(eighties): 230 | if eighties: 231 | loading_sequence(("Loading Guten Haiku", LOGO)) 232 | if models.MODELS_ARE_DOWNLOADED: 233 | click.echo(green + "Models are already downloaded, exiting") 234 | exit(0) 235 | 236 | click.echo(green + "Downloading models") 237 | download.download_models(click.progressbar) 238 | click.echo(clear_line()) 239 | click.echo(green + "Done") 240 | 241 | 242 | if __name__ == "__main__": 243 | cli() 244 | -------------------------------------------------------------------------------- /gutenhaiku/cleaner.py: -------------------------------------------------------------------------------- 1 | """ 2 | from: 3 | https://github.com/kiasar/gutenberg_cleaner/blob/master/LICENSE.md 4 | 5 | MIT License 6 | 7 | Copyright (c) 2019 Peyman Mohseni Kiasari 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 14 | """ 15 | 16 | from __future__ import absolute_import, unicode_literals 17 | from builtins import str 18 | import os 19 | 20 | TEXT_START_MARKERS = frozenset( 21 | ( 22 | "*END*THE SMALL PRINT", 23 | "*** START OF THE PROJECT GUTENBERG", 24 | "*** START OF THIS PROJECT GUTENBERG", 25 | "This etext was prepared by", 26 | "E-text prepared by", 27 | "Produced by", 28 | "Distributed Proofreading Team", 29 | "Proofreading Team at http://www.pgdp.net", 30 | "http://gallica.bnf.fr)", 31 | " http://archive.org/details/", 32 | "http://www.pgdp.net", 33 | "by The Internet Archive)", 34 | "by The Internet Archive/Canadian Libraries", 35 | "by The Internet Archive/American Libraries", 36 | "public domain material from the Internet Archive", 37 | "Internet Archive)", 38 | "Internet Archive/Canadian Libraries", 39 | "Internet Archive/American Libraries", 40 | "material from the Google Print project", 41 | "*END THE SMALL PRINT", 42 | "***START OF THE PROJECT GUTENBERG", 43 | "This etext was produced by", 44 | "*** START OF THE COPYRIGHTED", 45 | "The Project Gutenberg", 46 | "http://gutenberg.spiegel.de/ erreichbar.", 47 | "Project Runeberg publishes", 48 | "Beginning of this Project Gutenberg", 49 | "Project Gutenberg Online Distributed", 50 | "Gutenberg Online Distributed", 51 | "the Project Gutenberg Online Distributed", 52 | "Project Gutenberg TEI", 53 | "This eBook was prepared by", 54 | "http://gutenberg2000.de erreichbar.", 55 | "This Etext was prepared by", 56 | "This Project Gutenberg Etext was prepared by", 57 | "Gutenberg Distributed Proofreaders", 58 | "Project Gutenberg Distributed Proofreaders", 59 | "the Project Gutenberg Online Distributed Proofreading Team", 60 | "**The Project Gutenberg", 61 | "*SMALL PRINT!", 62 | "More information about this book is at the top of this file.", 63 | "tells you about restrictions in how the file may be used.", 64 | "l'authorization à les utilizer pour preparer ce texte.", 65 | "of the etext through OCR.", 66 | "*****These eBooks Were Prepared By Thousands of Volunteers!*****", 67 | "We need your donations more than ever!", 68 | " *** START OF THIS PROJECT GUTENBERG", 69 | "**** SMALL PRINT!", 70 | '["Small Print" V.', 71 | " (http://www.ibiblio.org/gutenberg/", 72 | "and the Project Gutenberg Online Distributed Proofreading Team", 73 | "Mary Meehan, and the Project Gutenberg Online Distributed Proofreading", 74 | " this Project Gutenberg edition.", 75 | ) 76 | ) 77 | 78 | TEXT_END_MARKERS = frozenset( 79 | ( 80 | "*** END OF THE PROJECT GUTENBERG", 81 | "*** END OF THIS PROJECT GUTENBERG", 82 | "***END OF THE PROJECT GUTENBERG", 83 | "End of the Project Gutenberg", 84 | "End of The Project Gutenberg", 85 | "Ende dieses Project Gutenberg", 86 | "by Project Gutenberg", 87 | "End of Project Gutenberg", 88 | "End of this Project Gutenberg", 89 | "Ende dieses Projekt Gutenberg", 90 | " ***END OF THE PROJECT GUTENBERG", 91 | "*** END OF THE COPYRIGHTED", 92 | "End of this is COPYRIGHTED", 93 | "Ende dieses Etextes ", 94 | "Ende dieses Project Gutenber", 95 | "Ende diese Project Gutenberg", 96 | "**This is a COPYRIGHTED Project Gutenberg Etext, Details Above**", 97 | "Fin de Project Gutenberg", 98 | "The Project Gutenberg Etext of ", 99 | "Ce document fut presente en lecture", 100 | "Ce document fut présenté en lecture", 101 | "More information about this book is at the top of this file.", 102 | "We need your donations more than ever!", 103 | "END OF PROJECT GUTENBERG", 104 | " End of the Project Gutenberg", 105 | " *** END OF THIS PROJECT GUTENBERG", 106 | ) 107 | ) 108 | 109 | LEGALESE_START_MARKERS = frozenset(("<= 100: 149 | # Check if the footer begins here 150 | if any(line.startswith(token) for token in TEXT_END_MARKERS): 151 | footer_found = True 152 | 153 | # If it's the beginning of the footer, stop output 154 | if footer_found: 155 | break 156 | 157 | if any(line.startswith(token) for token in LEGALESE_START_MARKERS): 158 | ignore_section = True 159 | continue 160 | elif any(line.startswith(token) for token in LEGALESE_END_MARKERS): 161 | ignore_section = False 162 | continue 163 | 164 | if not ignore_section: 165 | out.append(line.rstrip(sep)) 166 | i += 1 167 | 168 | return sep.join(out) 169 | -------------------------------------------------------------------------------- /gutenhaiku/download.py: -------------------------------------------------------------------------------- 1 | import os 2 | import time 3 | from gutenhaiku import models, utils 4 | import requests 5 | from spacy import cli as spacy_cli 6 | 7 | LINKS = dict( 8 | params="https://github.com/sloev/gutenhaiku/releases/download/models.v.1.0.0/deeppunct_params_en", 9 | checkpoint="https://github.com/sloev/gutenhaiku/releases/download/models.v.1.0.0/deeppunct_checkpoint_google_news", 10 | ) 11 | 12 | 13 | def download_models(click_progress_bar=None): 14 | with utils.supress_output(): 15 | spacy_cli.download( 16 | "en_core_web_sm", False, "--quiet", "--disable-pip-version-check" 17 | ) 18 | 19 | for what, url in LINKS.items(): 20 | response = requests.get(url, stream=True) 21 | total = int(response.headers.get("content-length")) 22 | filename = models.MODEL_PATHS[what] 23 | 24 | with click_progress_bar( 25 | length=total, label=f"Downloading {what} file from Github" 26 | ) as bar, open(filename, "wb") as f: 27 | time.sleep(0.2) 28 | downloaded = 0 29 | for data in response.iter_content( 30 | chunk_size=max(int(total / 1000), 1024 * 1024) 31 | ): 32 | downloaded += len(data) 33 | f.write(data) 34 | bar.update(downloaded) 35 | -------------------------------------------------------------------------------- /gutenhaiku/models/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | MODEL_DIR = os.path.split(os.path.abspath(__file__))[0] 4 | 5 | MODEL_PATHS = dict(params=f"{MODEL_DIR}/params", checkpoint=f"{MODEL_DIR}/checkpoint") 6 | 7 | MODELS_ARE_DOWNLOADED = all(os.path.isfile(path) for path in MODEL_PATHS.values()) 8 | -------------------------------------------------------------------------------- /gutenhaiku/models/params: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sloev/gutenhaiku/7225322e11ebfe4852c9e6c1a1ebc493c961ffb7/gutenhaiku/models/params -------------------------------------------------------------------------------- /gutenhaiku/pipeline.py: -------------------------------------------------------------------------------- 1 | import os 2 | import logging 3 | import json 4 | import silence_tensorflow.auto 5 | 6 | import sys 7 | import spacy 8 | from spacy_syllables import SpacySyllables 9 | from collections import defaultdict, Counter 10 | from gutenhaiku.cleaner import strip_headers 11 | from gutenhaiku import models 12 | from gutenhaiku import utils 13 | 14 | 15 | with utils.supress_output(): 16 | from deepcorrect import DeepCorrect 17 | 18 | corrector = DeepCorrect( 19 | models.MODEL_PATHS["params"], models.MODEL_PATHS["checkpoint"] 20 | ) 21 | 22 | 23 | nlp = spacy.load("en_core_web_sm") 24 | 25 | syllables = SpacySyllables(nlp) 26 | 27 | nlp.add_pipe(syllables, after="tagger") 28 | 29 | IGNORE_POS = set(["SPACE", "PUNCT"]) 30 | REPLACE_CHARACTERS = str.maketrans({key: None for key in "!\"';?_-0123456789"}) 31 | 32 | 33 | def process_generator(text, progress_bar): 34 | CURRENT_HAIKU = defaultdict(list) 35 | ALLOWED_SUMS = [5, 7, 5] 36 | CURRENT_LINE = 0 37 | 38 | text = strip_headers(text, progress_bar=progress_bar) 39 | 40 | def generate_tokens(): 41 | for doc in nlp.pipe(text.splitlines(), disable=["ner"]): 42 | for token in doc: 43 | yield token 44 | 45 | word_number = 0 46 | with progress_bar(generate_tokens()) as gen: 47 | for index, token in enumerate(gen): 48 | 49 | if token.pos_ in IGNORE_POS: 50 | continue 51 | 52 | word_number += 1 53 | 54 | CURRENT_HAIKU[CURRENT_LINE].append(token) 55 | syllables_sum = sum( 56 | [ 57 | c 58 | for c in (t._.syllables_count for t in CURRENT_HAIKU[CURRENT_LINE]) 59 | if c is not None 60 | ] 61 | ) 62 | 63 | if syllables_sum > ALLOWED_SUMS[CURRENT_LINE]: 64 | CURRENT_HAIKU[CURRENT_LINE].pop(0) 65 | elif syllables_sum == ALLOWED_SUMS[CURRENT_LINE]: 66 | CURRENT_LINE += 1 67 | if CURRENT_LINE > 2: 68 | has_same_word_in_same_line = any( 69 | any(c > 1 for c in Counter([w.text for w in l]).values()) 70 | for l in CURRENT_HAIKU.values() 71 | ) 72 | if has_same_word_in_same_line: 73 | logging.debug("has_same_word_in_same_line") 74 | else: 75 | word_counts = Counter( 76 | [w.text for l in CURRENT_HAIKU.values() for w in l] 77 | ) 78 | has_repetition = any( 79 | count > 1 and len(word) > 5 80 | for word, count in word_counts.items() 81 | ) 82 | 83 | if has_repetition: 84 | haiku_lines = [ 85 | " ".join(t.text for t in l) for l in CURRENT_HAIKU.values() 86 | ] 87 | 88 | final_haiku = [] 89 | for haiku_line in haiku_lines: 90 | try: 91 | corrected_line = corrector.correct(haiku_line)[0][ 92 | "sequence" 93 | ] 94 | final_haiku.append(corrected_line) 95 | continue 96 | except KeyError: 97 | pass 98 | 99 | final_haiku.append(haiku_line) 100 | 101 | haiku = "\n".join(final_haiku) 102 | 103 | try: 104 | len_without_ignored_chars = len( 105 | haiku.translate(REPLACE_CHARACTERS) 106 | ) 107 | assert len_without_ignored_chars == len(haiku) 108 | page = int(word_number / 250.0) 109 | data = { 110 | "page": page, 111 | "word_number": word_number, 112 | "haiku": final_haiku, 113 | } 114 | yield data 115 | except AssertionError: 116 | logging.debug(f"haiku has bad chars: {haiku}") 117 | 118 | CURRENT_HAIKU.clear() 119 | CURRENT_LINE = 0 120 | 121 | 122 | if __name__ == "__main__": 123 | import sys 124 | 125 | for filename in sys.argv[1:]: 126 | process(filename) 127 | -------------------------------------------------------------------------------- /gutenhaiku/utils.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import contextlib 4 | import warnings 5 | 6 | 7 | @contextlib.contextmanager 8 | def supress_output(): 9 | with warnings.catch_warnings(): 10 | warnings.filterwarnings("ignore", category=FutureWarning) 11 | import tensorflow as tf 12 | from tensorflow import keras 13 | from tensorflow.keras.preprocessing.text import Tokenizer 14 | 15 | err = None 16 | stderr = sys.stderr 17 | stdout = sys.stdout 18 | try: 19 | 20 | sys.stderr = open(os.devnull, "w") 21 | sys.stdout = open(os.devnull, "w") 22 | yield 23 | except Exception as e: 24 | err = e 25 | finally: 26 | sys.stdout = stdout 27 | sys.stderr = stderr 28 | 29 | if err: 30 | raise err 31 | -------------------------------------------------------------------------------- /noxfile.py: -------------------------------------------------------------------------------- 1 | """ 2 | for info on how to run nox together with pyenv see: 3 | https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/MAC_SETUP.md#using-pyenv-virtualenv 4 | """ 5 | 6 | import nox 7 | 8 | nox.options.sessions = [ 9 | "lint", 10 | "test", 11 | ] 12 | 13 | 14 | @nox.session(python=False) 15 | def install_pyenv_versions(session): 16 | session.run("pyenv", "install", "-s", "3.7.5", external=True, silent=True) 17 | 18 | 19 | @nox.session(python=["3.7"], reuse_venv=True) 20 | def test(session): 21 | session.run("gutenhaiku", "setup", external=True) 22 | session.run("pytest", "tests") 23 | 24 | 25 | @nox.session(python=["3.7"], reuse_venv=True) 26 | def lint(session): 27 | session.install("black") 28 | session.run("black", "--check", ".") 29 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | category = "main" 3 | description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." 4 | name = "absl-py" 5 | optional = false 6 | python-versions = "*" 7 | version = "0.9.0" 8 | 9 | [package.dependencies] 10 | six = "*" 11 | 12 | [[package]] 13 | category = "dev" 14 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 15 | name = "appdirs" 16 | optional = false 17 | python-versions = "*" 18 | version = "1.4.3" 19 | 20 | [[package]] 21 | category = "dev" 22 | description = "Bash tab completion for argparse" 23 | name = "argcomplete" 24 | optional = false 25 | python-versions = "*" 26 | version = "1.11.1" 27 | 28 | [package.dependencies] 29 | [package.dependencies.importlib-metadata] 30 | python = ">=3.7,<3.8" 31 | version = ">=0.23,<2" 32 | 33 | [package.extras] 34 | test = ["coverage", "flake8", "pexpect", "wheel"] 35 | 36 | [[package]] 37 | category = "main" 38 | description = "Read/rewrite/write Python ASTs" 39 | name = "astor" 40 | optional = false 41 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 42 | version = "0.8.1" 43 | 44 | [[package]] 45 | category = "dev" 46 | description = "An abstract syntax tree for Python with inference support." 47 | name = "astroid" 48 | optional = false 49 | python-versions = ">=3.5.*" 50 | version = "2.3.3" 51 | 52 | [package.dependencies] 53 | lazy-object-proxy = ">=1.4.0,<1.5.0" 54 | six = ">=1.12,<2.0" 55 | wrapt = ">=1.11.0,<1.12.0" 56 | 57 | [package.dependencies.typed-ast] 58 | python = "<3.8" 59 | version = ">=1.4.0,<1.5" 60 | 61 | [[package]] 62 | category = "dev" 63 | description = "Atomic file writes." 64 | marker = "sys_platform == \"win32\"" 65 | name = "atomicwrites" 66 | optional = false 67 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 68 | version = "1.3.0" 69 | 70 | [[package]] 71 | category = "dev" 72 | description = "Classes Without Boilerplate" 73 | name = "attrs" 74 | optional = false 75 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 76 | version = "19.3.0" 77 | 78 | [package.extras] 79 | azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] 80 | dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] 81 | docs = ["sphinx", "zope.interface"] 82 | tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] 83 | 84 | [[package]] 85 | category = "main" 86 | description = "Backport of new features in Python's weakref module" 87 | name = "backports.weakref" 88 | optional = false 89 | python-versions = "*" 90 | version = "1.0.post1" 91 | 92 | [[package]] 93 | category = "dev" 94 | description = "The uncompromising code formatter." 95 | name = "black" 96 | optional = false 97 | python-versions = ">=3.6" 98 | version = "19.10b0" 99 | 100 | [package.dependencies] 101 | appdirs = "*" 102 | attrs = ">=18.1.0" 103 | click = ">=6.5" 104 | pathspec = ">=0.6,<1" 105 | regex = "*" 106 | toml = ">=0.9.4" 107 | typed-ast = ">=1.4.0" 108 | 109 | [package.extras] 110 | d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] 111 | 112 | [[package]] 113 | category = "main" 114 | description = "The Blis BLAS-like linear algebra library, as a self-contained C-extension." 115 | name = "blis" 116 | optional = false 117 | python-versions = "*" 118 | version = "0.4.1" 119 | 120 | [package.dependencies] 121 | numpy = ">=1.15.0" 122 | 123 | [[package]] 124 | category = "main" 125 | description = "Super lightweight function registries for your library" 126 | name = "catalogue" 127 | optional = false 128 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 129 | version = "1.0.0" 130 | 131 | [package.dependencies] 132 | [package.dependencies.importlib-metadata] 133 | python = "<3.8" 134 | version = ">=0.20" 135 | 136 | [[package]] 137 | category = "main" 138 | description = "Python package for providing Mozilla's CA Bundle." 139 | name = "certifi" 140 | optional = false 141 | python-versions = "*" 142 | version = "2019.11.28" 143 | 144 | [[package]] 145 | category = "main" 146 | description = "Universal encoding detector for Python 2 and 3" 147 | name = "chardet" 148 | optional = false 149 | python-versions = "*" 150 | version = "3.0.4" 151 | 152 | [[package]] 153 | category = "main" 154 | description = "Composable command line interface toolkit" 155 | name = "click" 156 | optional = false 157 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 158 | version = "7.1.1" 159 | 160 | [[package]] 161 | category = "main" 162 | description = "Cross-platform colored terminal text." 163 | name = "colorama" 164 | optional = false 165 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 166 | version = "0.4.3" 167 | 168 | [[package]] 169 | category = "dev" 170 | description = "Log formatting with colors!" 171 | name = "colorlog" 172 | optional = false 173 | python-versions = "*" 174 | version = "4.1.0" 175 | 176 | [package.dependencies] 177 | colorama = "*" 178 | 179 | [[package]] 180 | category = "main" 181 | description = "Manage calls to calloc/free through Cython" 182 | name = "cymem" 183 | optional = false 184 | python-versions = "*" 185 | version = "2.0.3" 186 | 187 | [[package]] 188 | category = "main" 189 | description = "Text Correction wth deep learning" 190 | name = "deepcorrect" 191 | optional = false 192 | python-versions = ">=3.6.0" 193 | version = "1.0.5" 194 | 195 | [package.dependencies] 196 | txt2txt = "1.0.9" 197 | 198 | [[package]] 199 | category = "dev" 200 | description = "Distribution utilities" 201 | name = "distlib" 202 | optional = false 203 | python-versions = "*" 204 | version = "0.3.0" 205 | 206 | [[package]] 207 | category = "main" 208 | description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4" 209 | name = "enum34" 210 | optional = false 211 | python-versions = "*" 212 | version = "1.1.10" 213 | 214 | [[package]] 215 | category = "dev" 216 | description = "A platform independent file lock." 217 | name = "filelock" 218 | optional = false 219 | python-versions = "*" 220 | version = "3.0.12" 221 | 222 | [[package]] 223 | category = "main" 224 | description = "Python AST that abstracts the underlying Python version" 225 | name = "gast" 226 | optional = false 227 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 228 | version = "0.3.3" 229 | 230 | [[package]] 231 | category = "main" 232 | description = "pasta is an AST-based Python refactoring library" 233 | name = "google-pasta" 234 | optional = false 235 | python-versions = "*" 236 | version = "0.2.0" 237 | 238 | [package.dependencies] 239 | six = "*" 240 | 241 | [[package]] 242 | category = "main" 243 | description = "HTTP/2-based RPC framework" 244 | name = "grpcio" 245 | optional = false 246 | python-versions = "*" 247 | version = "1.27.2" 248 | 249 | [package.dependencies] 250 | six = ">=1.5.2" 251 | 252 | [[package]] 253 | category = "main" 254 | description = "Read and write HDF5 files from Python" 255 | name = "h5py" 256 | optional = false 257 | python-versions = "*" 258 | version = "2.10.0" 259 | 260 | [package.dependencies] 261 | numpy = ">=1.7" 262 | six = "*" 263 | 264 | [[package]] 265 | category = "main" 266 | description = "Internationalized Domain Names in Applications (IDNA)" 267 | name = "idna" 268 | optional = false 269 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 270 | version = "2.9" 271 | 272 | [[package]] 273 | category = "main" 274 | description = "Read metadata from Python packages" 275 | marker = "python_version < \"3.8\"" 276 | name = "importlib-metadata" 277 | optional = false 278 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 279 | version = "1.5.0" 280 | 281 | [package.dependencies] 282 | zipp = ">=0.5" 283 | 284 | [package.extras] 285 | docs = ["sphinx", "rst.linker"] 286 | testing = ["packaging", "importlib-resources"] 287 | 288 | [[package]] 289 | category = "dev" 290 | description = "A Python utility / library to sort Python imports." 291 | name = "isort" 292 | optional = false 293 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 294 | version = "4.3.21" 295 | 296 | [package.extras] 297 | pipfile = ["pipreqs", "requirementslib"] 298 | pyproject = ["toml"] 299 | requirements = ["pipreqs", "pip-api"] 300 | xdg_home = ["appdirs (>=1.4.0)"] 301 | 302 | [[package]] 303 | category = "main" 304 | description = "Deep Learning for humans" 305 | name = "keras" 306 | optional = false 307 | python-versions = "*" 308 | version = "2.3.1" 309 | 310 | [package.dependencies] 311 | h5py = "*" 312 | keras-applications = ">=1.0.6" 313 | keras-preprocessing = ">=1.0.5" 314 | numpy = ">=1.9.1" 315 | pyyaml = "*" 316 | scipy = ">=0.14" 317 | six = ">=1.9.0" 318 | 319 | [package.extras] 320 | tests = ["pytest", "pytest-pep8", "pytest-xdist", "flaky", "pytest-cov", "pandas", "requests", "markdown"] 321 | visualize = ["pydot (>=1.2.4)"] 322 | 323 | [[package]] 324 | category = "main" 325 | description = "Reference implementations of popular deep learning models" 326 | name = "keras-applications" 327 | optional = false 328 | python-versions = "*" 329 | version = "1.0.8" 330 | 331 | [package.dependencies] 332 | h5py = "*" 333 | numpy = ">=1.9.1" 334 | 335 | [package.extras] 336 | tests = ["pytest", "pytest-pep8", "pytest-xdist", "pytest-cov"] 337 | 338 | [[package]] 339 | category = "main" 340 | description = "Easy data preprocessing and data augmentation for deep learning models" 341 | name = "keras-preprocessing" 342 | optional = false 343 | python-versions = "*" 344 | version = "1.1.0" 345 | 346 | [package.dependencies] 347 | numpy = ">=1.9.1" 348 | six = ">=1.9.0" 349 | 350 | [package.extras] 351 | image = ["scipy (>=0.14)", "Pillow (>=5.2.0)"] 352 | pep8 = ["flake8"] 353 | tests = ["pandas", "pillow", "tensorflow (1.7)", "keras", "pytest", "pytest-xdist", "pytest-cov"] 354 | 355 | [[package]] 356 | category = "dev" 357 | description = "A fast and thorough lazy object proxy." 358 | name = "lazy-object-proxy" 359 | optional = false 360 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 361 | version = "1.4.3" 362 | 363 | [[package]] 364 | category = "main" 365 | description = "Python implementation of Markdown." 366 | name = "markdown" 367 | optional = false 368 | python-versions = ">=3.5" 369 | version = "3.2.1" 370 | 371 | [package.dependencies] 372 | setuptools = ">=36" 373 | 374 | [package.extras] 375 | testing = ["coverage", "pyyaml"] 376 | 377 | [[package]] 378 | category = "dev" 379 | description = "McCabe checker, plugin for flake8" 380 | name = "mccabe" 381 | optional = false 382 | python-versions = "*" 383 | version = "0.6.1" 384 | 385 | [[package]] 386 | category = "main" 387 | description = "Rolling backport of unittest.mock for all Pythons" 388 | name = "mock" 389 | optional = false 390 | python-versions = ">=3.6" 391 | version = "4.0.2" 392 | 393 | [package.extras] 394 | build = ["twine", "wheel", "blurb"] 395 | docs = ["sphinx"] 396 | test = ["pytest", "pytest-cov"] 397 | 398 | [[package]] 399 | category = "dev" 400 | description = "More routines for operating on iterables, beyond itertools" 401 | name = "more-itertools" 402 | optional = false 403 | python-versions = ">=3.5" 404 | version = "8.2.0" 405 | 406 | [[package]] 407 | category = "main" 408 | description = "Cython bindings for MurmurHash" 409 | name = "murmurhash" 410 | optional = false 411 | python-versions = "*" 412 | version = "1.0.2" 413 | 414 | [[package]] 415 | category = "dev" 416 | description = "Flexible test automation." 417 | name = "nox" 418 | optional = false 419 | python-versions = ">=3.5" 420 | version = "2019.11.9" 421 | 422 | [package.dependencies] 423 | argcomplete = ">=1.9.4,<2.0" 424 | colorlog = ">=2.6.1,<5.0.0" 425 | py = ">=1.4.0,<2.0.0" 426 | virtualenv = ">=14.0.0" 427 | 428 | [package.extras] 429 | tox_to_nox = ["jinja2", "tox"] 430 | 431 | [[package]] 432 | category = "main" 433 | description = "NumPy is the fundamental package for array computing with Python." 434 | name = "numpy" 435 | optional = false 436 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" 437 | version = "1.16.4" 438 | 439 | [[package]] 440 | category = "dev" 441 | description = "Core utilities for Python packages" 442 | name = "packaging" 443 | optional = false 444 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 445 | version = "20.3" 446 | 447 | [package.dependencies] 448 | pyparsing = ">=2.0.2" 449 | six = "*" 450 | 451 | [[package]] 452 | category = "dev" 453 | description = "Utility library for gitignore style pattern matching of file paths." 454 | name = "pathspec" 455 | optional = false 456 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 457 | version = "0.7.0" 458 | 459 | [[package]] 460 | category = "main" 461 | description = "The smartest command line arguments parser in the world" 462 | name = "plac" 463 | optional = false 464 | python-versions = "*" 465 | version = "1.1.3" 466 | 467 | [[package]] 468 | category = "dev" 469 | description = "plugin and hook calling mechanisms for python" 470 | name = "pluggy" 471 | optional = false 472 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 473 | version = "0.13.1" 474 | 475 | [package.dependencies] 476 | [package.dependencies.importlib-metadata] 477 | python = "<3.8" 478 | version = ">=0.12" 479 | 480 | [package.extras] 481 | dev = ["pre-commit", "tox"] 482 | 483 | [[package]] 484 | category = "main" 485 | description = "Cython hash table that trusts the keys are pre-hashed" 486 | name = "preshed" 487 | optional = false 488 | python-versions = "*" 489 | version = "3.0.2" 490 | 491 | [package.dependencies] 492 | cymem = ">=2.0.2,<2.1.0" 493 | murmurhash = ">=0.28.0,<1.1.0" 494 | 495 | [[package]] 496 | category = "main" 497 | description = "Protocol Buffers" 498 | name = "protobuf" 499 | optional = false 500 | python-versions = "*" 501 | version = "3.11.3" 502 | 503 | [package.dependencies] 504 | setuptools = "*" 505 | six = ">=1.9" 506 | 507 | [[package]] 508 | category = "dev" 509 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 510 | name = "py" 511 | optional = false 512 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 513 | version = "1.8.1" 514 | 515 | [[package]] 516 | category = "dev" 517 | description = "python code static checker" 518 | name = "pylint" 519 | optional = false 520 | python-versions = ">=3.5.*" 521 | version = "2.4.4" 522 | 523 | [package.dependencies] 524 | astroid = ">=2.3.0,<2.4" 525 | colorama = "*" 526 | isort = ">=4.2.5,<5" 527 | mccabe = ">=0.6,<0.7" 528 | 529 | [[package]] 530 | category = "dev" 531 | description = "Python parsing module" 532 | name = "pyparsing" 533 | optional = false 534 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 535 | version = "2.4.6" 536 | 537 | [[package]] 538 | category = "main" 539 | description = "Pure Python module to hyphenate text" 540 | name = "pyphen" 541 | optional = false 542 | python-versions = "*" 543 | version = "0.9.5" 544 | 545 | [[package]] 546 | category = "dev" 547 | description = "pytest: simple powerful testing with Python" 548 | name = "pytest" 549 | optional = false 550 | python-versions = ">=3.5" 551 | version = "5.4.1" 552 | 553 | [package.dependencies] 554 | atomicwrites = ">=1.0" 555 | attrs = ">=17.4.0" 556 | colorama = "*" 557 | more-itertools = ">=4.0.0" 558 | packaging = "*" 559 | pluggy = ">=0.12,<1.0" 560 | py = ">=1.5.0" 561 | wcwidth = "*" 562 | 563 | [package.dependencies.importlib-metadata] 564 | python = "<3.8" 565 | version = ">=0.12" 566 | 567 | [package.extras] 568 | checkqa-mypy = ["mypy (v0.761)"] 569 | testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] 570 | 571 | [[package]] 572 | category = "main" 573 | description = "YAML parser and emitter for Python" 574 | name = "pyyaml" 575 | optional = false 576 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 577 | version = "5.3" 578 | 579 | [[package]] 580 | category = "dev" 581 | description = "Alternative regular expression module, to replace re." 582 | name = "regex" 583 | optional = false 584 | python-versions = "*" 585 | version = "2020.2.20" 586 | 587 | [[package]] 588 | category = "main" 589 | description = "Python HTTP for Humans." 590 | name = "requests" 591 | optional = false 592 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 593 | version = "2.23.0" 594 | 595 | [package.dependencies] 596 | certifi = ">=2017.4.17" 597 | chardet = ">=3.0.2,<4" 598 | idna = ">=2.5,<3" 599 | urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" 600 | 601 | [package.extras] 602 | security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] 603 | socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] 604 | 605 | [[package]] 606 | category = "main" 607 | description = "SciPy: Scientific Library for Python" 608 | name = "scipy" 609 | optional = false 610 | python-versions = ">=3.5" 611 | version = "1.4.1" 612 | 613 | [package.dependencies] 614 | numpy = ">=1.13.3" 615 | 616 | [[package]] 617 | category = "main" 618 | description = "Simple python package to shut up Tensorflow warnings and logs." 619 | name = "silence-tensorflow" 620 | optional = false 621 | python-versions = "*" 622 | version = "1.1.1" 623 | 624 | [package.extras] 625 | test = ["pytest-cov", "coveralls", "validate-version-code", "pytest", "codacy-coverage"] 626 | 627 | [[package]] 628 | category = "main" 629 | description = "Python 2 and 3 compatibility utilities" 630 | name = "six" 631 | optional = false 632 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 633 | version = "1.14.0" 634 | 635 | [[package]] 636 | category = "main" 637 | description = "Industrial-strength Natural Language Processing (NLP) in Python" 638 | name = "spacy" 639 | optional = false 640 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 641 | version = "2.2.4" 642 | 643 | [package.dependencies] 644 | blis = ">=0.4.0,<0.5.0" 645 | catalogue = ">=0.0.7,<1.1.0" 646 | cymem = ">=2.0.2,<2.1.0" 647 | murmurhash = ">=0.28.0,<1.1.0" 648 | numpy = ">=1.15.0" 649 | plac = ">=0.9.6,<1.2.0" 650 | preshed = ">=3.0.2,<3.1.0" 651 | requests = ">=2.13.0,<3.0.0" 652 | setuptools = "*" 653 | srsly = ">=1.0.2,<1.1.0" 654 | thinc = "7.4.0" 655 | tqdm = ">=4.38.0,<5.0.0" 656 | wasabi = ">=0.4.0,<1.1.0" 657 | 658 | [package.extras] 659 | cuda = ["cupy (>=5.0.0b4)"] 660 | cuda100 = ["cupy-cuda100 (>=5.0.0b4)"] 661 | cuda80 = ["cupy-cuda80 (>=5.0.0b4)"] 662 | cuda90 = ["cupy-cuda90 (>=5.0.0b4)"] 663 | cuda91 = ["cupy-cuda91 (>=5.0.0b4)"] 664 | cuda92 = ["cupy-cuda92 (>=5.0.0b4)"] 665 | ja = ["fugashi (>=0.1.3)"] 666 | ko = ["natto-py (0.9.0)"] 667 | lookups = ["spacy-lookups-data (>=0.0.5,<0.2.0)"] 668 | th = ["pythainlp (>=2.0)"] 669 | 670 | [[package]] 671 | category = "main" 672 | description = "Multilingual syllable annotation pipeline component for spacy" 673 | name = "spacy-syllables" 674 | optional = false 675 | python-versions = ">=3.6,<4.0" 676 | version = "1.0.0" 677 | 678 | [package.dependencies] 679 | pyphen = ">=0.9.5,<0.10.0" 680 | spacy = ">=2.2.3,<3.0.0" 681 | 682 | [[package]] 683 | category = "main" 684 | description = "Modern high-performance serialization utilities for Python" 685 | name = "srsly" 686 | optional = false 687 | python-versions = "*" 688 | version = "1.0.2" 689 | 690 | [[package]] 691 | category = "main" 692 | description = "TensorBoard lets you watch Tensors Flow" 693 | name = "tensorboard" 694 | optional = false 695 | python-versions = ">= 2.7, != 3.0.*, != 3.1.*" 696 | version = "1.14.0" 697 | 698 | [package.dependencies] 699 | absl-py = ">=0.4" 700 | grpcio = ">=1.6.3" 701 | markdown = ">=2.6.8" 702 | numpy = ">=1.12.0" 703 | protobuf = ">=3.6.0" 704 | setuptools = ">=41.0.0" 705 | six = ">=1.10.0" 706 | werkzeug = ">=0.11.15" 707 | 708 | [package.dependencies.wheel] 709 | python = ">=3" 710 | version = ">=0.26" 711 | 712 | [[package]] 713 | category = "main" 714 | description = "TensorFlow is an open source machine learning framework for everyone." 715 | name = "tensorflow" 716 | optional = false 717 | python-versions = "*" 718 | version = "1.14.0" 719 | 720 | [package.dependencies] 721 | absl-py = ">=0.7.0" 722 | astor = ">=0.6.0" 723 | "backports.weakref" = ">=1.0rc1" 724 | enum34 = ">=1.1.6" 725 | gast = ">=0.2.0" 726 | google-pasta = ">=0.1.6" 727 | grpcio = ">=1.8.6" 728 | keras-applications = ">=1.0.6" 729 | keras-preprocessing = ">=1.0.5" 730 | mock = ">=2.0.0" 731 | numpy = ">=1.14.5,<2.0" 732 | protobuf = ">=3.6.1" 733 | six = ">=1.10.0" 734 | tensorboard = ">=1.14.0,<1.15.0" 735 | tensorflow-estimator = ">=1.14.0rc0,<1.15.0rc0" 736 | termcolor = ">=1.1.0" 737 | wheel = "*" 738 | wrapt = ">=1.11.1" 739 | 740 | [[package]] 741 | category = "main" 742 | description = "TensorFlow Estimator." 743 | name = "tensorflow-estimator" 744 | optional = false 745 | python-versions = "*" 746 | version = "1.14.0" 747 | 748 | [[package]] 749 | category = "main" 750 | description = "ANSII Color formatting for output in terminal." 751 | name = "termcolor" 752 | optional = false 753 | python-versions = "*" 754 | version = "1.1.0" 755 | 756 | [[package]] 757 | category = "main" 758 | description = "Practical Machine Learning for NLP" 759 | name = "thinc" 760 | optional = false 761 | python-versions = "*" 762 | version = "7.4.0" 763 | 764 | [package.dependencies] 765 | blis = ">=0.4.0,<0.5.0" 766 | catalogue = ">=0.0.7,<1.1.0" 767 | cymem = ">=2.0.2,<2.1.0" 768 | murmurhash = ">=0.28.0,<1.1.0" 769 | numpy = ">=1.7.0" 770 | plac = ">=0.9.6,<1.2.0" 771 | preshed = ">=1.0.1,<3.1.0" 772 | srsly = ">=0.0.6,<1.1.0" 773 | tqdm = ">=4.10.0,<5.0.0" 774 | wasabi = ">=0.0.9,<1.1.0" 775 | 776 | [package.extras] 777 | cuda = ["cupy (>=5.0.0b4)"] 778 | cuda100 = ["cupy-cuda100 (>=5.0.0b4)"] 779 | cuda101 = ["cupy-cuda101 (>=5.0.0b4)"] 780 | cuda80 = ["cupy-cuda80 (>=5.0.0b4)"] 781 | cuda90 = ["cupy-cuda90 (>=5.0.0b4)"] 782 | cuda91 = ["cupy-cuda91 (>=5.0.0b4)"] 783 | cuda92 = ["cupy-cuda92 (>=5.0.0b4)"] 784 | 785 | [[package]] 786 | category = "dev" 787 | description = "Python Library for Tom's Obvious, Minimal Language" 788 | name = "toml" 789 | optional = false 790 | python-versions = "*" 791 | version = "0.10.0" 792 | 793 | [[package]] 794 | category = "main" 795 | description = "Fast, Extensible Progress Meter" 796 | name = "tqdm" 797 | optional = false 798 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 799 | version = "4.43.0" 800 | 801 | [package.extras] 802 | dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] 803 | 804 | [[package]] 805 | category = "main" 806 | description = "Out of the Box, Easy to use sequence to sequence library with attention for text." 807 | name = "txt2txt" 808 | optional = false 809 | python-versions = ">=3.6.0" 810 | version = "1.0.9" 811 | 812 | [package.dependencies] 813 | keras = ">=2.2.0" 814 | numpy = "*" 815 | 816 | [[package]] 817 | category = "dev" 818 | description = "a fork of Python 2 and 3 ast modules with type comment support" 819 | name = "typed-ast" 820 | optional = false 821 | python-versions = "*" 822 | version = "1.4.1" 823 | 824 | [[package]] 825 | category = "main" 826 | description = "HTTP library with thread-safe connection pooling, file post, and more." 827 | name = "urllib3" 828 | optional = false 829 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 830 | version = "1.25.8" 831 | 832 | [package.extras] 833 | brotli = ["brotlipy (>=0.6.0)"] 834 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 835 | socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] 836 | 837 | [[package]] 838 | category = "dev" 839 | description = "Virtual Python Environment builder" 840 | name = "virtualenv" 841 | optional = false 842 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" 843 | version = "20.0.10" 844 | 845 | [package.dependencies] 846 | appdirs = ">=1.4.3,<2" 847 | distlib = ">=0.3.0,<1" 848 | filelock = ">=3.0.0,<4" 849 | six = ">=1.9.0,<2" 850 | 851 | [package.dependencies.importlib-metadata] 852 | python = "<3.8" 853 | version = ">=0.12,<2" 854 | 855 | [package.extras] 856 | docs = ["sphinx (>=2.0.0,<3)", "sphinx-argparse (>=0.2.5,<1)", "sphinx-rtd-theme (>=0.4.3,<1)", "towncrier (>=19.9.0rc1)", "proselint (>=0.10.2,<1)"] 857 | testing = ["pytest (>=4.0.0,<6)", "coverage (>=4.5.1,<6)", "pytest-mock (>=2.0.0,<3)", "pytest-env (>=0.6.2,<1)", "pytest-timeout (>=1.3.4,<2)", "packaging (>=20.0)", "xonsh (>=0.9.13,<1)"] 858 | 859 | [[package]] 860 | category = "main" 861 | description = "A lightweight console printing and formatting toolkit" 862 | name = "wasabi" 863 | optional = false 864 | python-versions = "*" 865 | version = "0.6.0" 866 | 867 | [[package]] 868 | category = "dev" 869 | description = "Measures number of Terminal column cells of wide-character codes" 870 | name = "wcwidth" 871 | optional = false 872 | python-versions = "*" 873 | version = "0.1.8" 874 | 875 | [[package]] 876 | category = "main" 877 | description = "The comprehensive WSGI web application library." 878 | name = "werkzeug" 879 | optional = false 880 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 881 | version = "1.0.0" 882 | 883 | [package.extras] 884 | dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] 885 | watchdog = ["watchdog"] 886 | 887 | [[package]] 888 | category = "main" 889 | description = "A built-package format for Python" 890 | name = "wheel" 891 | optional = false 892 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 893 | version = "0.34.2" 894 | 895 | [package.extras] 896 | test = ["pytest (>=3.0.0)", "pytest-cov"] 897 | 898 | [[package]] 899 | category = "main" 900 | description = "Module for decorators, wrappers and monkey patching." 901 | name = "wrapt" 902 | optional = false 903 | python-versions = "*" 904 | version = "1.11.2" 905 | 906 | [[package]] 907 | category = "main" 908 | description = "Backport of pathlib-compatible object wrapper for zip files" 909 | marker = "python_version < \"3.8\"" 910 | name = "zipp" 911 | optional = false 912 | python-versions = ">=3.6" 913 | version = "3.1.0" 914 | 915 | [package.extras] 916 | docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] 917 | testing = ["jaraco.itertools", "func-timeout"] 918 | 919 | [metadata] 920 | content-hash = "7ef1647393c0a5c026ff417dc4e54d047db830ea69ea03f5d3111a9baa8346ee" 921 | python-versions = "^3.7" 922 | 923 | [metadata.files] 924 | absl-py = [ 925 | {file = "absl-py-0.9.0.tar.gz", hash = "sha256:75e737d6ce7723d9ff9b7aa1ba3233c34be62ef18d5859e706b8fdc828989830"}, 926 | ] 927 | appdirs = [ 928 | {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, 929 | {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, 930 | ] 931 | argcomplete = [ 932 | {file = "argcomplete-1.11.1-py2.py3-none-any.whl", hash = "sha256:890bdd1fcbb973ed73db241763e78b6d958580e588c2910b508c770a59ef37d7"}, 933 | {file = "argcomplete-1.11.1.tar.gz", hash = "sha256:5ae7b601be17bf38a749ec06aa07fb04e7b6b5fc17906948dc1866e7facf3740"}, 934 | ] 935 | astor = [ 936 | {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, 937 | {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, 938 | ] 939 | astroid = [ 940 | {file = "astroid-2.3.3-py3-none-any.whl", hash = "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"}, 941 | {file = "astroid-2.3.3.tar.gz", hash = "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a"}, 942 | ] 943 | atomicwrites = [ 944 | {file = "atomicwrites-1.3.0-py2.py3-none-any.whl", hash = "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4"}, 945 | {file = "atomicwrites-1.3.0.tar.gz", hash = "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"}, 946 | ] 947 | attrs = [ 948 | {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, 949 | {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, 950 | ] 951 | "backports.weakref" = [ 952 | {file = "backports.weakref-1.0.post1-py2.py3-none-any.whl", hash = "sha256:81bc9b51c0abc58edc76aefbbc68c62a787918ffe943a37947e162c3f8e19e82"}, 953 | {file = "backports.weakref-1.0.post1.tar.gz", hash = "sha256:bc4170a29915f8b22c9e7c4939701859650f2eb84184aee80da329ac0b9825c2"}, 954 | ] 955 | black = [ 956 | {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, 957 | {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, 958 | ] 959 | blis = [ 960 | {file = "blis-0.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:135450caabc8aea9bb9250329ebdf7189982d9b57d5c92789b2ba2fe52c247a7"}, 961 | {file = "blis-0.4.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:26b16d6005bb2671699831b5cc699905215d1abde1ec5c1d04de7dcd9eb29f75"}, 962 | {file = "blis-0.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d1d59faebc1c94f8f4f77154ef4b9d6d40364b111cf8fde48ee3b524c85f1075"}, 963 | {file = "blis-0.4.1-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:38fe877a4b52e762f5e137a412e3c256545a696a12ae8c40d67b8815d2bb5097"}, 964 | {file = "blis-0.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1402d9cbb0fbc21b749dd5b87d7ee14249e74a0ca38be6ecc56b3b356fca2f21"}, 965 | {file = "blis-0.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:8aeaf6954351593a1e412f80e398aa51df588d3c0de74b9f3323b694c603381b"}, 966 | {file = "blis-0.4.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3347a4b1b7d3ae14476aac9a6f7bf8ebf464863f4ebf4aea228874a7694ea240"}, 967 | {file = "blis-0.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:77a6486b9794af01bcdfd1bc6e067c93add4b93292e6f95bf6e5ce7f98bf0163"}, 968 | {file = "blis-0.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f0b0dad4d6268d9dba0a65a9db12dd7a2d8686b648399e4aa1aec7550697e99e"}, 969 | {file = "blis-0.4.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:4fb89c47ee06b58a4410a16fd5794847517262c9d2a342643475b477dfeff0a4"}, 970 | {file = "blis-0.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:03c368c9716ca814c436550a5f1e02ccf74850e613602519e3941d212e5aa177"}, 971 | {file = "blis-0.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ddd732c5274d1082fa92e2c42317587d5ebabce7741ca98120f69bd45d004b99"}, 972 | {file = "blis-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9ede123065f3cacb109967755b3d83d4ca0de90643a9058129a6ab2d4051954f"}, 973 | {file = "blis-0.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:00473602629ba69fe6565108e21957e918cb48b59f5bf2f6bfb6e04de42500cb"}, 974 | {file = "blis-0.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:856142a11e37fd2c47c5006a3197e157bb8469a491a73d2d442223dd3279df84"}, 975 | {file = "blis-0.4.1.tar.gz", hash = "sha256:d69257d317e86f34a7f230a2fd1f021fd2a1b944137f40d8cdbb23bd334cd0c4"}, 976 | ] 977 | catalogue = [ 978 | {file = "catalogue-1.0.0-py2.py3-none-any.whl", hash = "sha256:584d78e7f4c3c6e2fd498eb56dfc8ef1f4ff738480237de2ccd26cbe2cf47172"}, 979 | {file = "catalogue-1.0.0.tar.gz", hash = "sha256:d74d1d856c6b36a37bf14aa6dbbc27d0582667b7ab979a6108e61a575e8723f5"}, 980 | ] 981 | certifi = [ 982 | {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, 983 | {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, 984 | ] 985 | chardet = [ 986 | {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, 987 | {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, 988 | ] 989 | click = [ 990 | {file = "click-7.1.1-py2.py3-none-any.whl", hash = "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"}, 991 | {file = "click-7.1.1.tar.gz", hash = "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc"}, 992 | ] 993 | colorama = [ 994 | {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, 995 | {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, 996 | ] 997 | colorlog = [ 998 | {file = "colorlog-4.1.0-py2.py3-none-any.whl", hash = "sha256:732c191ebbe9a353ec160d043d02c64ddef9028de8caae4cfa8bd49b6afed53e"}, 999 | {file = "colorlog-4.1.0.tar.gz", hash = "sha256:30aaef5ab2a1873dec5da38fd6ba568fa761c9fa10b40241027fa3edea47f3d2"}, 1000 | ] 1001 | cymem = [ 1002 | {file = "cymem-2.0.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f4f19af4bca81f11922508a9dcf30ce1d2aee4972af9f81ce8e5331a6f46f5e1"}, 1003 | {file = "cymem-2.0.3-cp35-cp35m-win_amd64.whl", hash = "sha256:cd21ec48ee70878d46c486e2f7ae94b32bfc6b37c4d27876c5a5a00c4eb75c3c"}, 1004 | {file = "cymem-2.0.3-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:6f4cb689a9552e9e13dccc89203c8ab09f210a7ffb92ce27c384a4a0be27b527"}, 1005 | {file = "cymem-2.0.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:7236252bed70f37b898933dcf8aa875d0829664a245a272516f27b30439df71c"}, 1006 | {file = "cymem-2.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:719f04a11ca709fc2b47868070d79fccff77e5d502ff32de2f4baa73cb16166f"}, 1007 | {file = "cymem-2.0.3-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:d7505c500d994f11662e5595f5002251f572acc189f18944619352e2636f5181"}, 1008 | {file = "cymem-2.0.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c288a1bbdf58c360457443e5297e74844e1961e5e7001dbcb3a5297a41911a11"}, 1009 | {file = "cymem-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:7f5ddceb12b73f7fd2e4398266401b6f887003740ccd18c989a2af04500b5f2b"}, 1010 | {file = "cymem-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:622c20a57701d02f01a47e856dea248e112638f28c8249dbe3ed95a9702e3d74"}, 1011 | {file = "cymem-2.0.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:85b9364e099426bd7f445a7705aad87bf6dbb71d79e3802dd8ca14e181d38a33"}, 1012 | {file = "cymem-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd24848fbd75b17bab06408da6c029ba7cc615bd9e4a1f755fb3a090025fb922"}, 1013 | {file = "cymem-2.0.3.tar.gz", hash = "sha256:5083b2ab5fe13ced094a82e0df465e2dbbd9b1c013288888035e24fd6eb4ed01"}, 1014 | ] 1015 | deepcorrect = [ 1016 | {file = "deepcorrect-1.0.5-py2.py3-none-any.whl", hash = "sha256:7408c19c133d02c98a5d287564693223ff3b339f5f606d8893ee65d16c6a178f"}, 1017 | {file = "deepcorrect-1.0.5.tar.gz", hash = "sha256:0acea8565ec56de41b2eaa3f093d6b95590ff21c9b7fdae8a597358d3580c787"}, 1018 | ] 1019 | distlib = [ 1020 | {file = "distlib-0.3.0.zip", hash = "sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21"}, 1021 | ] 1022 | enum34 = [ 1023 | {file = "enum34-1.1.10-py2-none-any.whl", hash = "sha256:a98a201d6de3f2ab3db284e70a33b0f896fbf35f8086594e8c9e74b909058d53"}, 1024 | {file = "enum34-1.1.10-py3-none-any.whl", hash = "sha256:c3858660960c984d6ab0ebad691265180da2b43f07e061c0f8dca9ef3cffd328"}, 1025 | {file = "enum34-1.1.10.tar.gz", hash = "sha256:cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248"}, 1026 | ] 1027 | filelock = [ 1028 | {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, 1029 | {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, 1030 | ] 1031 | gast = [ 1032 | {file = "gast-0.3.3-py2.py3-none-any.whl", hash = "sha256:8f46f5be57ae6889a4e16e2ca113b1703ef17f2b0abceb83793eaba9e1351a45"}, 1033 | {file = "gast-0.3.3.tar.gz", hash = "sha256:b881ef288a49aa81440d2c5eb8aeefd4c2bb8993d5f50edae7413a85bfdb3b57"}, 1034 | ] 1035 | google-pasta = [ 1036 | {file = "google-pasta-0.2.0.tar.gz", hash = "sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e"}, 1037 | {file = "google_pasta-0.2.0-py2-none-any.whl", hash = "sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954"}, 1038 | {file = "google_pasta-0.2.0-py3-none-any.whl", hash = "sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed"}, 1039 | ] 1040 | grpcio = [ 1041 | {file = "grpcio-1.27.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:dbec0a3a154dbf2eb85b38abaddf24964fa1c059ee0a4ad55d6f39211b1a4bca"}, 1042 | {file = "grpcio-1.27.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1ef949b15a1f5f30651532a9b54edf3bd7c0b699a10931505fa2c80b2d395942"}, 1043 | {file = "grpcio-1.27.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:ed123037896a8db6709b8ad5acc0ed435453726ea0b63361d12de369624c2ab5"}, 1044 | {file = "grpcio-1.27.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:f9d632ce9fd485119c968ec6a7a343de698c5e014d17602ae2f110f1b05925ed"}, 1045 | {file = "grpcio-1.27.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:80c3d1ce8820dd819d1c9d6b63b6f445148480a831173b572a9174a55e7abd47"}, 1046 | {file = "grpcio-1.27.2-cp27-cp27m-win32.whl", hash = "sha256:07f82aefb4a56c7e1e52b78afb77d446847d27120a838a1a0489260182096045"}, 1047 | {file = "grpcio-1.27.2-cp27-cp27m-win_amd64.whl", hash = "sha256:28f27c64dd699b8b10f70da5f9320c1cffcaefca7dd76275b44571bd097f276c"}, 1048 | {file = "grpcio-1.27.2-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:a25b84e10018875a0f294a7649d07c43e8bc3e6a821714e39e5cd607a36386d7"}, 1049 | {file = "grpcio-1.27.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:57949756a3ce1f096fa2b00f812755f5ab2effeccedb19feeb7d0deafa3d1de7"}, 1050 | {file = "grpcio-1.27.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f3614dabd2cc8741850597b418bcf644d4f60e73615906c3acc407b78ff720b3"}, 1051 | {file = "grpcio-1.27.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:25c77692ea8c0929d4ad400ea9c3dcbcc4936cee84e437e0ef80da58fa73d88a"}, 1052 | {file = "grpcio-1.27.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:5dab393ab96b2ce4012823b2f2ed4ee907150424d2f02b97bd6f8dd8f17cc866"}, 1053 | {file = "grpcio-1.27.2-cp35-cp35m-linux_armv7l.whl", hash = "sha256:bb2987eb3af9bcf46019be39b82c120c3d35639a95bc4ee2d08f36ecdf469345"}, 1054 | {file = "grpcio-1.27.2-cp35-cp35m-macosx_10_7_intel.whl", hash = "sha256:6f328a3faaf81a2546a3022b3dfc137cc6d50d81082dbc0c94d1678943f05df3"}, 1055 | {file = "grpcio-1.27.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:5ebc13451246de82f130e8ee7e723e8d7ae1827f14b7b0218867667b1b12c88d"}, 1056 | {file = "grpcio-1.27.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:355bd7d7ce5ff2917d217f0e8ddac568cb7403e1ce1639b35a924db7d13a39b6"}, 1057 | {file = "grpcio-1.27.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:d1e5563e3b7f844dbc48d709c9e4a75647e11d0387cc1fa0c861d3e9d34bc844"}, 1058 | {file = "grpcio-1.27.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:1ec8fc865d8da6d0713e2092a27eee344cd54628b2c2065a0e77fff94df4ae00"}, 1059 | {file = "grpcio-1.27.2-cp35-cp35m-win32.whl", hash = "sha256:706e2dea3de33b0d8884c4d35ecd5911b4ff04d0697c4138096666ce983671a6"}, 1060 | {file = "grpcio-1.27.2-cp35-cp35m-win_amd64.whl", hash = "sha256:d18b4c8cacbb141979bb44355ee5813dd4d307e9d79b3a36d66eca7e0a203df8"}, 1061 | {file = "grpcio-1.27.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:02aef8ef1a5ac5f0836b543e462eb421df6048a7974211a906148053b8055ea6"}, 1062 | {file = "grpcio-1.27.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b78af4d42985ab3143d9882d0006f48d12f1bc4ba88e78f23762777c3ee64571"}, 1063 | {file = "grpcio-1.27.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9c0669ba9aebad540fb05a33beb7e659ea6e5ca35833fc5229c20f057db760e8"}, 1064 | {file = "grpcio-1.27.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:68a149a0482d0bc697aac702ec6efb9d380e0afebf9484db5b7e634146528371"}, 1065 | {file = "grpcio-1.27.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a71138366d57901597bfcc52af7f076ab61c046f409c7b429011cd68de8f9fe6"}, 1066 | {file = "grpcio-1.27.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:9e9cfe55dc7ac2aa47e0fd3285ff829685f96803197042c9d2f0fb44e4b39b2c"}, 1067 | {file = "grpcio-1.27.2-cp36-cp36m-win32.whl", hash = "sha256:d22c897b65b1408509099f1c3334bd3704f5e4eb7c0486c57d0e212f71cb8f54"}, 1068 | {file = "grpcio-1.27.2-cp36-cp36m-win_amd64.whl", hash = "sha256:c59b9280284b791377b3524c8e39ca7b74ae2881ba1a6c51b36f4f1bb94cee49"}, 1069 | {file = "grpcio-1.27.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e545908bcc2ae28e5b190ce3170f92d0438cf26a82b269611390114de0106eb"}, 1070 | {file = "grpcio-1.27.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6db7ded10b82592c472eeeba34b9f12d7b0ab1e2dcad12f081b08ebdea78d7d6"}, 1071 | {file = "grpcio-1.27.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4d3b6e66f32528bf43ca2297caca768280a8e068820b1c3dca0fcf9f03c7d6f1"}, 1072 | {file = "grpcio-1.27.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:586d931736912865c9790c60ca2db29e8dc4eace160d5a79fec3e58df79a9386"}, 1073 | {file = "grpcio-1.27.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c03ce53690fe492845e14f4ab7e67d5a429a06db99b226b5c7caa23081c1e2bb"}, 1074 | {file = "grpcio-1.27.2-cp37-cp37m-win32.whl", hash = "sha256:209927e65395feb449783943d62a3036982f871d7f4045fadb90b2d82b153ea8"}, 1075 | {file = "grpcio-1.27.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9713578f187fb1c4d00ac554fe1edcc6b3ddd62f5d4eb578b81261115802df8e"}, 1076 | {file = "grpcio-1.27.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4efde5524579a9ce0459ca35a57a48ca878a4973514b8bb88cb80d7c9d34c85"}, 1077 | {file = "grpcio-1.27.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:fb62996c61eeff56b59ab8abfcaa0859ec2223392c03d6085048b576b567459b"}, 1078 | {file = "grpcio-1.27.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a22daaf30037b8e59d6968c76fe0f7ff062c976c7a026e92fbefc4c4bf3fc5a4"}, 1079 | {file = "grpcio-1.27.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:4a0a33ada3f6f94f855f92460896ef08c798dcc5f17d9364d1735c5adc9d7e4a"}, 1080 | {file = "grpcio-1.27.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:8111b61eee12d7af5c58f82f2c97c2664677a05df9225ef5cbc2f25398c8c454"}, 1081 | {file = "grpcio-1.27.2-cp38-cp38-win32.whl", hash = "sha256:5121fa96c79fc0ec81825091d0be5c16865f834f41b31da40b08ee60552f9961"}, 1082 | {file = "grpcio-1.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:1cff47297ee614e7ef66243dc34a776883ab6da9ca129ea114a802c5e58af5c1"}, 1083 | {file = "grpcio-1.27.2.tar.gz", hash = "sha256:5ae532b93cf9ce5a2a549b74a2c35e3b690b171ece9358519b3039c7b84c887e"}, 1084 | ] 1085 | h5py = [ 1086 | {file = "h5py-2.10.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:ecf4d0b56ee394a0984de15bceeb97cbe1fe485f1ac205121293fc44dcf3f31f"}, 1087 | {file = "h5py-2.10.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:86868dc07b9cc8cb7627372a2e6636cdc7a53b7e2854ad020c9e9d8a4d3fd0f5"}, 1088 | {file = "h5py-2.10.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aac4b57097ac29089f179bbc2a6e14102dd210618e94d77ee4831c65f82f17c0"}, 1089 | {file = "h5py-2.10.0-cp27-cp27m-win32.whl", hash = "sha256:7be5754a159236e95bd196419485343e2b5875e806fe68919e087b6351f40a70"}, 1090 | {file = "h5py-2.10.0-cp27-cp27m-win_amd64.whl", hash = "sha256:13c87efa24768a5e24e360a40e0bc4c49bcb7ce1bb13a3a7f9902cec302ccd36"}, 1091 | {file = "h5py-2.10.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:79b23f47c6524d61f899254f5cd5e486e19868f1823298bc0c29d345c2447172"}, 1092 | {file = "h5py-2.10.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cbf28ae4b5af0f05aa6e7551cee304f1d317dbed1eb7ac1d827cee2f1ef97a99"}, 1093 | {file = "h5py-2.10.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:c0d4b04bbf96c47b6d360cd06939e72def512b20a18a8547fa4af810258355d5"}, 1094 | {file = "h5py-2.10.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:549ad124df27c056b2e255ea1c44d30fb7a17d17676d03096ad5cd85edb32dc1"}, 1095 | {file = "h5py-2.10.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:a5f82cd4938ff8761d9760af3274acf55afc3c91c649c50ab18fcff5510a14a5"}, 1096 | {file = "h5py-2.10.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3dad1730b6470fad853ef56d755d06bb916ee68a3d8272b3bab0c1ddf83bb99e"}, 1097 | {file = "h5py-2.10.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:063947eaed5f271679ed4ffa36bb96f57bc14f44dd4336a827d9a02702e6ce6b"}, 1098 | {file = "h5py-2.10.0-cp35-cp35m-win32.whl", hash = "sha256:c54a2c0dd4957776ace7f95879d81582298c5daf89e77fb8bee7378f132951de"}, 1099 | {file = "h5py-2.10.0-cp35-cp35m-win_amd64.whl", hash = "sha256:6998be619c695910cb0effe5eb15d3a511d3d1a5d217d4bd0bebad1151ec2262"}, 1100 | {file = "h5py-2.10.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:ff7d241f866b718e4584fa95f520cb19405220c501bd3a53ee11871ba5166ea2"}, 1101 | {file = "h5py-2.10.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:54817b696e87eb9e403e42643305f142cd8b940fe9b3b490bbf98c3b8a894cf4"}, 1102 | {file = "h5py-2.10.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d3c59549f90a891691991c17f8e58c8544060fdf3ccdea267100fa5f561ff62f"}, 1103 | {file = "h5py-2.10.0-cp36-cp36m-win32.whl", hash = "sha256:d7ae7a0576b06cb8e8a1c265a8bc4b73d05fdee6429bffc9a26a6eb531e79d72"}, 1104 | {file = "h5py-2.10.0-cp36-cp36m-win_amd64.whl", hash = "sha256:bffbc48331b4a801d2f4b7dac8a72609f0b10e6e516e5c480a3e3241e091c878"}, 1105 | {file = "h5py-2.10.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:51ae56894c6c93159086ffa2c94b5b3388c0400548ab26555c143e7cfa05b8e5"}, 1106 | {file = "h5py-2.10.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:16ead3c57141101e3296ebeed79c9c143c32bdd0e82a61a2fc67e8e6d493e9d1"}, 1107 | {file = "h5py-2.10.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0e25bb91e7a02efccb50aba6591d3fe2c725479e34769802fcdd4076abfa917"}, 1108 | {file = "h5py-2.10.0-cp37-cp37m-win32.whl", hash = "sha256:f23951a53d18398ef1344c186fb04b26163ca6ce449ebd23404b153fd111ded9"}, 1109 | {file = "h5py-2.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8bb1d2de101f39743f91512a9750fb6c351c032e5cd3204b4487383e34da7f75"}, 1110 | {file = "h5py-2.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:64f74da4a1dd0d2042e7d04cf8294e04ddad686f8eba9bb79e517ae582f6668d"}, 1111 | {file = "h5py-2.10.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d35f7a3a6cefec82bfdad2785e78359a0e6a5fbb3f605dd5623ce88082ccd681"}, 1112 | {file = "h5py-2.10.0-cp38-cp38-win32.whl", hash = "sha256:6ef7ab1089e3ef53ca099038f3c0a94d03e3560e6aff0e9d6c64c55fb13fc681"}, 1113 | {file = "h5py-2.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:769e141512b54dee14ec76ed354fcacfc7d97fea5a7646b709f7400cf1838630"}, 1114 | {file = "h5py-2.10.0.tar.gz", hash = "sha256:84412798925dc870ffd7107f045d7659e60f5d46d1c70c700375248bf6bf512d"}, 1115 | ] 1116 | idna = [ 1117 | {file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"}, 1118 | {file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"}, 1119 | ] 1120 | importlib-metadata = [ 1121 | {file = "importlib_metadata-1.5.0-py2.py3-none-any.whl", hash = "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b"}, 1122 | {file = "importlib_metadata-1.5.0.tar.gz", hash = "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302"}, 1123 | ] 1124 | isort = [ 1125 | {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, 1126 | {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, 1127 | ] 1128 | keras = [ 1129 | {file = "Keras-2.3.1-py2.py3-none-any.whl", hash = "sha256:d08a57bd63546175f8f19232ba05906514d419da3e0af8ef7437fa1c11442e20"}, 1130 | {file = "Keras-2.3.1.tar.gz", hash = "sha256:321d43772006a25a1d58eea17401ef2a34d388b588c9f7646c34796151ebc8cc"}, 1131 | ] 1132 | keras-applications = [ 1133 | {file = "Keras_Applications-1.0.8-py3-none-any.whl", hash = "sha256:df4323692b8c1174af821bf906f1e442e63fa7589bf0f1230a0b6bdc5a810c95"}, 1134 | {file = "Keras_Applications-1.0.8.tar.gz", hash = "sha256:5579f9a12bcde9748f4a12233925a59b93b73ae6947409ff34aa2ba258189fe5"}, 1135 | ] 1136 | keras-preprocessing = [ 1137 | {file = "Keras_Preprocessing-1.1.0-py2.py3-none-any.whl", hash = "sha256:44aee5f2c4d80c3b29f208359fcb336df80f293a0bb6b1c738da43ca206656fb"}, 1138 | {file = "Keras_Preprocessing-1.1.0.tar.gz", hash = "sha256:5a8debe01d840de93d49e05ccf1c9b81ae30e210d34dacbcc47aeb3049b528e5"}, 1139 | ] 1140 | lazy-object-proxy = [ 1141 | {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, 1142 | {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, 1143 | {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win32.whl", hash = "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4"}, 1144 | {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a"}, 1145 | {file = "lazy_object_proxy-1.4.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d"}, 1146 | {file = "lazy_object_proxy-1.4.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a"}, 1147 | {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win32.whl", hash = "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e"}, 1148 | {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win_amd64.whl", hash = "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357"}, 1149 | {file = "lazy_object_proxy-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50"}, 1150 | {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db"}, 1151 | {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449"}, 1152 | {file = "lazy_object_proxy-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156"}, 1153 | {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531"}, 1154 | {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb"}, 1155 | {file = "lazy_object_proxy-1.4.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08"}, 1156 | {file = "lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383"}, 1157 | {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142"}, 1158 | {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea"}, 1159 | {file = "lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62"}, 1160 | {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, 1161 | {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, 1162 | ] 1163 | markdown = [ 1164 | {file = "Markdown-3.2.1-py2.py3-none-any.whl", hash = "sha256:e4795399163109457d4c5af2183fbe6b60326c17cfdf25ce6e7474c6624f725d"}, 1165 | {file = "Markdown-3.2.1.tar.gz", hash = "sha256:90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902"}, 1166 | ] 1167 | mccabe = [ 1168 | {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, 1169 | {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, 1170 | ] 1171 | mock = [ 1172 | {file = "mock-4.0.2-py3-none-any.whl", hash = "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0"}, 1173 | {file = "mock-4.0.2.tar.gz", hash = "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72"}, 1174 | ] 1175 | more-itertools = [ 1176 | {file = "more-itertools-8.2.0.tar.gz", hash = "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"}, 1177 | {file = "more_itertools-8.2.0-py3-none-any.whl", hash = "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c"}, 1178 | ] 1179 | murmurhash = [ 1180 | {file = "murmurhash-1.0.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:717196a04cdc80cc3103a3da17b2415a8a5e1d0d578b7079259386bf153b3258"}, 1181 | {file = "murmurhash-1.0.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a6c071b4b498bcea16a8dc8590cad81fa8d43821f34c74bc00f96499e2527073"}, 1182 | {file = "murmurhash-1.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:d696c394ebd164ca80b5871e2e9ad2f9fdbb81bd3c552c1d5f1e8ee694e6204a"}, 1183 | {file = "murmurhash-1.0.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:27b908fe4bdb426f4e4e4a8821acbe0302915b2945e035ec9d8ca513e2a74b1f"}, 1184 | {file = "murmurhash-1.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:33405103fa8cde15d72ee525a03d5cfe2c7e4901133819754810986e29627d68"}, 1185 | {file = "murmurhash-1.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:3af36a0dc9f13f6892d9b8b39a6a3ccf216cae5bce38adc7c2d145677987772f"}, 1186 | {file = "murmurhash-1.0.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:fe344face8d30a5a6aa26e5acf288aa2a8f0f32e05efdda3d314b4bf289ec2af"}, 1187 | {file = "murmurhash-1.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:386a9eed3cb27cb2cd4394b6521275ba04552642c2d9cab5c9fb42aa5a3325c0"}, 1188 | {file = "murmurhash-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b0afe329701b59d02e56bc6cee7325af83e3fee9c299c615fc1df3202b4f886f"}, 1189 | {file = "murmurhash-1.0.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:bf33490514d308bcc27ed240cb3eb114f1ec31af031535cd8f27659a7049bd52"}, 1190 | {file = "murmurhash-1.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8a4ed95cd3456b43ea301679c7c39ade43fc18b844b37d0ba0ac0d6acbff8e0c"}, 1191 | {file = "murmurhash-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ba766343bdbcb928039b8fff609e80ae7a5fd5ed7a4fc5af822224b63e0cbaff"}, 1192 | {file = "murmurhash-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cc97ea766ac545074bab0e5af3dbc48e0d05ba230ae5a404e284d39abe4b3baf"}, 1193 | {file = "murmurhash-1.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8b045a79e8b621b4b35b29f29e33e9e0964f3a276f7da4d5736142f322ad4842"}, 1194 | {file = "murmurhash-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:f468e4868f78c3ac202a66abfe2866414bca4ae7666a21ef0938c423de0f7d50"}, 1195 | {file = "murmurhash-1.0.2.tar.gz", hash = "sha256:c7a646f6b07b033642b4f52ae2e45efd8b80780b3b90e8092a0cec935fbf81e2"}, 1196 | ] 1197 | nox = [ 1198 | {file = "nox-2019.11.9-py2.py3-none-any.whl", hash = "sha256:0f4b489fdd0eb5665f8c5ee89e5aeb648beae6ccbb363b2492a6786f26e70d85"}, 1199 | {file = "nox-2019.11.9.tar.gz", hash = "sha256:22d0f45ad2bd2d75fa4a243d8d8b84359dbf43134ec5cbff4de9f243b6d528b8"}, 1200 | ] 1201 | numpy = [ 1202 | {file = "numpy-1.16.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722"}, 1203 | {file = "numpy-1.16.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52"}, 1204 | {file = "numpy-1.16.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e"}, 1205 | {file = "numpy-1.16.4-cp27-cp27m-win32.whl", hash = "sha256:94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69"}, 1206 | {file = "numpy-1.16.4-cp27-cp27m-win_amd64.whl", hash = "sha256:7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7"}, 1207 | {file = "numpy-1.16.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633"}, 1208 | {file = "numpy-1.16.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8"}, 1209 | {file = "numpy-1.16.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336"}, 1210 | {file = "numpy-1.16.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7"}, 1211 | {file = "numpy-1.16.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5"}, 1212 | {file = "numpy-1.16.4-cp35-cp35m-win32.whl", hash = "sha256:d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10"}, 1213 | {file = "numpy-1.16.4-cp35-cp35m-win_amd64.whl", hash = "sha256:14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b"}, 1214 | {file = "numpy-1.16.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3"}, 1215 | {file = "numpy-1.16.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797"}, 1216 | {file = "numpy-1.16.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5"}, 1217 | {file = "numpy-1.16.4-cp36-cp36m-win32.whl", hash = "sha256:dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29"}, 1218 | {file = "numpy-1.16.4-cp36-cp36m-win_amd64.whl", hash = "sha256:ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166"}, 1219 | {file = "numpy-1.16.4-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7"}, 1220 | {file = "numpy-1.16.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a"}, 1221 | {file = "numpy-1.16.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525"}, 1222 | {file = "numpy-1.16.4-cp37-cp37m-win32.whl", hash = "sha256:3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca"}, 1223 | {file = "numpy-1.16.4-cp37-cp37m-win_amd64.whl", hash = "sha256:dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8"}, 1224 | {file = "numpy-1.16.4.zip", hash = "sha256:7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7"}, 1225 | ] 1226 | packaging = [ 1227 | {file = "packaging-20.3-py2.py3-none-any.whl", hash = "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"}, 1228 | {file = "packaging-20.3.tar.gz", hash = "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3"}, 1229 | ] 1230 | pathspec = [ 1231 | {file = "pathspec-0.7.0-py2.py3-none-any.whl", hash = "sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424"}, 1232 | {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, 1233 | ] 1234 | plac = [ 1235 | {file = "plac-1.1.3-py2.py3-none-any.whl", hash = "sha256:487e553017d419f35add346c4c09707e52fa53f7e7181ce1098ca27620e9ceee"}, 1236 | {file = "plac-1.1.3.tar.gz", hash = "sha256:398cb947c60c4c25e275e1f1dadf027e7096858fb260b8ece3b33bcff90d985f"}, 1237 | ] 1238 | pluggy = [ 1239 | {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, 1240 | {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, 1241 | ] 1242 | preshed = [ 1243 | {file = "preshed-3.0.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:448d9df12e63fe4a3024f6153ee6703bb95d2be0ce887b5eda7ddc41acfba825"}, 1244 | {file = "preshed-3.0.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:633358f1fb0ec5dd6dbe4971c328d08809e5a8dbefdf13a802ae0a7cb45306c7"}, 1245 | {file = "preshed-3.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:7ea588a78aaf310ae2c293071a8571b07ae434819be05fe510442b6df3f8fbf7"}, 1246 | {file = "preshed-3.0.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8a9a8222a697a513f25a94733e7a17cc298ecd8fd56b606a1d8fa0ac342c2830"}, 1247 | {file = "preshed-3.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:253970beae87ab672a6afb543908761795eea3cb7b0d784e2ea51e265752059e"}, 1248 | {file = "preshed-3.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:88427346b220293439db77c82913791fa13edc6ac73d8159610699a3ca17aae9"}, 1249 | {file = "preshed-3.0.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:6518bbd5fb8adbc3231e75ae78d96a7bdd5405a3b23a09d5e62a2e4fc833724e"}, 1250 | {file = "preshed-3.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1be3cb59211282e906a11443464fe3e19f6561e2fcd06410e4adc6d45354cf82"}, 1251 | {file = "preshed-3.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ece5e850f667eaa3367d5c56dda9e3aa6ac1c0bb2117d2f466a26db5f26bbe4b"}, 1252 | {file = "preshed-3.0.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:1ef72a120e49356058b3c0590d7b5e91f2747b44e006eef6579be6131223cab0"}, 1253 | {file = "preshed-3.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7e80ffc1fb79496d4feafe0eaf71ee5e532b91daf6cec235d7f9c4c12657a58c"}, 1254 | {file = "preshed-3.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:0c15ae62f2595ca479decc3452967484dae57b510278800f5deb9115238cc818"}, 1255 | {file = "preshed-3.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e37058d91bd7f0f5a7a9c83d22a83dc581ab5f79688a87be81f200993145a250"}, 1256 | {file = "preshed-3.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b4ae6c7c44aa3ff7bd717791bb6b619ecb273b7cb128c986f2dc65f6e0e6ddd4"}, 1257 | {file = "preshed-3.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:190345724eb3f7aeaeb2a758740d698bd6c017c2cdf07c71c16b34820973d114"}, 1258 | {file = "preshed-3.0.2.tar.gz", hash = "sha256:61d73468c97c1d6d5a048de0b01d5a6fd052123358aca4823cdb277e436436cb"}, 1259 | ] 1260 | protobuf = [ 1261 | {file = "protobuf-3.11.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ef2c2e56aaf9ee914d3dccc3408d42661aaf7d9bb78eaa8f17b2e6282f214481"}, 1262 | {file = "protobuf-3.11.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:dd9aa4401c36785ea1b6fff0552c674bdd1b641319cb07ed1fe2392388e9b0d7"}, 1263 | {file = "protobuf-3.11.3-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:310a7aca6e7f257510d0c750364774034272538d51796ca31d42c3925d12a52a"}, 1264 | {file = "protobuf-3.11.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:e512b7f3a4dd780f59f1bf22c302740e27b10b5c97e858a6061772668cd6f961"}, 1265 | {file = "protobuf-3.11.3-cp35-cp35m-win32.whl", hash = "sha256:fdfb6ad138dbbf92b5dbea3576d7c8ba7463173f7d2cb0ca1bd336ec88ddbd80"}, 1266 | {file = "protobuf-3.11.3-cp35-cp35m-win_amd64.whl", hash = "sha256:e2f8a75261c26b2f5f3442b0525d50fd79a71aeca04b5ec270fc123536188306"}, 1267 | {file = "protobuf-3.11.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c40973a0aee65422d8cb4e7d7cbded95dfeee0199caab54d5ab25b63bce8135a"}, 1268 | {file = "protobuf-3.11.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:adf0e4d57b33881d0c63bb11e7f9038f98ee0c3e334c221f0858f826e8fb0151"}, 1269 | {file = "protobuf-3.11.3-cp36-cp36m-win32.whl", hash = "sha256:0bae429443cc4748be2aadfdaf9633297cfaeb24a9a02d0ab15849175ce90fab"}, 1270 | {file = "protobuf-3.11.3-cp36-cp36m-win_amd64.whl", hash = "sha256:e11df1ac6905e81b815ab6fd518e79be0a58b5dc427a2cf7208980f30694b956"}, 1271 | {file = "protobuf-3.11.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7774bbbaac81d3ba86de646c39f154afc8156717972bf0450c9dbfa1dc8dbea2"}, 1272 | {file = "protobuf-3.11.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8eb9c93798b904f141d9de36a0ba9f9b73cc382869e67c9e642c0aba53b0fc07"}, 1273 | {file = "protobuf-3.11.3-cp37-cp37m-win32.whl", hash = "sha256:fac513a9dc2a74b99abd2e17109b53945e364649ca03d9f7a0b96aa8d1807d0a"}, 1274 | {file = "protobuf-3.11.3-cp37-cp37m-win_amd64.whl", hash = "sha256:82d7ac987715d8d1eb4068bf997f3053468e0ce0287e2729c30601feb6602fee"}, 1275 | {file = "protobuf-3.11.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:73152776dc75f335c476d11d52ec6f0f6925774802cd48d6189f4d5d7fe753f4"}, 1276 | {file = "protobuf-3.11.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:52e586072612c1eec18e1174f8e3bb19d08f075fc2e3f91d3b16c919078469d0"}, 1277 | {file = "protobuf-3.11.3-py2.7.egg", hash = "sha256:2affcaba328c4662f3bc3c0e9576ea107906b2c2b6422344cdad961734ff6b93"}, 1278 | {file = "protobuf-3.11.3-py2.py3-none-any.whl", hash = "sha256:24e3b6ad259544d717902777b33966a1a069208c885576254c112663e6a5bb0f"}, 1279 | {file = "protobuf-3.11.3.tar.gz", hash = "sha256:c77c974d1dadf246d789f6dad1c24426137c9091e930dbf50e0a29c1fcf00b1f"}, 1280 | ] 1281 | py = [ 1282 | {file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"}, 1283 | {file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"}, 1284 | ] 1285 | pylint = [ 1286 | {file = "pylint-2.4.4-py3-none-any.whl", hash = "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"}, 1287 | {file = "pylint-2.4.4.tar.gz", hash = "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd"}, 1288 | ] 1289 | pyparsing = [ 1290 | {file = "pyparsing-2.4.6-py2.py3-none-any.whl", hash = "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"}, 1291 | {file = "pyparsing-2.4.6.tar.gz", hash = "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"}, 1292 | ] 1293 | pyphen = [ 1294 | {file = "Pyphen-0.9.5-py2.py3-none-any.whl", hash = "sha256:e172faf10992c8c9d369bdc83e36dbcf1121f4ed0d881f1a0b521935aee583b5"}, 1295 | {file = "Pyphen-0.9.5.tar.gz", hash = "sha256:3b633a50873156d777e1f1075ba4d8e96a6ad0a3ca42aa3ea9a6259f93f18921"}, 1296 | ] 1297 | pytest = [ 1298 | {file = "pytest-5.4.1-py3-none-any.whl", hash = "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172"}, 1299 | {file = "pytest-5.4.1.tar.gz", hash = "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"}, 1300 | ] 1301 | pyyaml = [ 1302 | {file = "PyYAML-5.3-cp27-cp27m-win32.whl", hash = "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d"}, 1303 | {file = "PyYAML-5.3-cp27-cp27m-win_amd64.whl", hash = "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6"}, 1304 | {file = "PyYAML-5.3-cp35-cp35m-win32.whl", hash = "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e"}, 1305 | {file = "PyYAML-5.3-cp35-cp35m-win_amd64.whl", hash = "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689"}, 1306 | {file = "PyYAML-5.3-cp36-cp36m-win32.whl", hash = "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994"}, 1307 | {file = "PyYAML-5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e"}, 1308 | {file = "PyYAML-5.3-cp37-cp37m-win32.whl", hash = "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5"}, 1309 | {file = "PyYAML-5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf"}, 1310 | {file = "PyYAML-5.3-cp38-cp38-win32.whl", hash = "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811"}, 1311 | {file = "PyYAML-5.3-cp38-cp38-win_amd64.whl", hash = "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20"}, 1312 | {file = "PyYAML-5.3.tar.gz", hash = "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615"}, 1313 | ] 1314 | regex = [ 1315 | {file = "regex-2020.2.20-cp27-cp27m-win32.whl", hash = "sha256:99272d6b6a68c7ae4391908fc15f6b8c9a6c345a46b632d7fdb7ef6c883a2bbb"}, 1316 | {file = "regex-2020.2.20-cp27-cp27m-win_amd64.whl", hash = "sha256:974535648f31c2b712a6b2595969f8ab370834080e00ab24e5dbb9d19b8bfb74"}, 1317 | {file = "regex-2020.2.20-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5de40649d4f88a15c9489ed37f88f053c15400257eeb18425ac7ed0a4e119400"}, 1318 | {file = "regex-2020.2.20-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:82469a0c1330a4beb3d42568f82dffa32226ced006e0b063719468dcd40ffdf0"}, 1319 | {file = "regex-2020.2.20-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d58a4fa7910102500722defbde6e2816b0372a4fcc85c7e239323767c74f5cbc"}, 1320 | {file = "regex-2020.2.20-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f1ac2dc65105a53c1c2d72b1d3e98c2464a133b4067a51a3d2477b28449709a0"}, 1321 | {file = "regex-2020.2.20-cp36-cp36m-win32.whl", hash = "sha256:8c2b7fa4d72781577ac45ab658da44c7518e6d96e2a50d04ecb0fd8f28b21d69"}, 1322 | {file = "regex-2020.2.20-cp36-cp36m-win_amd64.whl", hash = "sha256:269f0c5ff23639316b29f31df199f401e4cb87529eafff0c76828071635d417b"}, 1323 | {file = "regex-2020.2.20-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bed7986547ce54d230fd8721aba6fd19459cdc6d315497b98686d0416efaff4e"}, 1324 | {file = "regex-2020.2.20-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:046e83a8b160aff37e7034139a336b660b01dbfe58706f9d73f5cdc6b3460242"}, 1325 | {file = "regex-2020.2.20-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b33ebcd0222c1d77e61dbcd04a9fd139359bded86803063d3d2d197b796c63ce"}, 1326 | {file = "regex-2020.2.20-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bba52d72e16a554d1894a0cc74041da50eea99a8483e591a9edf1025a66843ab"}, 1327 | {file = "regex-2020.2.20-cp37-cp37m-win32.whl", hash = "sha256:01b2d70cbaed11f72e57c1cfbaca71b02e3b98f739ce33f5f26f71859ad90431"}, 1328 | {file = "regex-2020.2.20-cp37-cp37m-win_amd64.whl", hash = "sha256:113309e819634f499d0006f6200700c8209a2a8bf6bd1bdc863a4d9d6776a5d1"}, 1329 | {file = "regex-2020.2.20-cp38-cp38-manylinux1_i686.whl", hash = "sha256:25f4ce26b68425b80a233ce7b6218743c71cf7297dbe02feab1d711a2bf90045"}, 1330 | {file = "regex-2020.2.20-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9b64a4cc825ec4df262050c17e18f60252cdd94742b4ba1286bcfe481f1c0f26"}, 1331 | {file = "regex-2020.2.20-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9ff16d994309b26a1cdf666a6309c1ef51ad4f72f99d3392bcd7b7139577a1f2"}, 1332 | {file = "regex-2020.2.20-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:c7f58a0e0e13fb44623b65b01052dae8e820ed9b8b654bb6296bc9c41f571b70"}, 1333 | {file = "regex-2020.2.20-cp38-cp38-win32.whl", hash = "sha256:200539b5124bc4721247a823a47d116a7a23e62cc6695744e3eb5454a8888e6d"}, 1334 | {file = "regex-2020.2.20-cp38-cp38-win_amd64.whl", hash = "sha256:7f78f963e62a61e294adb6ff5db901b629ef78cb2a1cfce3cf4eeba80c1c67aa"}, 1335 | {file = "regex-2020.2.20.tar.gz", hash = "sha256:9e9624440d754733eddbcd4614378c18713d2d9d0dc647cf9c72f64e39671be5"}, 1336 | ] 1337 | requests = [ 1338 | {file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"}, 1339 | {file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"}, 1340 | ] 1341 | scipy = [ 1342 | {file = "scipy-1.4.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d"}, 1343 | {file = "scipy-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672"}, 1344 | {file = "scipy-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be"}, 1345 | {file = "scipy-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802"}, 1346 | {file = "scipy-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0"}, 1347 | {file = "scipy-1.4.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408"}, 1348 | {file = "scipy-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088"}, 1349 | {file = "scipy-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa"}, 1350 | {file = "scipy-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9"}, 1351 | {file = "scipy-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521"}, 1352 | {file = "scipy-1.4.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d"}, 1353 | {file = "scipy-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7"}, 1354 | {file = "scipy-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4"}, 1355 | {file = "scipy-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8"}, 1356 | {file = "scipy-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802"}, 1357 | {file = "scipy-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073"}, 1358 | {file = "scipy-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6"}, 1359 | {file = "scipy-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70"}, 1360 | {file = "scipy-1.4.1-cp38-cp38-win32.whl", hash = "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59"}, 1361 | {file = "scipy-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb"}, 1362 | {file = "scipy-1.4.1.tar.gz", hash = "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59"}, 1363 | ] 1364 | silence-tensorflow = [ 1365 | {file = "silence_tensorflow-1.1.1.tar.gz", hash = "sha256:e06bd7c8c8f1394eb19c29107dbab164a366a23b3f69d46ee0be6d2eace6e7bd"}, 1366 | ] 1367 | six = [ 1368 | {file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"}, 1369 | {file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"}, 1370 | ] 1371 | spacy = [ 1372 | {file = "spacy-2.2.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd740cb1b50cd86c648f64313be4734b0c2a2931d83761f46821061f42d791a3"}, 1373 | {file = "spacy-2.2.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01202066f75c7f2cfeb9c167c3184b5b0a9d465604b0ca553bd9e788353c5905"}, 1374 | {file = "spacy-2.2.4-cp36-cp36m-win_amd64.whl", hash = "sha256:f75ba238066455f5b5498a987b4e2c84705d92138e02e890e0b0a1d1eb2d9462"}, 1375 | {file = "spacy-2.2.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce3886e9bfb9071d2708d2cd7157ada93ab378bbb38cf079842181cd671fc6f9"}, 1376 | {file = "spacy-2.2.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:212314be762bd40dfbbeeba1c4742c242e4b6ea3f9340891f0ff282b2e723ed0"}, 1377 | {file = "spacy-2.2.4-cp37-cp37m-win_amd64.whl", hash = "sha256:c5e6f8155f6b54a8ef89637b3c7d553f0ddb5478c4dd568fde7392efbf8a26c8"}, 1378 | {file = "spacy-2.2.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7313b4fa921ed997d9719f99f5a375d672d2f4a908c7750033c4b37d9fa8547a"}, 1379 | {file = "spacy-2.2.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c1618c05bf65ae4bc94608f2390130ca21112fb3d920d1a03727691e3e7fb1b"}, 1380 | {file = "spacy-2.2.4-cp38-cp38-win_amd64.whl", hash = "sha256:877d8e157a708c8b77c0dea61e526632f6d57f27be64087dac22a4581facea68"}, 1381 | {file = "spacy-2.2.4.tar.gz", hash = "sha256:f0f3a67c5841e6e35d62c98f40ebb3d132587d3aba4f4dccac5056c4e90ff5b9"}, 1382 | ] 1383 | spacy-syllables = [ 1384 | {file = "spacy_syllables-1.0.0-py3-none-any.whl", hash = "sha256:3f13dd9724fdf1556969e2e9806fe65b6a70e62218762651347f8cf04aa64024"}, 1385 | {file = "spacy_syllables-1.0.0.tar.gz", hash = "sha256:5c9b26d9df738e478ebe37d086af31377b3de4ff8dd1ef1588339243ba783f84"}, 1386 | ] 1387 | srsly = [ 1388 | {file = "srsly-1.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c553a709fd56a37a07f969e849f55a0aeabaeb7677bebc588a640ab8ec134aa"}, 1389 | {file = "srsly-1.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:21cfb0e5dea2c4515b5c2daa78402d5782c6425b4f58af40d2e2cb45e4778d8c"}, 1390 | {file = "srsly-1.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46213d8f094b348a9433c825ac1eba36a21aa25a8bae6f29c2f9f053e15be961"}, 1391 | {file = "srsly-1.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2179cf1e88c250e89e40227bd5848341011c170079b3d424987d067de6a73f42"}, 1392 | {file = "srsly-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b94d8a13c60e3298a9ba12b1b211026e8378c7d087efd7ce46a3f2d8d4678d94"}, 1393 | {file = "srsly-1.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8beff52c104a7ffe4a15513a05dc0497998cf83aa1ca39454489994d18c1c07"}, 1394 | {file = "srsly-1.0.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:95849d84e8929be248a180e672c8ce1ed98b1341263bc983efdf8427465584f1"}, 1395 | {file = "srsly-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3f3975e8cb67194d26dd03508469b1303f8b994f30e7782f7eae25fef6dc4aad"}, 1396 | {file = "srsly-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d409beb7257208633c974c01f9dc3265562fb6802caee7de21880761ba87c3ed"}, 1397 | {file = "srsly-1.0.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:18bad26c34cf5a8853fbf018fd168a7bf2ea7ce661e66476c25dac711cb79c9b"}, 1398 | {file = "srsly-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:29434753a77481ec6129991f4116f983085cc8005c1ad963261124842e8c05fc"}, 1399 | {file = "srsly-1.0.2.tar.gz", hash = "sha256:59258b81d567df207f8a0a33c4b5fa232afccf1d927c8ce3ba5395bfd64c0ed8"}, 1400 | ] 1401 | tensorboard = [ 1402 | {file = "tensorboard-1.14.0-py2-none-any.whl", hash = "sha256:c35ba681a52d4922be6b225623cf77285033e7e4e68bac5c1d5490e47d129bb2"}, 1403 | {file = "tensorboard-1.14.0-py3-none-any.whl", hash = "sha256:50e0b1bdcd488dbe39fd9416976e089b2ff4df18d9f1fab47abf4c498209c3fc"}, 1404 | ] 1405 | tensorflow = [ 1406 | {file = "tensorflow-1.14.0-cp27-cp27m-macosx_10_11_x86_64.whl", hash = "sha256:46fc216db780b1a7b7a28cf6536d6ec0a171ef2fa546a24934ffe077c734c891"}, 1407 | {file = "tensorflow-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4643fcb6aa7bf9261620efe332f821ccdb63422ed5df33479e3c9592659cd64e"}, 1408 | {file = "tensorflow-1.14.0-cp33-cp33m-macosx_10_11_x86_64.whl", hash = "sha256:7dfefd6fc79fed477c2c550cb79f766fb40533e907e4efbfabc81339b45551a4"}, 1409 | {file = "tensorflow-1.14.0-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:0a95ab659de39748c418f342fd09bc444a21a7d66f4501593cf7ff6de3c603b1"}, 1410 | {file = "tensorflow-1.14.0-cp34-cp34m-macosx_10_11_x86_64.whl", hash = "sha256:c77888375ef02a5e7e55f81572db1bfa41e6f6597ae297e7bdafb22bf633f79e"}, 1411 | {file = "tensorflow-1.14.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:0a3784c6ab223b85a87ba6b752d2e6dc97b9345c078172d9b0bb90f3e448a320"}, 1412 | {file = "tensorflow-1.14.0-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:e20b5d81b07798db5054802405758fb685367772f1d602d359ba60baa34b6b46"}, 1413 | {file = "tensorflow-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:5ce034dba1db7cd829af2bf092c48dce96bb3da3e89223d7cb50f3eac2ddc19f"}, 1414 | {file = "tensorflow-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:5a9555eee142324a1cc3d6a5a9c0c8154ded8d013bf18cb459bc375e5d365191"}, 1415 | {file = "tensorflow-1.14.0-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:a3851118d2cc5e9e697503753c2d247dca0e98d5a85b5ea091103f27d9e57a38"}, 1416 | {file = "tensorflow-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4008a56940d23345e52ac4885fb4782604eb02574c2d95f3946f5b6baf0e1276"}, 1417 | {file = "tensorflow-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e84f2c8c7f23ad546076b1e73cec85706da19910b9a89c29cba3b64e297b2eb0"}, 1418 | {file = "tensorflow-1.14.0-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:2fc989a5d3be9f3dc96c20deaa3d5cc66d2bf76fe069c202c2914a7f4b5a9a35"}, 1419 | {file = "tensorflow-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d982a6fef251ec1358129213385ec027f87ee72246dffe1136ca6109def209f7"}, 1420 | {file = "tensorflow-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a4f154fa98cde5974117e05af444e0bed84cf431b8129c78a2de03a1ff7201c9"}, 1421 | ] 1422 | tensorflow-estimator = [ 1423 | {file = "tensorflow_estimator-1.14.0-py2.py3-none-any.whl", hash = "sha256:ca073f66063407a091d610ec1b22e39ea30248710198cc6f13769320bdbe3992"}, 1424 | ] 1425 | termcolor = [ 1426 | {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, 1427 | ] 1428 | thinc = [ 1429 | {file = "thinc-7.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9c40101f3148405cb291be2033758d011d348a5dea5d151811def8d1e466f25a"}, 1430 | {file = "thinc-7.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:ebb81b7ff8f852aae1b9c26dfb629344ab962e221ec87c83b2a7c4aec337477d"}, 1431 | {file = "thinc-7.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:23b77994be3376cd8efa85adfa1bcf0ffcb4cfd279f48a3ab842570f419334ca"}, 1432 | {file = "thinc-7.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2aa4cab69067f9dbe4ed7a1d937a4467edcc5f50d43996fba8c645f08ab1f387"}, 1433 | {file = "thinc-7.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:0522cc8b7a74e1de0902b55e1f141f889a088565f72ea0042a9c0f7f3ce83879"}, 1434 | {file = "thinc-7.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d1ee60d44ee840b75c0c0a3ade70908f05f414a65f20082483a5a5bfe82e9497"}, 1435 | {file = "thinc-7.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1375c11ed4f7c7178a5749e17b2f3bb1644c98ecc8874e402aceaeec63df6297"}, 1436 | {file = "thinc-7.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7bb69a8cace8d85a3f65d94176f381c5216df08d79a520b005653d0a23f523a8"}, 1437 | {file = "thinc-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f3c5786238991925694aba81fa305c1f2290a960fe5428a26b6f82134b260ad1"}, 1438 | {file = "thinc-7.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a7332e323b76d63e1cfd2e6bc08a5527c5a6a0eba39197c56af8fe6eef62ef69"}, 1439 | {file = "thinc-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5ac162b010f21f8fcc3fd10766025fad3ec670f6b2e0a72284912332d1ae292a"}, 1440 | {file = "thinc-7.4.0.tar.gz", hash = "sha256:523e9be1bfaa3ed1d03d406ce451b6b4793a9719d5b83d2ea6b3398b96bc58b8"}, 1441 | ] 1442 | toml = [ 1443 | {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, 1444 | {file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"}, 1445 | {file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"}, 1446 | ] 1447 | tqdm = [ 1448 | {file = "tqdm-4.43.0-py2.py3-none-any.whl", hash = "sha256:0d8b5afb66e23d80433102e9bd8b5c8b65d34c2a2255b2de58d97bd2ea8170fd"}, 1449 | {file = "tqdm-4.43.0.tar.gz", hash = "sha256:f35fb121bafa030bd94e74fcfd44f3c2830039a2ddef7fc87ef1c2d205237b24"}, 1450 | ] 1451 | txt2txt = [ 1452 | {file = "txt2txt-1.0.9-py2.py3-none-any.whl", hash = "sha256:763d5a18b9b84e99d5c7b2fc456daddc122c2e580ba83567c9b4699fd42ababf"}, 1453 | {file = "txt2txt-1.0.9.tar.gz", hash = "sha256:2b8b957eecf5312feb753a3e9b4683bbba96fb9da074ecbb6f1652a1f52bdc3d"}, 1454 | ] 1455 | typed-ast = [ 1456 | {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, 1457 | {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, 1458 | {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, 1459 | {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, 1460 | {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, 1461 | {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, 1462 | {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, 1463 | {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, 1464 | {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, 1465 | {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, 1466 | {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, 1467 | {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, 1468 | {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, 1469 | {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, 1470 | {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, 1471 | {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, 1472 | {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, 1473 | {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, 1474 | {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, 1475 | {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, 1476 | {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, 1477 | ] 1478 | urllib3 = [ 1479 | {file = "urllib3-1.25.8-py2.py3-none-any.whl", hash = "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc"}, 1480 | {file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"}, 1481 | ] 1482 | virtualenv = [ 1483 | {file = "virtualenv-20.0.10-py2.py3-none-any.whl", hash = "sha256:10750cac3b5a9e6eed54d0f1f8222c550dc47f84609c95cbc504d44a58a048b8"}, 1484 | {file = "virtualenv-20.0.10.tar.gz", hash = "sha256:8512e83f1d90f8e481024d58512ac9c053bf16f54d9138520a0929396820dd78"}, 1485 | ] 1486 | wasabi = [ 1487 | {file = "wasabi-0.6.0-py3-none-any.whl", hash = "sha256:da1f100e0025fe1e50fd67fa5b0b05df902187d5c65c86dc110974ab856d1f05"}, 1488 | {file = "wasabi-0.6.0.tar.gz", hash = "sha256:b8dd3e963cd693fde1eb6bfbecf51790171aa3534fa299faf35cf269f2fd6063"}, 1489 | ] 1490 | wcwidth = [ 1491 | {file = "wcwidth-0.1.8-py2.py3-none-any.whl", hash = "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603"}, 1492 | {file = "wcwidth-0.1.8.tar.gz", hash = "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8"}, 1493 | ] 1494 | werkzeug = [ 1495 | {file = "Werkzeug-1.0.0-py2.py3-none-any.whl", hash = "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16"}, 1496 | {file = "Werkzeug-1.0.0.tar.gz", hash = "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096"}, 1497 | ] 1498 | wheel = [ 1499 | {file = "wheel-0.34.2-py2.py3-none-any.whl", hash = "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e"}, 1500 | {file = "wheel-0.34.2.tar.gz", hash = "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96"}, 1501 | ] 1502 | wrapt = [ 1503 | {file = "wrapt-1.11.2.tar.gz", hash = "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"}, 1504 | ] 1505 | zipp = [ 1506 | {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, 1507 | {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, 1508 | ] 1509 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "gutenhaiku" 3 | version = "1.0.1" 4 | description = "A Commandline tool to mine haiku poems from text" 5 | authors = ["sloev "] 6 | homepage = "https://github.com/sloev/gutenhaiku" 7 | repository = "https://github.com/sloev/gutenhaiku" 8 | keywords = ["gutenhaiku", "gutenberg", "haiku"] 9 | license = "MIT" 10 | readme = "README.md" 11 | classifiers=[ 12 | "Development Status :: 6 - Mature", 13 | "Intended Audience :: Developers", 14 | "Natural Language :: English", 15 | "Programming Language :: Python :: 3.7", 16 | ] 17 | exclude = ["tests"] 18 | include = [ 19 | "LICENSE", 20 | "README.md", 21 | ] 22 | 23 | [tool.poetry.dependencies] 24 | python = "^3.7" 25 | spacy_syllables = "^1.0.0" 26 | spacy = "^2.2.4" 27 | deepcorrect = "^1.0.5" 28 | tensorflow = "1.14.0" 29 | click = "^7.1.1" 30 | silence_tensorflow = "^1.1.1" 31 | colorama = "^0.4.3" 32 | numpy = "1.16.4" 33 | tensorboard = "1.14.0" 34 | setuptools = ">=41.0.0" 35 | 36 | [tool.poetry.dev-dependencies] 37 | pytest = "^5.3.5" 38 | black = "^19.10b0" 39 | nox = "^2019.11.9" 40 | pylint = "^2.4.4" 41 | 42 | [tool.poetry.scripts] 43 | gutenhaiku = 'gutenhaiku.app:cli' 44 | 45 | [build-system] 46 | requires = ["poetry>=0.12"] 47 | build-backend = "poetry.masonry.api" 48 | -------------------------------------------------------------------------------- /tests/app_setup.txt: -------------------------------------------------------------------------------- 1 | ]2;Guten Haiku 2 | 3 | 4 | 5 | .| 6 | | | 7 | |'| ._____ 8 | ___ | | |. |' .----| 9 | _ .-' '-. | | .--'| || | _| | 10 | .-'| _.| | || '-__ | | | || | 11 | |' | |. | || | | | | || | 12 | | '-' ' '-' '-.' '` | 13 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | 15 | ██████╗ ██╗ ██╗████████╗███████╗███╗ ██╗ 16 | ██╔════╝ ██║ ██║╚══██╔══╝██╔════╝████╗ ██║ 17 | ██║ ███╗██║ ██║ ██║ █████╗ ██╔██╗ ██║ 18 | ██║ ██║██║ ██║ ██║ ██╔══╝ ██║╚██╗██║ 19 | ╚██████╔╝╚██████╔╝ ██║ ███████╗██║ ╚████║ 20 | ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ 21 | 22 | ██╗ ██╗ █████╗ ██╗██╗ ██╗██╗ ██╗ 23 | ██║ ██║██╔══██╗██║██║ ██╔╝██║ ██║ 24 | ███████║███████║██║█████╔╝ ██║ ██║ 25 | ██╔══██║██╔══██║██║██╔═██╗ ██║ ██║ 26 | ██║ ██║██║ ██║██║██║ ██╗╚██████╔╝ 27 | ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝ 28 | 29 | by Sloev 30 | 31 | 32 | 33 | 34 | Downloading models 35 | 36 | Done 37 | -------------------------------------------------------------------------------- /tests/app_setup_already_downloaded.txt: -------------------------------------------------------------------------------- 1 | ]2;Guten Haiku 2 | 3 | 4 | 5 | .| 6 | | | 7 | |'| ._____ 8 | ___ | | |. |' .----| 9 | _ .-' '-. | | .--'| || | _| | 10 | .-'| _.| | || '-__ | | | || | 11 | |' | |. | || | | | | || | 12 | | '-' ' '-' '-.' '` | 13 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | 15 | ██████╗ ██╗ ██╗████████╗███████╗███╗ ██╗ 16 | ██╔════╝ ██║ ██║╚══██╔══╝██╔════╝████╗ ██║ 17 | ██║ ███╗██║ ██║ ██║ █████╗ ██╔██╗ ██║ 18 | ██║ ██║██║ ██║ ██║ ██╔══╝ ██║╚██╗██║ 19 | ╚██████╔╝╚██████╔╝ ██║ ███████╗██║ ╚████║ 20 | ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ 21 | 22 | ██╗ ██╗ █████╗ ██╗██╗ ██╗██╗ ██╗ 23 | ██║ ██║██╔══██╗██║██║ ██╔╝██║ ██║ 24 | ███████║███████║██║█████╔╝ ██║ ██║ 25 | ██╔══██║██╔══██║██║██╔═██╗ ██║ ██║ 26 | ██║ ██║██║ ██║██║██║ ██╗╚██████╔╝ 27 | ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝ 28 | 29 | by Sloev 30 | 31 | 32 | 33 | 34 | Models are already downloaded, exiting 35 | -------------------------------------------------------------------------------- /tests/app_splash.txt: -------------------------------------------------------------------------------- 1 | ]2;Guten Haiku 2 | 3 | 4 | 5 | .| 6 | | | 7 | |'| ._____ 8 | ___ | | |. |' .----| 9 | _ .-' '-. | | .--'| || | _| | 10 | .-'| _.| | || '-__ | | | || | 11 | |' | |. | || | | | | || | 12 | | '-' ' '-' '-.' '` | 13 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14 | 15 | ██████╗ ██╗ ██╗████████╗███████╗███╗ ██╗ 16 | ██╔════╝ ██║ ██║╚══██╔══╝██╔════╝████╗ ██║ 17 | ██║ ███╗██║ ██║ ██║ █████╗ ██╔██╗ ██║ 18 | ██║ ██║██║ ██║ ██║ ██╔══╝ ██║╚██╗██║ 19 | ╚██████╔╝╚██████╔╝ ██║ ███████╗██║ ╚████║ 20 | ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ 21 | 22 | ██╗ ██╗ █████╗ ██╗██╗ ██╗██╗ ██╗ 23 | ██║ ██║██╔══██╗██║██║ ██╔╝██║ ██║ 24 | ███████║███████║██║█████╔╝ ██║ ██║ 25 | ██╔══██║██╔══██║██║██╔═██╗ ██║ ██║ 26 | ██║ ██║██║ ██║██║██║ ██╗╚██████╔╝ 27 | ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝ 28 | 29 | by Sloev 30 | 31 | 32 | 33 | 34 | 35 | 36 | Wat? Guten Haiku lets you extract haiku poems from text 37 | Usage: gutenhaiku \ 38 | -f frankenstein.txt \ 39 | -a 'Mary Wollstonecraft Shelley' \ 40 | -t 'frankenstein' \ 41 | -d '1818-01-01' 42 | Optional params: --commandfile [-cf] a file with comma seperated 43 | values for f,a,t,d params 44 | --outputfile [-o] the output file path [default haiku.json 45 | --eighties [-e] eighties mode [default 1] 46 | 47 | Advanced usage: gutenhaiku \ 48 | -f frankenstein.txt \ 49 | -a 'Mary Wollstonecraft Shelley' \ 50 | -t 'frankenstein' \ 51 | -d '1818-01-01' \ 52 | -f dracula.txt \ 53 | -a 'Bram Stoker' \ 54 | -t 'dracula' \ 55 | -d '1897-05-26' 56 | 57 | setup: gutenhaiku setup 58 | downloads AI models 59 | 60 | -------------------------------------------------------------------------------- /tests/input_text.txt: -------------------------------------------------------------------------------- 1 | A grin was on the face of the monster; he seemed to jeer, as with his 2 | fiendish finger he pointed towards the corpse of my wife. I rushed towards 3 | the window, and drawing a pistol from my bosom, fired; but he eluded me, 4 | leaped from his station, and running with the swiftness of lightning, 5 | plunged into the lake. -------------------------------------------------------------------------------- /tests/test_all.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | from click.testing import CliRunner 4 | 5 | from gutenhaiku.app import cli 6 | from gutenhaiku import models 7 | 8 | 9 | def test_0_splash(): 10 | runner = CliRunner() 11 | result = runner.invoke(cli) 12 | with open("tests/app_splash.txt") as f: 13 | assert result.output == f.read() 14 | 15 | 16 | def test_1_setup(): 17 | runner = CliRunner() 18 | result = runner.invoke(cli, ["setup"]) 19 | setup = open("tests/app_setup.txt").read() 20 | already_downloaded_setup = open("tests/app_setup_already_downloaded.txt").read() 21 | assert any(result.output == output for output in [setup, already_downloaded_setup]) 22 | 23 | 24 | def test_2_extract_haikus(): 25 | runner = CliRunner() 26 | input_text = open("tests/input_text.txt").read() 27 | 28 | with runner.isolated_filesystem(): 29 | with open("input_text.txt", "w") as f: 30 | f.write(input_text) 31 | 32 | result = runner.invoke( 33 | cli, 34 | [ 35 | "-o", 36 | "haikus.json", 37 | "-f", 38 | "input_text.txt", 39 | "-a", 40 | "mary shelley", 41 | "-t", 42 | "frankenstein", 43 | "-d", 44 | "1818-01-01", 45 | ], 46 | ) 47 | 48 | haikus = [json.loads(l) for l in open("haikus.json").readlines()] 49 | print(json.dumps(haikus)) 50 | print(result.output) 51 | assert haikus == [ 52 | { 53 | "page": 0, 54 | "word_number": 33, 55 | "haiku": [ 56 | "Towards the corpse of.", 57 | "My wife I rushed towards the.", 58 | "Window and drawing.", 59 | ], 60 | "author": "mary shelley", 61 | "title": "frankenstein", 62 | "date": "1818-01-01T00:00:00", 63 | } 64 | ] 65 | --------------------------------------------------------------------------------