Start ankimaker.

This commit is contained in:
gabriel becker 2022-11-15 17:38:56 +11:00
commit f76f25eeb7
7 changed files with 81 additions and 0 deletions

23
README.md Normal file
View File

@ -0,0 +1,23 @@
# Ankimaker
WIP
A CLI app to generate anki decks.
From csv file, with configurable parameters, filters and media.
From epub, finding difficult* words in the book and getting their translations.
*I still don't know what 'difficult' will mean. Probably difficult words will be less frequent words that are more frequent in the text than in some corpus, cut above a grade threshold. The grades will map percentiles of frequency.
| Language Level | Number of Base Words Needed |
| ----- | ------ |
| A1 | 500|
| A2 | 1000|
| B1 | 2000|
| B2 | 4000|
| C1 | 8000|
| C2 | 16000|
This project is only possible because of the awesome work of genanki team.

9
ankimaker/__main__.py Normal file
View File

@ -0,0 +1,9 @@
from ankimaker.commands import cli
def main():
cli(prog_name='ankimaker')
if __name__ == '__main__':
main()

View File

@ -0,0 +1,7 @@
import click
@click.group("cli")
def cli():
pass
from ankimaker.commands.from_csv import generate_anki

View File

@ -0,0 +1,38 @@
import click
import re
from ankimaker.commands import cli
from ankimaker.tasks import basic_pandas_to_anki
@cli.command('csv')
@click.option('-i', '--input', 'input_file', type=click.Path(exists=True))
@click.option('-o', '--output', 'output_file', type=click.Path(exists=False))
@click.option('-c', '--conf', 'config_file', default=None, type=click.STRING)
@click.option('-n', '--name', 'name', default=None, type=click.STRING)
def generate_anki(
input_file,
output_file,
name,
config_file,
):
output_file = parse_output(output_file)
if name is None:
name = get_name_from_output(output_file)
basic_pandas_to_anki(input_file, output_file, name)
def parse_output(filename):
filetype = filename.split('.')[-1] if len(filename.split('.')) > 0 else None
if filetype is None:
return filename + '.apkg'
elif filetype != 'apkg':
filename.replace(filetype, 'apkg')
return filename+filetype
else:
return filename
def get_name_from_output(filename):
updated_file = filename.split('/')[-1] if len(filename.split('/')) > 0 else filename
updated_file = re.sub(r'(.apkg)', '', updated_file)
return updated_file

View File

View File

@ -0,0 +1 @@
from .basic_csv_to_anki import basic_pandas_to_anki

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
click
genanki
pandas