diff --git a/pwgen_fr/generate.py b/pwgen_fr/generate.py index 677853b..7a7a899 100644 --- a/pwgen_fr/generate.py +++ b/pwgen_fr/generate.py @@ -1,37 +1,72 @@ import secrets -from . import lexique +from . import word_db -lex = lexique.Lexique.parse() +wdb = word_db.WordDb.autoload() def gen_phrase4(): - out = [] - out.append(secrets.choice(lex.most_common(lexique.CatGram.ADJECTIF))) - out.append(secrets.choice(lex.most_common(lexique.CatGram.NOM))) - out.append(secrets.choice(lex.most_common(lexique.CatGram.VERBE))) - out.append(secrets.choice(lex.most_common(lexique.CatGram.NOM))) - return " ".join(map(lambda x: x.word, out)) + """Generates a sentence with four words, of structure Adjective Noun Verb Adverb""" + nombre = word_db.Nombre.pick() + temps = word_db.Temps.pick() + + adj = secrets.choice(wdb.adjectifs) + nom = secrets.choice(wdb.noms) + verbe = secrets.choice(wdb.verbes) + adverbe = secrets.choice(wdb.adverbes) + + return " ".join( + [ + adj.accord(nom.genre_or_pick, nombre), + nom.accord(nombre), + verbe.accord(temps, nombre), + adverbe.accord(), + ] + ) + + +def gen_phrase6(): + """Generates a sentence with six words, of structure Adjective Noun Verb Adjective + Noun Adverb""" + nombres = [word_db.Nombre.pick() for _ in range(2)] + temps = word_db.Temps.pick() + + adj0 = secrets.choice(wdb.adjectifs) + nom0 = secrets.choice(wdb.noms) + verbe = secrets.choice(wdb.verbes) + adj1 = secrets.choice(wdb.adjectifs) + nom1 = secrets.choice(wdb.noms) + adverbe = secrets.choice(wdb.adverbes) + + return " ".join( + [ + adj0.accord(nom0.genre_or_pick, nombres[0]), + nom0.accord(nombres[0]), + verbe.accord(temps, nombres[0]), + adj1.accord(nom1.genre_or_pick, nombres[1]), + nom1.accord(nombres[1]), + adverbe.accord(), + ] + ) def gen_rand(n=4): + """Generates a fully random sequence of n words, without grammatical consistency""" out = [] for _ in range(n): - cat = secrets.choice( - ( - lexique.CatGram.ADJECTIF, - lexique.CatGram.NOM, - lexique.CatGram.VERBE, - lexique.CatGram.ADVERBE, - ) - ) - out.append(secrets.choice(lex.most_common(cat))) - return " ".join(map(lambda x: x.word, out)) + word_cat = secrets.choice(list(wdb.CATEGORY_TO_ATTR)) + if word_cat == word_db.Nom: + nombre = word_db.Nombre.pick() + out.append(secrets.choice(wdb.noms).accord(nombre)) + elif word_cat == word_db.Adjectif: + genre = word_db.Genre.pick() + nombre = word_db.Nombre.pick() + out.append(secrets.choice(wdb.adjectifs).accord(genre, nombre)) + elif word_cat == word_db.Verbe: + temps = word_db.Temps.pick() + nombre = word_db.Nombre.pick() + out.append(secrets.choice(wdb.verbes).accord(temps, nombre)) + elif word_cat == word_db.Adverbe: + out.append(secrets.choice(wdb.adverbes).accord()) - -def gen_nom(n=4): - out = [] - for _ in range(n): - cat = lexique.CatGram.NOM - out.append(secrets.choice(lex.most_common(cat))) - return " ".join(map(lambda x: x.word, out)) + return " ".join(out)