예제 #1
0
        public void TestFractionModel()
        {
            var ci = new PortugueseNumberParserConfiguration().CultureInfo;

            var model = GetNumberModel();

            BasicTest(model, "um quinto", "0,2");

            BasicTest(model, "um bilionesimo", "1E-09");

            BasicTest(model, "cem mil bilionesimos", "0,0001");

            BasicTest(model, "tres quintos", "0,6");

            BasicTest(model, "vinte quintos", "4");

            BasicTest(model, "vinte e tres quintos", "4,6");

            BasicTest(model, "dois sobre onze", ((double)2 / 11).ToString(ci));

            BasicTest(model, "um vinte e um avos", ((double)1 / 21).ToString(ci));

            BasicTest(model, "dois onze avos", ((double)2 / 11).ToString(ci));

            BasicTest(model, "cento e trinta e tres vinte e um avos", ((double)133 / 21).ToString(ci));

            BasicTest(model, "vinte e dois trinta avos", ((double)22 / 30).ToString(ci));

            BasicTest(model, "um vinte e cinco avos", ((double)1 / 25).ToString(ci));

            BasicTest(model, "um sobre vinte e cinco", ((double)1 / 25).ToString(ci));

            BasicTest(model, "vinte vinte e cinco avos", "0,8");

            BasicTest(model, "tres vinte e um avos", ((double)3 / 21).ToString(ci));

            BasicTest(model, "tres vinte avos", ((double)3 / 20).ToString(ci));

            BasicTest(model, "tres duzentos avos", ((double)3 / 200).ToString(ci));

            BasicTest(model, "tres dois milesimos", ((double)3 / 2000).ToString(ci));

            BasicTest(model, "tres vinte milesimos", ((double)3 / 20000).ToString(ci));

//            BasicTest(model, "tres duzentos milesimos", ((double)3 / 200000).ToString(ci));

            // act like Google
            BasicTest(model, "cento e trinta quintos", ((double)130 / 5).ToString(ci));

//            BasicTest(model, "cem trinta e cinco avos", ((double)100 / 35).ToString(ci));

            //@HERE
//            BasicTest(model, "tres e um quinto", "3,2");

            BasicTest(model, "vinte e um quintos", "4,2");

            BasicTest(model, "cento e trinta e dois cinco avos", ((double)132 / 5).ToString(ci));

            BasicTest(model, "cento e trinta e dois quintos", ((double)132 / 5).ToString(ci));

//            BasicTest(model, "um cento e cinco avos", ((double)1 / 105).ToString(ci));

//            BasicTest(model, "cem mil e cinco avos", ((double)100 / 1005).ToString(ci));

            BasicTest(model, "um sobre tres", ((double)1 / 3).ToString(ci));

            BasicTest(model, "1 sobre 21", ((double)1 / 21).ToString(ci));

            BasicTest(model, "1 sobre tres", ((double)1 / 3).ToString(ci));

            BasicTest(model, "1 sobre 3", ((double)1 / 3).ToString(ci));

            BasicTest(model, "um sobre 3", ((double)1 / 3).ToString(ci));

            BasicTest(model, "1/3", ((double)1 / 3).ToString(ci));

            BasicTest(model, "um sobre 20", ((double)1 / 20).ToString(ci));

            BasicTest(model, "um sobre vinte", ((double)1 / 20).ToString(ci));

            BasicTest(model, "um sobre cem", ((double)1 / 100).ToString(ci));

            BasicTest(model, "1 sobre cento e vinte e um", ((double)1 / 121).ToString(ci));

            BasicTest(model, "um sobre cento e trinta e cinco", ((double)1 / 135).ToString(ci));

//            BasicTest(model, "cinco meios", ((double)5 / 2).ToString(ci));

            BasicTest(model, "tres quartos", ((double)3 / 4).ToString(ci));

//            BasicTest(model, "dois tercos", ((double)2 / 3).ToString(ci));

//            BasicTest(model, "cento e trinta e cinco meios", ((double)135 / 2).ToString(ci));

//            BasicTest(model, "dez e um meio", (10 + (double)1 / 2).ToString(ci));

//            BasicTest(model, "dez e um quarto", (10 + (double)1 / 4).ToString(ci));

            // Should we also support a common informal format?
            //BasicTest(model, "um por vinte e cinco", ((double)1 / 25).ToString(ci));
        }
