├── .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 | [](https://travis-ci.org/sloev/gutenhaiku) [](https://pypi.python.org/pypi/gutenhaiku) [](https://pypi.python.org/pypi/gutenhaiku)
6 |
7 |
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 |
--------------------------------------------------------------------------------