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)
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)
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)
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)
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")
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)
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)