Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebased UK Parse PR #56

Merged
merged 16 commits into from
Jun 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion lingua_franca/format.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ def year_format(self, dt, lang, bc):
dt.year, number_tuple, lang, formatted_decade, formatted_hundreds)

s = self._format_string(dt.year, 'year_format', lang)

return re.sub(' +', ' ',
s.format(
year=str(dt.year),
Expand Down
42 changes: 27 additions & 15 deletions lingua_franca/lang/format_uk.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ def nice_number_uk(number, speech=True, denominators=range(1, 21)):

if not speech:
if num == 0:
# TODO: Number grouping? E.g. "1,000,000"
return str(whole)
else:
return '{} {}/{}'.format(whole, num, den)
Expand All @@ -55,9 +54,6 @@ def nice_number_uk(number, speech=True, denominators=range(1, 21)):
den_str = _FRACTION_STRING_UK[den]

if whole == 0:
# if num == 1 and den <= 4:
# return_string = '{}'.format(den_str)
# else:
return_string = '{} {}'.format(num, den_str)
elif num == 1 and den == 2:
return_string = '{} з половиною'.format(whole)
Expand Down Expand Up @@ -370,7 +366,7 @@ def nice_time_uk(dt, speech=True, use_24hour=True, use_ampm=False):
speak += pronounce_number_uk(int(string[1]))
else:
speak = pronounce_hour_uk(int(string[0:2]))
if speak == None:
if speak is None:
speak = pronounce_number_uk(int(string[0:2]))

speak += " "
Expand Down Expand Up @@ -400,25 +396,29 @@ def nice_time_uk(dt, speech=True, use_24hour=True, use_ampm=False):
else:
speak = pronounce_hour_uk(hour)

if use_ampm:
if dt.hour < 4:
speak += " ночі"
elif dt.hour < 12:
speak += " ранку"
elif dt.hour < 18:
speak += " дня"
else:
speak += " вечора"

if dt.minute == 0:
if not use_ampm:
if dt.hour % 12 == 1:
return speak
return speak + " " + plural_uk(dt.hour % 12, "година", "години", "годин")
# TODO: the `one`/`few`/`many` structure doesn't cover
# all cases in Ukrainian
return speak + " " + plural_uk(dt.hour % 12, one="година",
few="години", many="годин")
else:
if dt.minute < 10:
speak += " нуль"
speak += " " + pronounce_number_uk(dt.minute)

if use_ampm:
if dt.hour < 4:
speak += " ночі"
elif dt.hour < 12:
speak += " ранку"
elif dt.hour < 18:
speak += " дня"
else:
speak += " вечора"
return speak


Expand Down Expand Up @@ -472,6 +472,17 @@ def pronounce_hour_uk(num):
if num in HOURS_UK.keys():
return HOURS_UK[num] + ' година'

def pronounce_mins_uk(num):
if num in _NUM_STRING_UK.keys():
if num == 1:
return 'одна хвилина'
if num == 2:
return 'дві хвилини'
if num in [10, 20, 30, 40, 50, 60]:
_NUM_STRING_UK[num] + 'хвилин'
else:
return


def pronounce_hour_genitive_uk(num):
if num in HOURS_UK.keys():
Expand All @@ -484,6 +495,7 @@ def pronounce_hour_genitive_uk(num):

def pronounce_number_feminine_uk(num):
pronounced = pronounce_number_uk(num)

num %= 100
if num % 10 == 1 and num // 10 != 1:
return pronounced[:-2] + "на"
Expand Down
6 changes: 3 additions & 3 deletions lingua_franca/lang/parse_uk.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#
# Copyright 2017 Mycroft AI Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -511,7 +510,7 @@ def _extract_whole_number_with_text_uk(tokens, short_scale, ordinals):
word not in multiplies,
current_val >= 10
]):
# Backtrack - we've got numbers we can't sum
# Backtrack - we've got numbers we can't sum.
number_words.pop()
val = prev_val
break
Expand Down Expand Up @@ -1643,7 +1642,8 @@ def extract_numbers_uk(text, short_scale=True, ordinals=False):


class UkrainianNormalizer(Normalizer):
with open(resolve_resource_file("text/uk-ua/normalize.json"), encoding='utf8') as f:
with open(resolve_resource_file("text/uk-ua/normalize.json"),
encoding='utf8') as f:
_default_config = json.load(f)


Expand Down
117 changes: 59 additions & 58 deletions lingua_franca/res/text/uk-ua/date_time.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,49 +58,49 @@
"yesterday": "вчора"
},
"date_time_format": {
"date_time": "{formatted_date} о {formatted_time}"
"date_time": "{formatted_date}, {formatted_time}"
},
"weekday": {
"0": "у понеділок",
"1": "у вівторок",
"2": "у середу",
"3": "у четвер",
"4": "у п'ятницю",
"5": "у суботу",
"6": "у неділю"
"0": "понеділок",
"1": "вівторок",
"2": "середа",
"3": "четвер",
"4": "п'ятниця",
"5": "субота",
"6": "неділя"
},
"date": {
"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": "тридцять першого"
"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": "тридцять перше"
},
"month": {
"1": "січня",
Expand All @@ -116,27 +116,28 @@
"11": "листопада",
"12": "грудня"
},

