-
Notifications
You must be signed in to change notification settings - Fork 0
/
preprocessing.py
73 lines (63 loc) · 2.62 KB
/
preprocessing.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
import pandas as pd
from unidecode import unidecode
import pickle
"""
Script qui permet de générer un pickle à partir des données fusionnées de la librairie 'gender_guesser' (https://pypi.org/project/gender-guesser/)
et de Kaggle (https://www.kaggle.com/datasets/haezer/french-baby-names?select=national_names.csv).
Présentes dans le fichier 'nam_dict_merged.txt'.
"""
with open('nam_dict_merged.txt', 'r') as f :
names = []
genders = []
frequencies = []
for line in f :
if line[0] not in "#=" and line[29] != "+" :
parts = line.split()
country_values = line[30:-1]
name = parts[1]
name = name.lower()
name = unidecode(name)
freq_max = max(country_values)
names.append(name)
genders.append(parts[0])
frequencies.append(freq_max)
df = pd.DataFrame({'gender': genders, 'name': names, 'freq': frequencies})
df = df.sort_values("freq",ignore_index=True)
df = df.drop_duplicates(subset=["gender","name"], keep='last',ignore_index=True)
df = df.drop(columns=['freq'])
# print(df.to_string())
my_dict = {}
for index, row in df.iterrows():
my_dict[row['name'].lower()] = row['gender']
# print(my_dict)
def modified_name_plus(my_dict):
key_plus = []
for key in my_dict :
if "+" in key :
key_plus.append(key)
for key in key_plus:
value = my_dict[key]
new_key_space = key.replace('+', ' ')
new_key = key.replace('+', '')
new_key_dash = key.replace('+', '-')
my_dict[new_key_space] = value # ajouter une copie de la paire clé-valeur avec un espace à la fin du dictionnaire
my_dict[new_key] = value # ajouter une copie de la paire clé-valeur sans le "+" à la fin du dictionnaire
my_dict[new_key_dash] = value
del my_dict[key] # supprimer la paire clé-valeur d'origine contenant le "+"
return my_dict
def modified_name_apostrophe(my_dict) :
key_apostrophe = []
for key in my_dict :
if "'" in key :
key_apostrophe.append(key)
for key in key_apostrophe:
value = my_dict[key]
new_key = key.replace("'", "")
my_dict[new_key] = value # ajouter une copie de la paire clé-valeur sans le "+" à la fin du dictionnaire
del my_dict[key] # supprimer la paire clé-valeur d'origine contenant le "+"
return my_dict
my_dict_1 = modified_name_plus(my_dict)
my_dict_modified = modified_name_apostrophe(my_dict_1)
# print(my_dict_modified)
with open('name_gender.pickle', 'wb') as handle:
pickle.dump(my_dict_modified, handle, protocol=pickle.HIGHEST_PROTOCOL)