Ejemplo n.º 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)
Ejemplo n.º 2
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)
Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 5
0
from mycroft_lang_utils.parse import extract_datetime, extract_number, \
    extract_numbers, extract_duration, normalize

# extract a number
assert extract_number("nothing") is False
assert extract_number("two million five hundred thousand tons of spinning "
                      "metal") == 2500000
assert extract_number("six trillion") == 6000000000000.0
assert extract_number("six trillion", short_scale=False) == 6e+18

assert extract_number("1 and 3/4 cups") == 1.75
assert extract_number("1 cup and a half") == 1.5

## extracts all numbers
assert extract_numbers("nothing") == []
assert extract_numbers("this is a one twenty one  test") == [1.0, 21.0]
assert extract_numbers("1 dog, seven pigs, macdonald had a farm, "
                       "3 times 5 macarena") == [1, 7, 3, 5]

## extract durations
from datetime import timedelta

assert extract_duration("nothing") == (None, 'nothing')

assert extract_duration("Nineteen minutes past the hour") == (
    timedelta(minutes=19),
    "past the hour")
assert extract_duration("wake me up in three weeks, four hundred ninety seven"
                        " days, and three hundred 91.6 seconds") == (
           timedelta(weeks=3, days=497, seconds=391.6),
           "wake me up in , , and")
Ejemplo n.º 6
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)
Ejemplo n.º 7
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("the fourth one", ordinals=True), 4.0)
        self.assertEqual(extract_number("the thirty sixth one", ordinals=True),
                         36.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)