German formatting for Wolfram alpha skill responses in format_de.py (#1669)
Response formatting for German language ordinals depending on cases/prepositions for dates "am 1. März" -> "am ersten März" (on the first of March) "der 1. März" -> "der erste März" (the first of March) "1. März" -> "erster März" (first of March) Response formatting for mathematical results "10 ^ 2" -> "10 hoch 2" (ten to the power of two) Can be tested via the corresponding test_format_de or by using wolfram alpha skill: "Was ist die Fläche von Canada" "Wann ist George Washington geboren"pull/1696/head
parent
c140d5b889
commit
9e2dc9628e
|
@ -1,3 +1,3 @@
|
|||
abbrechen
|
||||
Vergiss es
|
||||
verwerfen
|
||||
verwerfen
|
|
@ -1,3 +1,3 @@
|
|||
Suche nach Updates
|
||||
kleinen Moment während ich mich aktualisiere
|
||||
bitte warte während ich mich aktualisiere
|
||||
bitte warte während ich mich aktualisiere
|
|
@ -1,4 +1,4 @@
|
|||
Entschuldigung, ich habe das nicht verstanden
|
||||
Ich fürchte, ich habe das nicht verstanden
|
||||
kannst du das noch einmal wiederholen?
|
||||
kannst du das nochmal sagen?
|
||||
kannst du das nochmal sagen?
|
|
@ -1 +1 @@
|
|||
Ich werde jetzt die Interaktionsdaten zu Mycroft AI hochladen, damit ich intelligenter werden kann. Diese beinhalten die kompletten Aufzeichnungen ab dem Aktivierungswort.
|
||||
Ich werde jetzt die Interaktionsdaten zu Mycroft AI hochladen, damit ich intelligenter werden kann. Diese beinhalten die kompletten Aufzeichnungen ab dem Aktivierungswort.
|
|
@ -1 +1 @@
|
|||
Hallo ich bin Mycroft, dein neuer Butler. Um dir zu assistieren brauche ich eine Verbindung zum Internet. Du kannst mich per Kabel verbinden oder per WLAN. Folge der Anweisung um das WLAN zu konfigurieren:
|
||||
Hallo ich bin Mycroft, dein neuer Butler. Um dir zu assistieren brauche ich eine Verbindung zum Internet. Du kannst mich per Kabel verbinden oder per WLAN. Folge der Anweisung um das WLAN zu konfigurieren:
|
|
@ -1,4 +1,4 @@
|
|||
Es sieht so aus, als wäre ich nicht mit dem Internet verbunden
|
||||
Es scheint als wäre ich nicht mit dem Internet verbunden
|
||||
Ich kann das Internet gerade nicht erreichen
|
||||
Es ist mir gerade nicht möglich das Internet zu erreichen
|
||||
Es ist mir gerade nicht möglich das Internet zu erreichen
|
|
@ -1 +1 @@
|
|||
bitte warte einen moment bis ich fertig mit dem booten bin
|
||||
bitte warte einen moment bis ich fertig mit dem booten bin
|
|
@ -1,2 +1,2 @@
|
|||
jalapeno: halapenyo
|
||||
ai: ey ei
|
||||
ai: ey ei
|
|
@ -1,2 +1,2 @@
|
|||
Ich bin auf dem neuesten Stand
|
||||
Fähigkeiten aktualisiert. Ich bin jetzt bereit dir zu helfen.
|
||||
Fähigkeiten aktualisiert. Ich bin jetzt bereit dir zu helfen.
|
|
@ -1 +1 @@
|
|||
Ein Fehler ist aufgetreten während der Aktualisierung der Fähigkeiten.
|
||||
Ein Fehler ist aufgetreten während der Aktualisierung der Fähigkeiten.
|
|
@ -1 +1 @@
|
|||
SSH anmeldung ist nicht möglich.
|
||||
SSH anmeldung ist nicht möglich.
|
|
@ -1 +1 @@
|
|||
SSH Anmeldung ist jetzt möglich.
|
||||
SSH Anmeldung ist jetzt möglich.
|
|
@ -18,6 +18,10 @@
|
|||
from mycroft.util.lang.format_common import convert_to_mixed_fraction
|
||||
from math import floor
|
||||
|
||||
months = ['januar', 'februar', 'märz', 'april', 'mai', 'juni',
|
||||
'juli', 'august', 'september', 'oktober', 'november',
|
||||
'dezember']
|
||||
|
||||
NUM_STRING_DE = {
|
||||
0: 'null',
|
||||
1: 'ein', # ein Viertel etc., nicht eins Viertel
|
||||
|
@ -342,3 +346,43 @@ def nice_time_de(dt, speech=True, use_24hour=False, use_ampm=False):
|
|||
speak += " morgens" # 03:00 - 11:59 morgens/in the morning
|
||||
|
||||
return speak
|
||||
|
||||
|
||||
def nice_response_de(text):
|
||||
# check for months and call nice_ordinal_de declension of ordinals
|
||||
# replace "^" with "hoch" (to the power of)
|
||||
words = text.split()
|
||||
|
||||
for idx, word in enumerate(words):
|
||||
if word.lower() in months:
|
||||
text = nice_ordinal_de(text)
|
||||
|
||||
if word == '^':
|
||||
wordNext = words[idx + 1] if idx + 1 < len(words) else ""
|
||||
if wordNext.isnumeric():
|
||||
words[idx] = "hoch"
|
||||
text = " ".join(words)
|
||||
return text
|
||||
|
||||
|
||||
def nice_ordinal_de(text):
|
||||
# check for months for declension of ordinals before months
|
||||
# depending on articles/prepositions
|
||||
normalized_text = text
|
||||
words = text.split()
|
||||
|
||||
for idx, word in enumerate(words):
|
||||
wordNext = words[idx + 1] if idx + 1 < len(words) else ""
|
||||
wordPrev = words[idx - 1] if idx > 0 else ""
|
||||
if word[-1:] == ".":
|
||||
if word[:-1].isdecimal():
|
||||
if wordNext.lower() in months:
|
||||
word = pronounce_ordinal_de(int(word[:-1]))
|
||||
if wordPrev.lower() in ["am", "dem", "vom", "zum",
|
||||
"(vom", "(am", "zum"]:
|
||||
word += "n"
|
||||
elif wordPrev.lower() not in ["der", "die", "das"]:
|
||||
word += "r"
|
||||
words[idx] = word
|
||||
normalized_text = " ".join(words)
|
||||
return normalized_text
|
||||
|
|
|
@ -20,6 +20,7 @@ import datetime
|
|||
from mycroft.util.format import nice_number
|
||||
from mycroft.util.format import nice_time
|
||||
from mycroft.util.format import pronounce_number
|
||||
from mycroft.util.lang.format_de import nice_response_de
|
||||
from mycroft.util.lang.format_de import pronounce_ordinal_de
|
||||
|
||||
# fractions are not capitalized for now
|
||||
|
@ -56,6 +57,18 @@ NUMBERS_FIXTURE_DE = {
|
|||
}
|
||||
|
||||
|
||||
class TestNiceResponse(unittest.TestCase):
|
||||
def test_replace_ordinal(self):
|
||||
self.assertEqual(nice_response_de("dies ist der 31. mai"),
|
||||
"dies ist der einunddreißigste mai")
|
||||
self.assertEqual(nice_response_de("es fängt am 31. mai an"),
|
||||
"es fängt am einunddreißigsten mai an")
|
||||
self.assertEqual(nice_response_de("der 31. mai"),
|
||||
"der einunddreißigste mai")
|
||||
self.assertEqual(nice_response_de("10 ^ 2"),
|
||||
"10 hoch 2")
|
||||
|
||||
|
||||
class TestNiceNumberFormat(unittest.TestCase):
|
||||
def test_convert_float_to_nice_number(self):
|
||||
for number, number_str in NUMBERS_FIXTURE_DE.items():
|
||||
|
|
|
@ -35,6 +35,8 @@ class TestNormalize(unittest.TestCase):
|
|||
"dies ist der Extra-Test")
|
||||
|
||||
def test_extractnumber(self):
|
||||
self.assertEqual(extractnumber("dies ist der 1. Test",
|
||||
lang="de-de"), 1)
|
||||
self.assertEqual(extractnumber("dies ist der erste Test",
|
||||
lang="de-de"), 1)
|
||||
self.assertEqual(extractnumber("dies ist 2 Test", lang="de-de"), 2)
|
||||
|
|
Loading…
Reference in New Issue