예제 #2
0
        public void TestPercentageModel()
        {
            var ci = new PortugueseNumberParserConfiguration().CultureInfo;

            var model = GetPercentageModel();

            #region Integer percentages

            BasicTest(model, "100%", "100%");

            BasicTest(model, " 100% ", "100%");

            BasicTest(model, " 100 por cento", "100%");

            BasicTest(model, " cem por cento", "100%");

            BasicTest(model, "243 por cento", "243%");

            BasicTest(model, "vinte por cento", "20%");

            BasicTest(model, "trinta e cinco por cento", "35%");

            BasicTest(model, "quinhentos e trinta e cinco por cento", "535%");

            BasicTest(model, "10 por cento", "10%");

            BasicTest(model, "dez por cento", "10%");

            BasicTest(model, "tres milhoes cinquenta e dois mil trezentos e quarenta e sete por cento", "3052347%");

            // percentages within sentences
            BasicTest(model, "algo como uns 11%", "11%", "11%");

            BasicTest(model, "claro, somente uns 15 por cento", "15%", "15 por cento");

            BasicTest(model, "sim, nada mais que vinte e cinco por cento", "25%", "vinte e cinco por cento");

            BasicTest(model, "derrame cem por cento do liquido", "100%", "cem por cento");

            BasicTest(model, "um percentual de 25%", "25%", "25%");

            BasicTest(model, "uma percentagem de trinta e seis por cento do total", "36%", "trinta e seis por cento");

            BasicTest(model, "um percentual de oitenta e quatro por cento", "84%", "oitenta e quatro por cento");

            #endregion

            #region Double percentages

            BasicTest(model, " 101231,2353%", "101231,2353%");

            BasicTest(model, "-101231,4323%", "-101231,4323%");

            BasicTest(model, " -89101231,5127%", "-89101231,5127%");

            BasicTest(model, " - 89101231,5127%", "-89101231,5127%");

            BasicTest(model, ",23456000%", "0,23456%");

            BasicTest(model, "4,800%", "4,8%");

            BasicTest(model, "4,8 por cento", "4,8%");

            BasicTest(model, " -89101231,5127 por cento", "-89101231,5127%");

            BasicTest(model, "-89101231,5127 por cento", "-89101231,5127%");

            BasicTest(model, " - 89101231,5127 por cento", "-89101231,5127%");

            BasicTest(model, " -1,1234567 por cento", "-1,1234567%");

            BasicTest(model, "1.234.567,51274 por cento", "1234567,51274%");

            BasicTest(model, ",08 por cento", "0,08%");

            BasicTest(model, "9,2321312%", "9,2321312%");

            BasicTest(model, " -9,2321312 por cento", "-9,2321312%");

            BasicTest(model, "1e10%", "10000000000%");

            BasicTest(model, "1,1^23 por cento", "8,95430243255239%");

//            BasicTest(model, "sete ponto 5 por cento", "7,5%");

//            BasicTest(model, "sete virgula 5 por cento", "7,5%");

            BasicTest(model, "quarenta e sete virgula vinte e oito por cento", "47,28%");

            #endregion

            #region Fraction percentages

            BasicTest(model, "tres quintos por cento", ((double)3 / 5).ToString(ci) + "%");

            BasicTest(model, "dois virgula cinco por cento", "2,5%");

            BasicTest(model, "um quinto por cento", "0,2%");

            BasicTest(model, "um bilionesimo por cento", "1E-09%");

            BasicTest(model, "um vinte e um avos por cento", ((double)1 / 21).ToString(ci) + "%");

            BasicTest(model, "cento e trinta e tres vinte e um avos por cento", ((double)133 / 21).ToString(ci) + "%");

            // Ambiguous in Portuguese
            // BasicTest(model, "cento e trinta e tres vinte e um avos por cento", (130 + (double)3 / 21).ToString(ci) + "%");

            BasicTest(model, "vinte e dois trinta avos por cento", ((double)22 / 30).ToString(ci) + "%");

            BasicTest(model, "tres dois milesimos por cento", ((double)3 / 2000).ToString(ci) + "%");

            // act like Google
            BasicTest(model, "cento e trinta quintos por cento", ((double)130 / 5).ToString(ci) + "%");

            BasicTest(model, "cento e trinta e dois quintos por cento", ((double)132 / 5).ToString(ci) + "%");

            BasicTest(model, "um sobre tres por cento", ((double)1 / 3).ToString(ci) + "%");

            BasicTest(model, "1 sobre 3 por cento", ((double)1 / 3).ToString(ci) + "%");

            BasicTest(model, "3/4%", ((double)3 / 4).ToString(ci) + "%");

            BasicTest(model, "2/3%", ((double)2 / 3).ToString(ci) + "%");

//            BasicTest(model, "sete e meio por cento", "7,5%");

//            BasicTest(model, "cem trinta e cinco avos por cento", ((double)100 / 35).ToString(ci) + "%");

            #endregion
        }