From 3c31c333f2776bd5afb8b84d7cb07eda667affae Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sun, 9 Oct 2022 02:29:53 +0300 Subject: [PATCH] Widen the recognizer capabilities for names --- core/views/statistics.py | 8 ++- parsers/people.py | 117 +++++++++++++++++++++++---------------- templates/aliases.html | 11 ++++ 3 files changed, 88 insertions(+), 48 deletions(-) diff --git a/core/views/statistics.py b/core/views/statistics.py index 2e6684f..fb26254 100644 --- a/core/views/statistics.py +++ b/core/views/statistics.py @@ -182,5 +182,11 @@ def aliases(request, year): persons = Person.objects.all() aliasdict = GetPersonExpeditionNameLookup(expo) + res = aliasdict + # invert + invert ={} + for p in res: + invert[res[p]].append(p) + - return render(request,'aliases.html', {'year': year, 'aliasdict': aliasdict,'personexpeditions': personexpeditions, 'persons': persons}) + return render(request,'aliases.html', {'year': year, 'aliasdict': aliasdict, 'invert': invert,'personexpeditions': personexpeditions, 'persons': persons}) diff --git a/parsers/people.py b/parsers/people.py index 12fba14..a58167e 100644 --- a/parsers/people.py +++ b/parsers/people.py @@ -126,11 +126,6 @@ def load_people_expos(): save_carefully(PersonExpedition, lookupAttribs, nonLookupAttribs) print("", flush=True) - -# used in other referencing parser functions -# expedition name lookup cached for speed (it's a very big list) -# should have a LIST of nicknames, just populate the first entry from folk.csv - def who_is_this(year,possibleid): expo = Expedition.objects.filter(year=year) personexpedition = GetPersonExpeditionNameLookup(expo)[possibleid.lower()] @@ -145,7 +140,23 @@ def who_is_this(year,possibleid): Gpersonexpeditionnamelookup = { } def GetPersonExpeditionNameLookup(expedition): global Gpersonexpeditionnamelookup + + def apply_variations(f, l): + f = f.lower() + l = l.lower() + variations = [] + variations.append(f) + variations.append(l) + variations.append(f + " " + l) + variations.append(f + " " + l[0]) + variations.append(f + l[0]) + variations.append(f[0] + " " + l) + variations.append(f[0] + l) + variations.append(f[0] + l[0]) # initials e.g. gb or bl + return variations + res = Gpersonexpeditionnamelookup.get(expedition.name) + if res: return res @@ -161,47 +172,62 @@ def GetPersonExpeditionNameLookup(expedition): f = unidecode(unescape(personexpedition.person.first_name.lower())) l = unidecode(unescape(personexpedition.person.last_name.lower())) full = unidecode(unescape(personexpedition.person.fullname.lower())) - if l: - possnames.append(f + " " + l) - possnames.append(f + " " + l[0]) - possnames.append(f + l[0]) - possnames.append(f[0] + " " + l) - possnames.append(f[0] + l[0]) # initials e.g. gb or bl - possnames.append(f) - - # But these aliases do not take advantage of the variations above - if f'{f} {l}' == "Phil Underwood": - possnames.append("Phil Underpants") - if f'{f} {l}' == "Naomi Griffiths": - possnames.append("Naomi Makin") - if f'{f} {l}' == "Cat Hulse": - possnames.append("Catherine Hulse") - possnames.append("Cat Henry") - if f'{f} {l}' == "Jess Stirrups": - possnames.append("Jessica Stirrups") - if f'{f} {l}' == "Nat Dalton": - possnames.append("Nathaniel Dalton") - - lim = min(4, len(f)+1) # short form, e.g. Dan for Daniel. May be duplicate, e.g. several Dave - if f[:lim] not in short: - short[f[:lim]]= personexpedition - else: - dellist.append(f[:lim]) + n = unidecode(unescape(personexpedition.nickname.lower())) if full not in possnames: possnames.append(full) - if personexpedition.nickname not in possnames: - possnames.append(personexpedition.nickname.lower()) - if l: - # This allows for nickname to be used for short name - # eg Phil S is adding Phil Sargent to the list - n = personexpedition.nickname.lower() - if str(n + " " + l) not in possnames: - possnames.append(n + " " + l) - if str(n + " " + l[0]) not in possnames: - possnames.append(n + " " + l[0]) - if str(n + l[0]) not in possnames: - possnames.append(n + l[0]) + if n not in possnames: + possnames.append(n) + if l: + possnames += apply_variations(f,l) + + if n: + possnames += apply_variations(n, l) + if f == "Robert".lower(): + possnames += apply_variations("Bob", l) + if f == "Andrew".lower(): + possnames += apply_variations("Andy", l) + if f == "Andy".lower(): + possnames += apply_variations("Andrew", l) + if f == "Michael".lower(): + possnames += apply_variations("Mike", l) + if f == "David".lower(): + possnames += apply_variations("Dave", l) + if f == "Peter".lower(): + possnames += apply_variations("Pete", l) + + if f == "Becka".lower(): + possnames += apply_variations("Rebecca", l) + + if f'{f} {l}' == "Andy Waddington".lower(): + possnames += apply_variations("AER", "Waddington") + if f'{f} {l}' == "Phil Underwood".lower(): + possnames += apply_variations("Phil", "Underpants") + if f'{f} {l}' == "Naomi Griffiths".lower(): + possnames += apply_variations("Naomi", "Makin") + if f'{f} {l}' == "Cat Hulse".lower(): + possnames += apply_variations("Catherine", "Hulse") + possnames += apply_variations("Cat", "Henry") + if f'{f} {l}' == "Jess Stirrups".lower(): + possnames += apply_variations("Jessica", "Stirrups") + if f'{f} {l}' == "Nat Dalton".lower(): + possnames += apply_variations("Nathaniel", "Dalton") + if f'{f} {l}' == "Mike Richardson".lower(): + possnames.append("MTA") + possnames.append("Mike the Animal") + possnames.append("Animal") + if f'{f} {l}' == "Eric Landgraf".lower(): + possnames.append("Eric C.Landgraf") + possnames.append("Eric C. Landgraf") + + for i in [4, 5, 6]: + lim = min(i, len(f)+1) # short form, e.g. Dan for Daniel. + if f[:lim] not in short: + short[f[:lim]]= personexpedition + else: + dellist.append(f[:lim]) + + possnames = set(possnames) # remove duplicates for possname in possnames: if possname in res: duplicates.add(possname) @@ -216,11 +242,8 @@ def GetPersonExpeditionNameLookup(expedition): del short[possname] for shortname in short: res[shortname] = short[shortname] + - print(f'{expedition.name}', end= ' ') - for n in res: - print(f'{n},', end= ' ') - print('') Gpersonexpeditionnamelookup[expedition.name] = res return res diff --git a/templates/aliases.html b/templates/aliases.html index 30b4443..23a7d5f 100644 --- a/templates/aliases.html +++ b/templates/aliases.html @@ -26,6 +26,17 @@ {% endfor %} + + + +{% for key, value in invert.items %} + + + + +{% endfor %} +
whoaliases
{{key}}{{value}}
+

The aliases below are specified in the folk.csv file. Only one alias is possible in that format.
FirstLastFull nameNicknameexpo firstexpo last