Skip to content

Commit

Permalink
feat: script to filter and generate labels (with translations) (#1215)
Browse files Browse the repository at this point in the history
  • Loading branch information
raphodn authored Jan 1, 2025
1 parent a7db0ef commit 56c4f04
Show file tree
Hide file tree
Showing 151 changed files with 271 additions and 0 deletions.
121 changes: 121 additions & 0 deletions data/labels/generate_labels_translations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import json
from openfoodfacts.taxonomy import get_taxonomy


OLD_LABELS_FILE = "src/data/labels-tags.json"

EXTRA = [
"en:organic",
]


def get_languages():
with open("src/i18n/data/languages.json") as f:
return json.load(f)


def get_label_taxonomy():
return get_taxonomy("label")


def get_taxonomy_node_by_id(taxonomy, node_id):
return next((node for node in taxonomy.iter_nodes() if node.id == node_id), None)


def get_taxonomy_node_list_by_id_list(taxonomy, node_id_list):
node_list = list()
for node_id in node_id_list:
taxonomy_node = get_taxonomy_node_by_id(taxonomy, node_id)
if taxonomy_node:
node_list.append(taxonomy_node)
return node_list


def taxonomy_node_list_to_dict_list(node_list, delete_parents=False):
node_dict_list = list()
for node in node_list:
node_dict = { "id": node.id, **node.to_dict() }
if delete_parents:
del node_dict["parents"]
node_dict_list.append(node_dict)
return node_dict_list


def get_taxonomy_node_children_full_list(taxonomy, node_parent):
children_node_list = list()
for node in taxonomy.iter_nodes():
node_parents = node.get_parents_hierarchy()
if next((n for n in node_parents if n == node_parent), None):
children_node_list.append(node)
return children_node_list


def filter_labels(taxonomy):
node_list = list()
for node in taxonomy.iter_nodes():
if node.id in EXTRA:
node_list.append(node)
return node_list


def write_labels_to_files(origins):
languages = get_languages()
for language in languages:
language_code = language['code']
language_labels = list()
# for each origin, get translation (or default to en)
for origin in origins:
language_origin_name = origin['name'][language_code] if (language_code in origin['name']) else origin['name']['en']
language_labels.append({"id": origin['id'], "name": language_origin_name})
# order by name
language_labels = sorted(language_labels, key=lambda x: x['name'])
# write to file
with open(f"src/data/labels/{language['code']}.json", "w") as f:
json.dump(language_labels, f, ensure_ascii=False)


def compare_new_labels_with_old_labels():
with open("src/data/labels-tags.json") as f:
old_labels = json.load(f)
print("old_labels", len(old_labels))

with open("src/data/labels/en.json") as f:
new_labels = json.load(f)
print("new_labels", len(new_labels))

# check missing in new
origin_missing_in_new_list = list()
for origin in old_labels:
found = next((c for c in new_labels if c['id'] == origin['id']), None)
if not found:
origin_missing_in_new_list.append(origin)
print("missing in new", len(origin_missing_in_new_list))
print(origin_missing_in_new_list)

# check missing in old
origin_missing_in_old_list = list()
for origin in old_labels:
found = next((c for c in old_labels if c['id'] == origin['id']), None)
if not found:
origin_missing_in_old_list.append(origin)
print("missing in old", len(origin_missing_in_old_list))


if __name__ == "__main__":
"""
How-to run ?
> pip install openfoodfacts
> python data/labels/generate_labels_translations.py
"""
# init
LABELS_FULL = get_label_taxonomy()
print("Total number of labels:", len(LABELS_FULL))

labels_filtered = filter_labels(LABELS_FULL)
labels_filtered_to_dict_list = taxonomy_node_list_to_dict_list(list(labels_filtered), delete_parents=True)
print("Labels remaining:", len(labels_filtered_to_dict_list))

write_labels_to_files(labels_filtered_to_dict_list)
print("Wrote to language files")

compare_new_labels_with_old_labels()
1 change: 1 addition & 0 deletions src/data/labels/aa.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ach.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/af.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ak.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/am.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ar.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/as.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ast.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/az.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/be.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ber.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/bg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Био"}]
1 change: 1 addition & 0 deletions src/data/labels/bm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/bn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/bo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/br.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/bs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ca.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Orgànic"}]
1 change: 1 addition & 0 deletions src/data/labels/ce.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/chr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/co.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/crs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/cs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Bio"}]
1 change: 1 addition & 0 deletions src/data/labels/cv.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/cy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/da.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Økologisk"}]
1 change: 1 addition & 0 deletions src/data/labels/de.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Bio"}]
1 change: 1 addition & 0 deletions src/data/labels/el.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/en.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/en_AU.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/en_GB.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/eo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/es.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Ecológico"}]
1 change: 1 addition & 0 deletions src/data/labels/et.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/eu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/fa.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/fi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Luomu"}]
1 change: 1 addition & 0 deletions src/data/labels/fil.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/fo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/fr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Bio"}]
1 change: 1 addition & 0 deletions src/data/labels/ga.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/gd.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/gl.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/gu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ha.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/he.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "אורגני"}]
1 change: 1 addition & 0 deletions src/data/labels/hi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/hr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Ekološki uzgoj"}]
1 change: 1 addition & 0 deletions src/data/labels/ht.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/hu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Bio"}]
1 change: 1 addition & 0 deletions src/data/labels/hy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/id.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ii.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/is.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/it.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Biologico"}]
1 change: 1 addition & 0 deletions src/data/labels/iu.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ja.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/jv.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ka.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/kab.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/kk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/km.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/kmr_TR.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/kn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ko.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "유기농"}]
1 change: 1 addition & 0 deletions src/data/labels/kw.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ky.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/la.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/lb.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/lo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/lt.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Ekologiškas"}]
1 change: 1 addition & 0 deletions src/data/labels/lv.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/mg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/mi.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ml.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/mn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/mr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ms.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/mt.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/my.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/nb.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/ne.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/nl_BE.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/nl_NL.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/nn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/no.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/nr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/oc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/or.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/pa.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
1 change: 1 addition & 0 deletions src/data/labels/pl.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Ekologiczny"}]
1 change: 1 addition & 0 deletions src/data/labels/pt_BR.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"id": "en:organic", "name": "Organic"}]
Loading

0 comments on commit 56c4f04

Please sign in to comment.