"number": {
"0": "нуль",
"1": "перший",
"2": "другий",
"3": "третій",
"4": "четвертий",
"5": "п'ятий",
"6": "шостий",
"7": "сьомий",
"8": "восьмий",
"9": "дев'ятий",
"10": "десятий",
"11": "одинадцятий",
"12": "дванадцятий",
"13": "тринадцятий",
"14": "чотирнадцятий",
"15": "п'ятнадцятий",
"16": "шістнадцятий",
"17": "сімнадцятий",
"18": "вісімнадцятий",
"19": "дев'ятнадцятий",
"1": "один",
"2": "два",
"3": "три",
"4": "чотири",
"5": "п'ять",
"6": "шість",
"7": "сім",
"8": "вісім",
"9": "дев'ять",
"10": "десять",
"11": "одинадцять",
"12": "дванадцять",
"13": "тринадцять",
"14": "чотирнадцять",
"15": "п'ятнадцять",
"16": "шестнадцать",
"17": "сімнадцять",
"18": "вісімнадцять",
"19": "дев'ятнадцять",
"20": "двадцять",
"30": "тридцять",
"40": "сорок",
Expand Down
23 changes: 12 additions & 11 deletions lingua_franca/res/text/uk-ua/date_time_test.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
{
"test_nice_year": {
"1": {"datetime_param": "1, 1, 31, 13, 22, 3", "bc": "True", "assertEqual": "перший до нашої ери" }
"1": {
"datetime_param": "1, 1, 31, 13, 22, 3",
"bc": "True",
"assertEqual": "один до нашої ери"
}
},

"test_nice_date": {
"1": {"datetime_param": "2017, 1, 31, 0, 2, 3", "now": "None", "assertEqual": "у вівторок, тридцять першого січня, дві тисячі сімнадцятий"},
"2": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2017, 1, 1, 0, 2, 3", "assertEqual": "у неділю, четвертого лютого, дві тисячі вісімнадцятий"},
"3": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 1, 1, 0, 2, 3", "assertEqual": "у неділю, четвертого лютого"},
"4": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 1, 0, 2, 3", "assertEqual": "у неділю, четвертого"},
"1": {"datetime_param": "2017, 1, 31, 0, 2, 3", "now": "None", "assertEqual": "вівторок, тридцять перше січня, дві тисячі сімнадцять"},
"2": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2017, 1, 1, 0, 2, 3", "assertEqual": "неділя, четверте лютого, дві тисячі вісімнадцять"},
"3": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 1, 1, 0, 2, 3", "assertEqual": "неділя, четверте лютого"},
"4": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 1, 0, 2, 3", "assertEqual": "неділя, четверте"},
"5": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 3, 0, 2, 3", "assertEqual": "завтра"},
"6": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 4, 0, 2, 3", "assertEqual": "сьогодні"},
"7": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 5, 0, 2, 3", "assertEqual": "вчора"},
"8": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2018, 2, 6, 0, 2, 3", "assertEqual": "у неділю, четвертого лютого"},
"9": {"datetime_param": "2021, 2, 4, 0, 2, 3", "now": "None", "assertEqual": "у четвер, четвертого лютого, дві тисячі двадцять перший"}
"8": {"datetime_param": "2018, 2, 4, 0, 2, 3", "now": "2019, 2, 6, 0, 2, 3", "assertEqual": "неділя, четверте лютого, дві тисячі вісімнадцять"}
},

"test_nice_date_time": {
"1": {"datetime_param": "2017, 1, 31, 13, 22, 3", "now": "None", "use_24hour": "False", "use_ampm": "True", "assertEqual": "у вівторок, тридцять першого січня, дві тисячі сімнадцятий о перша година двадцять два дня"},
"2": {"datetime_param": "2017, 1, 31, 13, 22, 3", "now": "None", "use_24hour": "True", "use_ampm": "False", "assertEqual": "у вівторок, тридцять першого січня, дві тисячі сімнадцятий о тринадцять двадцять два"}
"1": {"datetime_param": "2017, 1, 31, 13, 22, 3", "now": "None", "use_24hour": "False", "use_ampm": "True", "assertEqual": "вівторок, тридцять перше січня, дві тисячі сімнадцять, перша година дня двадцять два"},
"2": {"datetime_param": "2017, 1, 31, 13, 22, 3", "now": "None", "use_24hour": "True", "use_ampm": "False", "assertEqual": "вівторок, тридцять перше січня, дві тисячі сімнадцять, тринадцять двадцять два"}
}
}
2 changes: 2 additions & 0 deletions lingua_franca/res/text/uk-ua/normalize.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@
"тисяча": "1000",
"тисяч": "1000"
},
"symbols": [".", ",", ";", "_", "!", "?", "<", ">", "|", "(", ")", "=", "[",
"]", "{", "}", "»", "«", "*", "~", "^", "\""],
NeonDaniel marked this conversation as resolved.
Show resolved Hide resolved
"stopwords": [],
"articles": []
}
Loading
Loading