예제 #1
0
    def test_extract_number(self):
        self.assertEqual(extract_number("dette er den første test",
                         lang="da-dk"), 1)
#        self.assertEqual(extract_number("dette er den 1. test",
#                                        lang="da-dk"),
#                         1)
        self.assertEqual(extract_number("dette er den anden test",
                         lang="da-dk"), 2)
#        self.assertEqual(extract_number("dette er den 2. test",
#                                        lang="da-dk"),
#                         2)
        self.assertEqual(
            extract_number("dette er den tredie test", lang="da-dk"), 3)
        self.assertEqual(
            extract_number("dette er test nummer fire", lang="da-dk"), 4)
        self.assertEqual(
            extract_number("en trediedel af en kop", lang="da-dk"), 1.0 / 3.0)
        self.assertEqual(extract_number("tre kopper", lang="da-dk"), 3)
        self.assertEqual(extract_number("1/3 kop", lang="da-dk"),
                         1.0 / 3.0)
예제 #2
0
    def test_extract_number(self):
        self.assertEqual(extract_number("this is the first test",
                                        ordinals=True), 1)
        self.assertEqual(extract_number("this is 2 test"), 2)
        self.assertEqual(extract_number("this is second test",
                                        ordinals=True), 2)
        self.assertEqual(extract_number("this is the third test"), 1.0 / 3.0)
        self.assertEqual(extract_number("this is the third test",
                                        ordinals=True), 3.0)
        self.assertEqual(extract_number("this is test number 4"), 4)
        self.assertEqual(extract_number("one third of a cup"), 1.0 / 3.0)
        self.assertEqual(extract_number("three cups"), 3)
        self.assertEqual(extract_number("1/3 cups"), 1.0 / 3.0)
        self.assertEqual(extract_number("quarter cup"), 0.25)
        self.assertEqual(extract_number("1/4 cup"), 0.25)
        self.assertEqual(extract_number("one fourth cup"), 0.25)
        self.assertEqual(extract_number("2/3 cups"), 2.0 / 3.0)
        self.assertEqual(extract_number("3/4 cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("1 and 3/4 cups"), 1.75)
        self.assertEqual(extract_number("1 cup and a half"), 1.5)
        self.assertEqual(extract_number("one cup and a half"), 1.5)
        self.assertEqual(extract_number("one and a half cups"), 1.5)
        self.assertEqual(extract_number("one and one half cups"), 1.5)
        self.assertEqual(extract_number("three quarter cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("three quarters cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("twenty two"), 22)
        self.assertEqual(extract_number("two hundred"), 200)
        self.assertEqual(extract_number("nine thousand"), 9000)
        self.assertEqual(extract_number("six hundred sixty six"), 666)
        self.assertEqual(extract_number("two million"), 2000000)
        self.assertEqual(extract_number("two million five hundred thousand "
                                        "tons of spinning metal"), 2500000)
        self.assertEqual(extract_number("six trillion"), 6000000000000.0)
        self.assertEqual(extract_number("six trillion", short_scale=False),
                         6e+18)
        self.assertEqual(extract_number("one point five"), 1.5)
        self.assertEqual(extract_number("three dot fourteen"), 3.14)
        self.assertEqual(extract_number("zero point two"), 0.2)
        self.assertEqual(extract_number("billions of years older"),
                         1000000000.0)
        self.assertEqual(extract_number("billions of years older",
                                        short_scale=False),
                         1000000000000.0)
        self.assertEqual(extract_number("one hundred thousand"), 100000)
        self.assertEqual(extract_number("minus 2"), -2)
        self.assertEqual(extract_number("negative seventy"), -70)
        self.assertEqual(extract_number("thousand million"), 1000000000)
        self.assertEqual(extract_number("sixth third"),
                         1 / 6 / 3)
        self.assertEqual(extract_number("sixth third", ordinals=True),
                         3)
        self.assertEqual(extract_number("thirty second"), 30)
        self.assertEqual(extract_number("thirty second", ordinals=True), 32)
        self.assertEqual(extract_number("this is the billionth test",
                                        ordinals=True), 1e09)
        self.assertEqual(extract_number("this is the billionth test"), 1e-9)
        self.assertEqual(extract_number("this is the billionth test",
                                        ordinals=True,
                                        short_scale=False), 1e12)
        self.assertEqual(extract_number("this is the billionth test",
                                        short_scale=False), 1e-12)
        # TODO handle this case
        # self.assertEqual(
        #    extract_number("6 dot six six six"),
        #    6.666)
        self.assertTrue(extract_number("The tennis player is fast") is False)
        self.assertTrue(extract_number("fraggle") is False)

        self.assertTrue(extract_number("fraggle zero") is not False)
        self.assertEqual(extract_number("fraggle zero"), 0)

        self.assertTrue(extract_number("grobo 0") is not False)
        self.assertEqual(extract_number("grobo 0"), 0)

        self.assertEqual(extract_number("a couple of beers"), 2)
        self.assertEqual(extract_number("a couple hundred beers"), 200)
        self.assertEqual(extract_number("a couple thousand beers"), 2000)
예제 #3
0
    def test_extractnumber_pt(self):
        self.assertEqual(extract_number("isto e o primeiro teste", lang="pt"),
                         1)
        self.assertEqual(extract_number("isto e o 2 teste", lang="pt"), 2)
        self.assertEqual(extract_number("isto e o segundo teste", lang="pt"),
                         2)
        self.assertEqual(extract_number(u"isto e um terço de teste",
                                        lang="pt"), 1.0 / 3.0)
        self.assertEqual(extract_number("isto e o teste numero quatro",
                                        lang="pt"), 4)
        self.assertEqual(extract_number(u"um terço de chavena", lang="pt"),
                         1.0 / 3.0)
        self.assertEqual(extract_number("3 canecos", lang="pt"), 3)
        self.assertEqual(extract_number("1/3 canecos", lang="pt"), 1.0 / 3.0)
        self.assertEqual(extract_number("quarto de hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("1/4 hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("um quarto hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("2/3 pinga", lang="pt"), 2.0 / 3.0)
        self.assertEqual(extract_number("3/4 pinga", lang="pt"), 3.0 / 4.0)
        self.assertEqual(extract_number("1 e 3/4 cafe", lang="pt"), 1.75)
        self.assertEqual(extract_number("1 cafe e meio", lang="pt"), 1.5)
        self.assertEqual(extract_number("um cafe e um meio", lang="pt"), 1.5)
        self.assertEqual(
            extract_number("tres quartos de chocolate", lang="pt"),
            3.0 / 4.0)
        self.assertEqual(extract_number(u"três quarto de chocolate",
                                        lang="pt"), 3.0 / 4.0)
        self.assertEqual(extract_number("sete ponto cinco", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete ponto 5", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete e meio", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete e oitenta", lang="pt"), 7.80)
        self.assertEqual(extract_number("sete e oito", lang="pt"), 7.8)
        self.assertEqual(extract_number("sete e zero oito",
                                        lang="pt"), 7.08)
        self.assertEqual(extract_number("sete e zero zero oito",
                                        lang="pt"), 7.008)
        self.assertEqual(extract_number("vinte treze avos", lang="pt"),
                         20.0 / 13.0)
        self.assertEqual(extract_number("seis virgula seiscentos e sessenta",
                                        lang="pt"), 6.66)
        self.assertEqual(extract_number("seiscentos e sessenta e seis",
                                        lang="pt"), 666)

        self.assertEqual(extract_number("seiscentos ponto zero seis",
                                        lang="pt"), 600.06)
        self.assertEqual(extract_number("seiscentos ponto zero zero seis",
                                        lang="pt"), 600.006)
        self.assertEqual(extract_number("seiscentos ponto zero zero zero seis",
                                        lang="pt"), 600.0006)
예제 #4
0
    def test_extractnumber_it(self):
        """
        Test cases for Italian extract_number, lang='it'
        """
        self.assertEqual(extract_number('questo è il primo test',
                                        lang='it'), 1)
        self.assertEqual(extract_number('questo è il 2 test', lang='it'), 2)
        self.assertEqual(extract_number('questo è il secondo test',
                                        lang='it', ordinals=True), 2)
        self.assertEqual(extract_number('questo è un terzo di test',
                                        lang='it'), 1.0 / 3.0)
        self.assertEqual(extract_number('questo è il terzo test',
                                        lang='it', ordinals=True), 3.0)
        self.assertEqual(extract_number('questo è il trentaseiesimo test',
                                        lang='it'), 36.0)
        self.assertEqual(extract_number('questo è il test numero 4',
                                        lang='it'), 4)
        self.assertEqual(extract_number('una tazza', lang='it'), 1)
        self.assertEqual(extract_number('un gatto', lang='it'), 1)
        self.assertEqual(extract_number('un terzo di tazza',
                                        lang='it'), 1.0 / 3.0)
        self.assertEqual(extract_number('2 quinti di tazza', lang='it'), 0.4)
        self.assertEqual(extract_number('due quinti di tazza', lang='it'), 0.4)
        self.assertEqual(extract_number('tre tazze', lang='it'), 3)
        self.assertEqual(extract_number('1/3 tazze', lang='it'), 1.0 / 3.0)
        self.assertEqual(extract_number('un quarto di tazza', lang='it'), 0.25)
        self.assertEqual(extract_number('1/4 tazza', lang='it'), 0.25)
        self.assertEqual(extract_number('2/3 tazza', lang='it'), 2.0 / 3.0)
        self.assertEqual(extract_number('3/4 tazza', lang='it'), 3.0 / 4.0)
        self.assertEqual(extract_number('1 e 1/4 tazza', lang='it'), 1.25)
        self.assertEqual(extract_number('1 tazza e mezzo', lang='it'), 1.5)
        self.assertEqual(extract_number('una tazza e mezzo', lang='it'), 1.5)
        self.assertEqual(extract_number('una e mezza tazza', lang='it'), 1.5)
        self.assertEqual(extract_number('una e una mezza tazza',
                                        lang='it'), 1.5)
        self.assertEqual(extract_number('tre quarti di tazza',
                                        lang='it'), 3.0 / 4.0)
        self.assertEqual(extract_number('ventidue', lang='it'), 22)
        self.assertEqual(extract_number('duecento', lang='it'), 200)
        self.assertEqual(extract_number('novemila', lang='it'), 9000)
        self.assertEqual(extract_number('duemilioni',
                                        lang='it',
                                        short_scale=False), 2000000)
        self.assertEqual(extract_number('duemilionicinquecentomila '
                                        'tonnellate di metallo',
                                        lang='it'), 2500000)
        self.assertEqual(extract_number('duemilioni cinquecentomila '
                                        'tonnellate di metallo',
                                        lang='it'), 2500000)
        self.assertEqual(extract_number('sei trilioni',
                                        lang='it'), 6000000000000000000.0)
        self.assertEqual(extract_number('sei trilioni', short_scale=True,
                                        lang='it'), 6e+18)
        self.assertEqual(extract_number('unmiliardounmilione',
                                        lang='it',
                                        short_scale=False), 1001000000)
        self.assertEqual(extract_number('unmiliardocento',
                                        lang='it',
                                        short_scale=False), 1000000100)
        self.assertEqual(extract_number('duemiliardiunmilionecentotrentadue',
                                        lang='it'), 2001000132)
        self.assertEqual(extract_number('venti diciassettesimi',
                                        lang='it'), 20.0/17.0)
        self.assertEqual(extract_number('uno punto cinque', lang='it'), 1.5)
        self.assertEqual(extract_number('tre punto quattordici',
                                        lang='it'), 3.14)
        self.assertEqual(extract_number('zero punto due', lang='it'), 0.2)
        self.assertEqual(extract_number('vecchio miliardi di anni',
                                        lang='it'), 1000000000.0)
        self.assertEqual(extract_number('vecchio trilioni di anni',
                                        short_scale=False,
                                        lang='it'), 1000000000000000000.0)
        self.assertEqual(extract_number('centomila', lang='it'), 100000)
        self.assertEqual(extract_number('millequattrocentonovantadue',
                                        lang='it'), 1492)
        self.assertEqual(extract_number('meno 2', lang='it'), -2)
        self.assertEqual(extract_number('meno settanta', lang='it'), -70)
        self.assertEqual(extract_number('mille milioni',
                                        lang='it'), 1000000000)
        self.assertEqual(extract_number('millecentouno',
                                        lang='it'), 1101)
        self.assertEqual(extract_number('un sesto terzo',
                                        lang='it'), 1 / 6 / 3)
        self.assertEqual(extract_number('trenta secondi', lang='it'), 30)
        self.assertEqual(extract_number('trenta secondi', lang='it',
                                        ordinals=True), 30)
        self.assertEqual(extract_number('sette e qualcosa', lang='it'), 7.0)
        self.assertEqual(extract_number('sette punto 5', lang='it'), 7.5)
        self.assertEqual(extract_number('sette punto 575', lang='it'), 7.575)
        self.assertEqual(extract_number('sette e mezzo', lang='it'), 7.5)
        self.assertEqual(extract_number('sette e ottanta', lang='it'), 7.80)
        self.assertEqual(extract_number('sette e otto', lang='it'), 7.8)
        self.assertEqual(extract_number('sette e zero otto',
                                        lang='it'), 7.08)
        self.assertEqual(extract_number('sette e zero zero zero otto gradi',
                                        lang='it'), 7.0008)
        self.assertEqual(extract_number('venti tredicesimi',
                                        lang='it'), 20.0 / 13.0)
        self.assertEqual(extract_number('venti tredicesimi', lang='it',
                                        short_scale=True), 20.0 / 13.0)
        self.assertEqual(extract_number('sei virgola sessantasei',
                                        lang='it'), 6.66)
        self.assertEqual(extract_number('sei virgola sessantasei',
                                        lang='it'), 6.66)
        self.assertEqual(extract_number('seicentosessantasei',
                                        lang='it'), 666)
        self.assertEqual(extract_number('seicento sessantasei',
                                        lang='it'), 666)
        self.assertEqual(extract_number('mille quattrocento novantadue',
                                        lang='it'), 1492)
        self.assertEqual(extract_number('millequattrocentonovantadue',
                                        lang='it'), 1492)
        self.assertEqual(extract_number('sei cento punto zero sei',
                                        lang='it'), 600.06)
        self.assertEqual(extract_number('seicento punto zero zero sei',
                                        lang='it'), 600.006)
        self.assertEqual(extract_number('seicento punto zero zero zero sei',
                                        lang='it'), 600.0006)
        self.assertEqual(extract_number('tre decimi ',
                                        lang='it'), 0.30000000000000004)
        self.assertEqual(extract_number('dodici centesimi',
                                        lang='it'), 0.12)
#        self.assertEqual(extract_number('cinque e quarantadue millesimi',
#                                        lang='it'), 5.042)
        self.assertEqual(extract_number('milleuno',
                                        lang='it'), 1001)
        self.assertEqual(extract_number('due mila ventidue dollari ',
                                        lang='it'), 2022)
        self.assertEqual(extract_number(
            'centoquattordicimilaquattrocentoundici dollari ',
            lang='it', ordinals=True, short_scale=True), 114411)
        self.assertEqual(extract_number('ventitre dollari ', lang='it'), 23)
        self.assertEqual(extract_number('ventuno anni ',
                                        lang='it'), 21)
        self.assertEqual(extract_number('dodici e quarantacinque ',
                                        lang='it'), 12.45)
        self.assertEqual(extract_number('avvisa se qualcuno arriva ',
                                        lang='it'), False)
        self.assertTrue(extract_number('Il giocatore di tennis è veloce',
                                       lang='it') is False)
        self.assertTrue(extract_number('nessuno', lang='it') is False)
        self.assertTrue(extract_number('fraggle zero',
                                       lang='it') is not False)
        self.assertEqual(extract_number('fraggle zero', lang='it'), 0)
        self.assertTrue(extract_number('grobo 0', lang='it') is not False)
        self.assertEqual(extract_number('grobo 0', lang='it'), 0)
        self.assertEqual(extract_number('un paio di birre', lang='it'), 2)
        self.assertEqual(extract_number('un centinaio di birre',
                                        lang='it'), 100)
        self.assertEqual(extract_number('un paio di migliaia di birre',
                                        lang='it'), 2000)
        self.assertEqual(extract_number('una decina di monete',
                                        lang='it'), 10)
        self.assertEqual(extract_number('tre dozzine di uova',
                                        lang='it'), 36)
        self.assertEqual(extract_number('zero gatti',
                                        lang='it'), 0)
예제 #5
0
 def test_extract_number(self):
     self.assertEqual(extract_number("dies ist der 1. Test",
                                     lang="de-de"), 1)
     self.assertEqual(extract_number("dies ist der erste Test",
                                     lang="de-de"), 1)
     self.assertEqual(extract_number("dies ist 2 Test", lang="de-de"), 2)
     self.assertEqual(extract_number("dies ist zweiter Test", lang="de-de"),
                      2)
     self.assertEqual(
         extract_number("dies ist der dritte Test", lang="de-de"), 3)
     self.assertEqual(
         extract_number("dies ist der Test Nummer 4", lang="de-de"), 4)
     self.assertEqual(extract_number("ein drittel einer Tasse",
                                     lang="de-de"), 1.0 / 3.0)
     self.assertEqual(extract_number("drei Tassen", lang="de-de"), 3)
     self.assertEqual(extract_number("1/3 Tasse", lang="de-de"), 1.0 / 3.0)
     self.assertEqual(extract_number("eine viertel Tasse", lang="de-de"),
                      0.25)
     self.assertEqual(extract_number("1/4 Tasse", lang="de-de"), 0.25)
     self.assertEqual(extract_number("viertel Tasse", lang="de-de"), 0.25)
     self.assertEqual(extract_number("2/3 Tasse", lang="de-de"), 2.0 / 3.0)
     self.assertEqual(extract_number("3/4 Tasse", lang="de-de"), 3.0 / 4.0)
     self.assertEqual(extract_number("1 und 3/4 Tassen", lang="de-de"),
                      1.75)
     self.assertEqual(extract_number("1 Tasse und eine halbe",
                                     lang="de-de"), 1.5)
     self.assertEqual(
         extract_number("eine Tasse und eine halbe", lang="de-de"), 1.5)
     self.assertEqual(
         extract_number("eine und eine halbe Tasse", lang="de-de"), 1.5)
     self.assertEqual(extract_number("ein und ein halb Tassen",
                                     lang="de-de"), 1.5)
     self.assertEqual(extract_number("drei Viertel Tasse", lang="de-de"),
                      3.0 / 4.0)
     self.assertEqual(extract_number("drei Viertel Tassen", lang="de-de"),
                      3.0 / 4.0)
예제 #6
0
 def test_extractnumber_fr(self):
     self.assertEqual(extract_number("voici le premier test", lang="fr-fr"),
                      1)
     self.assertEqual(extract_number("c'est 2 tests", lang="fr-fr"), 2)
     self.assertEqual(extract_number("voici le second test", lang="fr-fr"),
                      2)
     self.assertEqual(extract_number("voici trois tests",
                                     lang="fr-fr"),
                      3)
     self.assertEqual(extract_number("voici le test numéro 4",
                                     lang="fr-fr"), 4)
     self.assertEqual(extract_number("un tiers de litre", lang="fr-fr"),
                      1.0 / 3.0)
     self.assertEqual(extract_number("3 cuillères", lang="fr-fr"), 3)
     self.assertEqual(extract_number("1/3 de litre", lang="fr-fr"),
                      1.0 / 3.0)
     self.assertEqual(extract_number("un quart de bol", lang="fr-fr"), 0.25)
     self.assertEqual(extract_number("1/4 de verre", lang="fr-fr"), 0.25)
     self.assertEqual(extract_number("2/3 de bol", lang="fr-fr"), 2.0 / 3.0)
     self.assertEqual(extract_number("3/4 de bol", lang="fr-fr"), 3.0 / 4.0)
     self.assertEqual(extract_number("1 et 3/4 de bol", lang="fr-fr"), 1.75)
     self.assertEqual(extract_number("1 bol et demi", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un bol et demi", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un et demi bols", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un bol et un demi", lang="fr-fr"),
                      1.5)
     self.assertEqual(extract_number("trois quarts de bol", lang="fr-fr"),
                      3.0 / 4.0)
     self.assertEqual(extract_number("32.2 degrés", lang="fr-fr"), 32.2)
     self.assertEqual(extract_number("2 virgule 2 cm", lang="fr-fr"), 2.2)
     self.assertEqual(extract_number("2 virgule 0 2 cm", lang="fr-fr"),
                      2.02)
     self.assertEqual(extract_number("ça fait virgule 2 cm", lang="fr-fr"),
                      0.2)
     self.assertEqual(extract_number("point du tout", lang="fr-fr"),
                      "point tout")
     self.assertEqual(extract_number("32.00 secondes", lang="fr-fr"), 32)
     self.assertEqual(extract_number("mange trente-et-une bougies",
                                     lang="fr-fr"), 31)
     self.assertEqual(extract_number("un trentième",
                                     lang="fr-fr"), 1.0 / 30.0)
     self.assertEqual(extract_number("un centième",
                                     lang="fr-fr"), 0.01)
     self.assertEqual(extract_number("un millième",
                                     lang="fr-fr"), 0.001)
     self.assertEqual(extract_number("un 20e",
                                     lang="fr-fr"), 1.0 / 20.0)
예제 #7
0
    def handle_query_date(self, message, response_type="simple"):
        utt = message.data.get('utterance', "").lower()
        try:
            extract = extract_datetime(utt)
        except Exception:
            self.speak_dialog('date.not.found')
            return
        day = extract[0] if extract else now_local()

        # check if a Holiday was requested, e.g. "What day is Christmas?"
        year = extract_number(utt)
        if not year or year < 1500 or year > 3000:  # filter out non-years
            year = day.year
        all_holidays = {}
        # TODO: How to pick a location for holidays?
        for st in holidays.US.STATES:
            holiday_dict = holidays.US(years=[year], state=st)
            for d, name in holiday_dict.items():
                if name not in all_holidays:
                    all_holidays[name] = d
        for name in all_holidays:
            d = all_holidays[name]
            # Uncomment to display all holidays in the database
            # self.log.info("Day, name: " +str(d) + " " + str(name))
            if name.replace(" Day", "").lower() in utt:
                day = d
                break

        location = self._extract_location(utt)
        today = to_local(now_utc())
        if location:
            # TODO: Timezone math!
            if (day.year == today.year and day.month == today.month
                    and day.day == today.day):
                day = now_utc()  # for questions ~ "what is the day in sydney"
            day = self.get_local_datetime(location, dtUTC=day)
        if not day:
            return  # failed in timezone lookup

        speak_date = nice_date(day, lang=self.lang)
        # speak it
        if response_type == "simple":
            self.speak_dialog("date", {"date": speak_date})
        elif response_type == "relative":
            # remove time data to get clean dates
            day_date = day.replace(hour=0, minute=0,
                                   second=0, microsecond=0)
            today_date = today.replace(hour=0, minute=0,
                                       second=0, microsecond=0)
            num_days = (day_date - today_date).days
            if num_days >= 0:
                speak_num_days = nice_duration(num_days * 86400)
                self.speak_dialog("date.relative.future",
                                  {"date": speak_date,
                                   "num_days": speak_num_days})
            else:
                # if in the past, make positive before getting duration
                speak_num_days = nice_duration(num_days * -86400)
                self.speak_dialog("date.relative.past",
                                  {"date": speak_date,
                                   "num_days": speak_num_days})

        # and briefly show the date
        self.answering_query = True
        self.show_date(location, day=day)
        time.sleep(10)
        mycroft.audio.wait_while_speaking()
        if self.platform == "mycroft_mark_1":
            self.enclosure.mouth_reset()
            self.enclosure.activate_mouth_events()
        self.answering_query = False
        self.displayed_time = None
예제 #8
0
 def calculate_handler(self, message):
     self.log.info("boot")
     text = message.utterance_remainder()
     number = extract_number(text, lang=self.lang)
     #if type(number) is int:
     self.calculate_worker(message.data['utterance'], message)
예제 #9
0
 def test_extract_number(self):
     self.assertEqual(extract_number("dies ist der 1. Test", lang="de-de"),
                      1)
     self.assertEqual(
         extract_number("dies ist der erste Test", lang="de-de"), 1)
     self.assertEqual(extract_number("dies ist 2 Test", lang="de-de"), 2)
     self.assertEqual(extract_number("dies ist zweiter Test", lang="de-de"),
                      2)
     self.assertEqual(
         extract_number("dies ist der dritte Test", lang="de-de"), 3)
     self.assertEqual(
         extract_number("dies ist der Test Nummer 4", lang="de-de"), 4)
     self.assertEqual(
         extract_number("ein drittel einer Tasse", lang="de-de"), 1.0 / 3.0)
     self.assertEqual(extract_number("drei Tassen", lang="de-de"), 3)
     self.assertEqual(extract_number("1/3 Tasse", lang="de-de"), 1.0 / 3.0)
     self.assertEqual(extract_number("eine viertel Tasse", lang="de-de"),
                      0.25)
     self.assertEqual(extract_number("1/4 Tasse", lang="de-de"), 0.25)
     self.assertEqual(extract_number("viertel Tasse", lang="de-de"), 0.25)
     self.assertEqual(extract_number("2/3 Tasse", lang="de-de"), 2.0 / 3.0)
     self.assertEqual(extract_number("3/4 Tasse", lang="de-de"), 3.0 / 4.0)
     self.assertEqual(extract_number("1 und 3/4 Tassen", lang="de-de"),
                      1.75)
     self.assertEqual(
         extract_number("1 Tasse und eine halbe", lang="de-de"), 1.5)
     self.assertEqual(
         extract_number("eine Tasse und eine halbe", lang="de-de"), 1.5)
     self.assertEqual(
         extract_number("eine und eine halbe Tasse", lang="de-de"), 1.5)
     self.assertEqual(
         extract_number("ein und ein halb Tassen", lang="de-de"), 1.5)
     self.assertEqual(extract_number("drei Viertel Tasse", lang="de-de"),
                      3.0 / 4.0)
     self.assertEqual(extract_number("drei Viertel Tassen", lang="de-de"),
                      3.0 / 4.0)
예제 #10
0
    def test_extractnumber_pt(self):
        self.assertEqual(extract_number("isto e o primeiro teste", lang="pt"),
                         1)
        self.assertEqual(extract_number("isto e o 2 teste", lang="pt"), 2)
        self.assertEqual(extract_number("isto e o segundo teste", lang="pt"),
                         2)
        self.assertEqual(
            extract_number(u"isto e um terço de teste", lang="pt"), 1.0 / 3.0)
        self.assertEqual(
            extract_number("isto e o teste numero quatro", lang="pt"), 4)
        self.assertEqual(extract_number(u"um terço de chavena", lang="pt"),
                         1.0 / 3.0)
        self.assertEqual(extract_number("3 canecos", lang="pt"), 3)
        self.assertEqual(extract_number("1/3 canecos", lang="pt"), 1.0 / 3.0)
        self.assertEqual(extract_number("quarto de hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("1/4 hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("um quarto hora", lang="pt"), 0.25)
        self.assertEqual(extract_number("2/3 pinga", lang="pt"), 2.0 / 3.0)
        self.assertEqual(extract_number("3/4 pinga", lang="pt"), 3.0 / 4.0)
        self.assertEqual(extract_number("1 e 3/4 cafe", lang="pt"), 1.75)
        self.assertEqual(extract_number("1 cafe e meio", lang="pt"), 1.5)
        self.assertEqual(extract_number("um cafe e um meio", lang="pt"), 1.5)
        self.assertEqual(
            extract_number("tres quartos de chocolate", lang="pt"), 3.0 / 4.0)
        self.assertEqual(
            extract_number(u"três quarto de chocolate", lang="pt"), 3.0 / 4.0)
        self.assertEqual(extract_number("sete ponto cinco", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete ponto 5", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete e meio", lang="pt"), 7.5)
        self.assertEqual(extract_number("sete e oitenta", lang="pt"), 7.80)
        self.assertEqual(extract_number("sete e oito", lang="pt"), 7.8)
        self.assertEqual(extract_number("sete e zero oito", lang="pt"), 7.08)
        self.assertEqual(extract_number("sete e zero zero oito", lang="pt"),
                         7.008)
        self.assertEqual(extract_number("vinte treze avos", lang="pt"),
                         20.0 / 13.0)
        self.assertEqual(
            extract_number("seis virgula seiscentos e sessenta", lang="pt"),
            6.66)
        self.assertEqual(
            extract_number("seiscentos e sessenta e seis", lang="pt"), 666)

        self.assertEqual(
            extract_number("seiscentos ponto zero seis", lang="pt"), 600.06)
        self.assertEqual(
            extract_number("seiscentos ponto zero zero seis", lang="pt"),
            600.006)
        self.assertEqual(
            extract_number("seiscentos ponto zero zero zero seis", lang="pt"),
            600.0006)
예제 #11
0
 def handle_set_volume_percent(self, message):
     self._clear_mixer()
     percent = extract_number(message.data['utterance'].replace('%', ''))
     percent = int(percent)
     self._setvolume(percent)
     self.speak_dialog('set.volume.percent', data={'level': percent})
예제 #12
0
 def handle_pysin_brion_set_rand(self, message):
     self.settings['randomness'] = extract_number(
         message.data.get('utterance'))
     self.speak_dialog(
         'randomness.set',
         data={'rand': extract_number(message.data.get('utterance'))})
예제 #13
0
 def handle_pysin_brion_set_max(self, message):
     self.settings['max_chunk'] = extract_number(
         message.data.get('utterance'))
     self.speak_dialog(
         'maximum.set',
         data={'max': extract_number(message.data.get('utterance'))})
예제 #14
0
 def test_extractnumber_it(self):
     self.assertEqual(extract_number(u"questo è il primo test",
                                     lang="it"), 1)
     self.assertEqual(extract_number(u"questo è il 2 test", lang="it"), 2)
     self.assertEqual(extract_number(u"questo è il secondo test",
                                     lang="it"), 2)
     self.assertEqual(extract_number(u"questo è un terzo di test",
                                     lang="it"), 1.0 / 3.0)
     self.assertEqual(extract_number(u"questo è test numero 4", lang="it"),
                      4)
     self.assertEqual(extract_number("un terzo di tazza", lang="it"),
                      1.0 / 3.0)
     self.assertEqual(extract_number("tre tazze", lang="it"), 3)
     self.assertEqual(extract_number("1/3 tazze", lang="it"), 1.0 / 3.0)
     self.assertEqual(extract_number("un quarto di tazza", lang="it"), 0.25)
     self.assertEqual(extract_number("1/4 tazza", lang="it"), 0.25)
     self.assertEqual(extract_number("2/3 tazza", lang="it"), 2.0 / 3.0)
     self.assertEqual(extract_number("3/4 tazza", lang="it"), 3.0 / 4.0)
     self.assertEqual(extract_number("1 e 1/4 tazza", lang="it"), 1.25)
     self.assertEqual(extract_number("1 tazza e mezzo", lang="it"), 1.5)
     self.assertEqual(extract_number("una tazza e mezzo", lang="it"), 1.5)
     self.assertEqual(extract_number("una e mezza tazza", lang="it"), 1.5)
     self.assertEqual(extract_number("una e una mezza tazza",
                                     lang="it"), 1.5)
     self.assertEqual(extract_number("tre quarti tazza",
                                     lang="it"), 3.0 / 4.0)
     self.assertEqual(extract_number("tre quarto tazza",
                                     lang="it"), 3.0 / 4.0)
     self.assertEqual(extract_number("sette punto cinque", lang="it"), 7.5)
     self.assertEqual(extract_number("sette punto 5", lang="it"), 7.5)
     self.assertEqual(extract_number("sette e mezzo", lang="it"), 7.5)
     self.assertEqual(extract_number("sette e ottanta", lang="it"), 7.80)
     self.assertEqual(extract_number("sette e otto", lang="it"), 7.8)
     self.assertEqual(extract_number("sette e zero otto", lang="it"), 7.08)
     self.assertEqual(extract_number("sette e zero zero otto",
                                     lang="it"), 7.008)
     self.assertEqual(extract_number("venti tredicesimi",
                                     lang="it"), 20.0 / 13.0)
     self.assertEqual(extract_number("sei virgola sessanta sei",
                                     lang="it"), 6.66)
     self.assertEqual(extract_number("sei virgola sessantasei",
                                     lang="it"), 6.66)
     self.assertEqual(extract_number("seicento sessanta  sei",
                                     lang="it"), 666)
     self.assertEqual(extract_number("seicento punto zero sei",
                                     lang="it"), 600.06)
     self.assertEqual(extract_number("seicento punto zero zero sei",
                                     lang="it"), 600.006)
     self.assertEqual(extract_number("seicento punto zero zero zero sei",
                                     lang="it"), 600.0006)
     self.assertEqual(extract_number("tre decimi ",
                                     lang="it"), 0.30000000000000004)
     self.assertEqual(extract_number("dodici centesimi",
                                     lang="it"), 0.12)
     self.assertEqual(extract_number("cinque e quaranta due millesimi",
                                     lang="it"), 5.042)
     self.assertEqual(extract_number("mille e uno",
                                     lang="it"), 1001)
     self.assertEqual(extract_number("due mila venti due dollari ",
                                     lang="it"), 2022)
     self.assertEqual(extract_number(
         "cento quattordici mila quattrocento undici dollari ",
         lang="it"), 114411)
     self.assertEqual(extract_number("ventitre dollari ", lang="it"), 23)
     self.assertEqual(extract_number("quarantacinque minuti ",
                                     lang="it"), 45)
     self.assertEqual(extract_number("ventuno anni ",
                                     lang="it"), 21)
     self.assertEqual(extract_number("ventotto euro ",
                                     lang="it"), 28)
     self.assertEqual(extract_number("dodici e quarantacinque ",
                                     lang="it"), 12.45)
     self.assertEqual(extract_number("quarantotto euro ",
                                     lang="it"), 48)
     self.assertEqual(extract_number("novantanove euro ",
                                     lang="it"), 99)
     self.assertEqual(extract_number("avvisa se qualcuno arriva ",
                                     lang="it"), False)
예제 #15
0
    def test_extract_number(self):
        self.assertEqual(
            extract_number("this is the first test", ordinals=True), 1)
        self.assertEqual(extract_number("this is 2 test"), 2)
        self.assertEqual(extract_number("this is second test", ordinals=True),
                         2)
        self.assertEqual(extract_number("this is the third test"), 1.0 / 3.0)
        self.assertEqual(
            extract_number("this is the third test", ordinals=True), 3.0)
        self.assertEqual(extract_number("this is test number 4"), 4)
        self.assertEqual(extract_number("one third of a cup"), 1.0 / 3.0)
        self.assertEqual(extract_number("three cups"), 3)
        self.assertEqual(extract_number("1/3 cups"), 1.0 / 3.0)
        self.assertEqual(extract_number("quarter cup"), 0.25)
        self.assertEqual(extract_number("1/4 cup"), 0.25)
        self.assertEqual(extract_number("one fourth cup"), 0.25)
        self.assertEqual(extract_number("2/3 cups"), 2.0 / 3.0)
        self.assertEqual(extract_number("3/4 cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("1 and 3/4 cups"), 1.75)
        self.assertEqual(extract_number("1 cup and a half"), 1.5)
        self.assertEqual(extract_number("one cup and a half"), 1.5)
        self.assertEqual(extract_number("one and a half cups"), 1.5)
        self.assertEqual(extract_number("one and one half cups"), 1.5)
        self.assertEqual(extract_number("three quarter cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("three quarters cups"), 3.0 / 4.0)
        self.assertEqual(extract_number("twenty two"), 22)
        self.assertEqual(extract_number("two hundred"), 200)
        self.assertEqual(extract_number("nine thousand"), 9000)
        self.assertEqual(extract_number("six hundred sixty six"), 666)
        self.assertEqual(extract_number("two million"), 2000000)
        self.assertEqual(
            extract_number("two million five hundred thousand "
                           "tons of spinning metal"), 2500000)
        self.assertEqual(extract_number("six trillion"), 6000000000000.0)
        self.assertEqual(extract_number("six trillion", short_scale=False),
                         6e+18)
        self.assertEqual(extract_number("one point five"), 1.5)
        self.assertEqual(extract_number("three dot fourteen"), 3.14)
        self.assertEqual(extract_number("zero point two"), 0.2)
        self.assertEqual(extract_number("billions of years older"),
                         1000000000.0)
        self.assertEqual(
            extract_number("billions of years older", short_scale=False),
            1000000000000.0)
        self.assertEqual(extract_number("one hundred thousand"), 100000)
        self.assertEqual(extract_number("minus 2"), -2)
        self.assertEqual(extract_number("negative seventy"), -70)
        self.assertEqual(extract_number("thousand million"), 1000000000)
        self.assertEqual(extract_number("sixth third"), 1 / 6 / 3)
        self.assertEqual(extract_number("sixth third", ordinals=True), 3)
        self.assertEqual(extract_number("thirty second"), 30)
        self.assertEqual(extract_number("thirty second", ordinals=True), 32)
        self.assertEqual(
            extract_number("this is the billionth test", ordinals=True), 1e09)
        self.assertEqual(extract_number("this is the billionth test"), 1e-9)
        self.assertEqual(
            extract_number("this is the billionth test",
                           ordinals=True,
                           short_scale=False), 1e12)
        self.assertEqual(
            extract_number("this is the billionth test", short_scale=False),
            1e-12)
        # TODO handle this case
        # self.assertEqual(
        #    extract_number("6 dot six six six"),
        #    6.666)
        self.assertTrue(extract_number("The tennis player is fast") is False)
        self.assertTrue(extract_number("fraggle") is False)

        self.assertTrue(extract_number("fraggle zero") is not False)
        self.assertEqual(extract_number("fraggle zero"), 0)

        self.assertTrue(extract_number("grobo 0") is not False)
        self.assertEqual(extract_number("grobo 0"), 0)
예제 #16
0
 def test_extractnumber_fr(self):
     self.assertEqual(extract_number("voici le premier test", lang="fr-fr"),
                      1)
     self.assertEqual(extract_number("c'est 2 tests", lang="fr-fr"), 2)
     self.assertEqual(extract_number("voici le second test", lang="fr-fr"),
                      2)
     self.assertEqual(extract_number("voici trois tests",
                                     lang="fr-fr"),
                      3)
     self.assertEqual(extract_number("voici le test numéro 4",
                                     lang="fr-fr"), 4)
     self.assertEqual(extract_number("un tiers de litre", lang="fr-fr"),
                      1.0 / 3.0)
     self.assertEqual(extract_number("3 cuillères", lang="fr-fr"), 3)
     self.assertEqual(extract_number("1/3 de litre", lang="fr-fr"),
                      1.0 / 3.0)
     self.assertEqual(extract_number("un quart de bol", lang="fr-fr"), 0.25)
     self.assertEqual(extract_number("1/4 de verre", lang="fr-fr"), 0.25)
     self.assertEqual(extract_number("2/3 de bol", lang="fr-fr"), 2.0 / 3.0)
     self.assertEqual(extract_number("3/4 de bol", lang="fr-fr"), 3.0 / 4.0)
     self.assertEqual(extract_number("1 et 3/4 de bol", lang="fr-fr"), 1.75)
     self.assertEqual(extract_number("1 bol et demi", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un bol et demi", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un et demi bols", lang="fr-fr"), 1.5)
     self.assertEqual(extract_number("un bol et un demi", lang="fr-fr"),
                      1.5)
     self.assertEqual(extract_number("trois quarts de bol", lang="fr-fr"),
                      3.0 / 4.0)
     self.assertEqual(extract_number("32.2 degrés", lang="fr-fr"), 32.2)
     self.assertEqual(extract_number("2 virgule 2 cm", lang="fr-fr"), 2.2)
     self.assertEqual(extract_number("2 virgule 0 2 cm", lang="fr-fr"),
                      2.02)
     self.assertEqual(extract_number("ça fait virgule 2 cm", lang="fr-fr"),
                      0.2)
     self.assertEqual(extract_number("point du tout", lang="fr-fr"),
                      "point tout")
     self.assertEqual(extract_number("32.00 secondes", lang="fr-fr"), 32)
     self.assertEqual(extract_number("mange trente-et-une bougies",
                                     lang="fr-fr"), 31)
     self.assertEqual(extract_number("un trentième",
                                     lang="fr-fr"), 1.0 / 30.0)
     self.assertEqual(extract_number("un centième",
                                     lang="fr-fr"), 0.01)
     self.assertEqual(extract_number("un millième",
                                     lang="fr-fr"), 0.001)
     self.assertEqual(extract_number("un 20e",
                                     lang="fr-fr"), 1.0 / 20.0)
예제 #17
0
    def _get_alarm_matches(self,
                           utt,
                           alarm=None,
                           max_results=1,
                           dialog='ask.which.alarm',
                           is_response=False):
        """Get list of alarms that match based on a user utterance.
        Arguments:
            utt (str): string spoken by the user
            alarm (list): list of alarm to match against
            max_results (int): max number of results desired
            dialog (str): name of dialog file used for disambiguation
            is_response (bool): is this being called by get_response
        Returns:
            (str): ["All", "Matched", "No Match Found", or "User Cancelled"]
            (list): list of matched alarm
        """
        alarms = alarm or self.settings['alarm']
        all_words = self.translate_list('all')
        next_words = self.translate_list('next')
        status = ["All", "Matched", "No Match Found", "User Cancelled", "Next"]

        # No alarms
        if alarms is None or len(alarms) == 0:
            self.log.error("Cannot get match. No active alarms.")
            return (status[2], None)

        # Extract Alarm Time
        when, utt_no_datetime = extract_datetime(utt) or (None, None)

        # Will return dt of unmatched string
        today = extract_datetime("today")
        today = today[0]

        # Check the time if it's midnight. This is to check if the user
        # said a recurring alarm with only the Day or if the user did
        # specify to set an alarm on midnight. If it's confirmed that
        # it's for a day only, then get another response from the user
        # to clarify what time on that day the recurring alarm is.
        is_midnight = self._check_if_utt_has_midnight(utt, when,
                                                      self.threshold)

        if when == today and not is_midnight:
            when = None

        time_matches = None
        time_alarm = None
        if when:
            time_alarm = to_utc(when).timestamp()
            if is_midnight:
                time_alarm = time_alarm + 86400.0
            time_matches = [
                a for a in alarms if abs(a["timestamp"] - time_alarm) <= 60
            ]

        # Extract Recurrence
        recur = None
        recurrence_matches = None
        for word in self.recurrence_dict:
            is_match = self._fuzzy_match(word, utt.lower(), self.threshold)
            if is_match:
                recur = self._create_day_set(utt)
                alarm_recur = self._create_recurring_alarm(when, recur)
                recurrence_matches = [
                    a for a in alarms
                    if a["repeat_rule"] == alarm_recur["repeat_rule"]
                ]
                break

        utt = utt_no_datetime or utt

        # Extract Ordinal/Cardinal Numbers
        number = extract_number(utt, ordinals=True)
        if number and number > 0:
            number = int(number)
        else:
            number = None

        # Extract Name
        name_matches = [
            a for a in alarms
            if a["name"] and self._fuzzy_match(a["name"], utt, self.threshold)
        ]

        # Match Everything
        alarm_to_match = None
        if when:
            if recur:
                alarm_to_match = alarm_recur
            else:
                alarm_to_match = {"timestamp": time_alarm, "repeat_rule": ""}

        # Find the Intersection of the Alarms list and all the matched alarms
        orig_count = len(alarms)
        if when and time_matches:
            alarms = [a for a in alarms if a in time_matches]
        if recur and recurrence_matches:
            alarms = [a for a in alarms if a in recurrence_matches]
        if name_matches:
            alarms = [a for a in alarms if a in name_matches]

        # Utterance refers to all alarms
        if utt and any(self._fuzzy_match(i, utt, 1) for i in all_words):
            return (status[0], alarms)
        # Utterance refers to the next alarm to go off
        elif utt and any(self._fuzzy_match(i, utt, 1) for i in next_words):
            return (status[4], [alarms[0]])

        # Given something to match but no match found
        if ((number and number > len(alarms))
                or (recur and not recurrence_matches)
                or (when and not time_matches)):
            return (status[2], None)
        # If number of alarms filtered were the same, assume user asked for
        # All alarms
        if (len(alarms) == orig_count and max_results > 1 and not number
                and not when and not recur):
            return (status[0], alarms)
        # Return immediately if there is ordinal
        if number and number <= len(alarms):
            return (status[1], [alarms[number - 1]])
        # Return immediately if within maximum results
        elif alarms and len(alarms) <= max_results:
            return (status[1], alarms)
        # Ask for reply from user and iterate the function
        elif alarms and len(alarms) > max_results:
            desc = []
            for alarm in alarms:
                desc.append(self._describe(alarm))

            items_string = ''
            if desc:
                items_string = join_list(desc, self.translate('and'))

            reply = self.get_response(dialog,
                                      data={
                                          'number': len(alarms),
                                          'list': items_string,
                                      },
                                      num_retries=1)
            if reply:
                return self._get_alarm_matches(reply,
                                               alarm=alarms,
                                               max_results=max_results,
                                               dialog=dialog,
                                               is_response=True)
            else:
                return (status[3], None)

        # No matches found
        return (status[2], None)