forked from mtlpy/mtlpy-release
-
Notifications
You must be signed in to change notification settings - Fork 0
/
qcpyname.py
99 lines (79 loc) · 2.38 KB
/
qcpyname.py
1
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env python
# -*- coding: UTF8 -*-
import sys
import os
import re
import codecs
import json
from random import choice
from argparse import ArgumentParser
fichiers = [
'fr.adj',
'fr.nom',
]
def parse_args():
"""Parsing des arguments."""
parser = ArgumentParser(description=__doc__)
parser.add_argument("lettre",
help="Lettre initiale")
parser.add_argument("-n", "--nombre", type=int, default=1,
help=u"Nombre de noms à générer")
return parser.parse_args()
def telecharge_wolf():
"""
Télécharge WOLF - wordnet français dans le répertoire courant.
Nécessite wget.
"""
os.system(
'wget https://gforge.inria.fr/frs/download.php/27165/wolf-0.1.5.xml.gz '
'&& gunzip wolf-0.1.5.xml.gz'
)
def parse_wolf():
"""
Parse le fichier WOLF en fr.adj et fr.nom
"""
adjs, noms = [], []
r = re.compile(r"<LITERAL>(.+?)<")
with codecs.open('wolf-0.1.5.xml', 'r', 'utf-8') as f:
for ligne in f:
if '-a</ID>' in ligne:
m = r.search(ligne)
if m:
adjs.append(m.groups()[0].strip())
if '-n</ID>' in ligne:
m = r.search(ligne)
if m:
noms.append(m.groups()[0].strip())
adjs = sorted(set(adjs))
noms = sorted(set(noms))
with codecs.open('fr.adj', 'w', 'utf-8') as f:
json.dump(adjs, f)
with codecs.open('fr.nom', 'w', 'utf-8') as f:
json.dump(noms, f)
return adjs, noms
def parse_json():
"""Récupère les fichiers générés précédemment."""
resultat = []
for fichier in fichiers:
with codecs.open(fichier, 'r', 'utf-8') as f:
resultat.append(json.load(f))
return resultat
def affiche_noms(adjs, noms, args):
"""Génère et affiche des noms"""
adjs = [x for x in adjs if x.startswith(args.lettre)]
noms = [x for x in noms if x.startswith(args.lettre)]
for i in range(args.nombre):
print("{} {}".format(
choice(adjs),
choice(noms),
))
def main():
if not all(os.path.exists(fichier) for fichier in fichiers):
telecharge_wolf()
adjs, noms = parse_wolf()
else:
adjs, noms = parse_json()
args = parse_args()
affiche_noms(adjs, noms, args)
if __name__ == '__main__':
main()