Распознавание ИНН и длинных чисел в голосовых проектах
Рассказывает сотрудник техподдержки Рома Юдаков
Иногда клиентам требуется, чтобы по телефону был продиктован ИНН или другой набор чисел.
Часто пользователи диктуют числа в формате: сто двадцать три, пять нолей, семь. Подобный ввод трудно распознать регулярным выражением.
Ниже представлен код, который принимает переменну $queryText
, содержащую всю фразу пользователя, и выводит в $all
числовое значение.
function k4() {
if ($one[$i] == "сто") {
$kk1 = 100;
$status = 4;
} else if ($one[$i] == "двести") {
$kk1 = 200;
$status = 4;
} else if ($one[$i] == "триста") {
$kk1 = 300;
$status = 4;
} else if ($one[$i] == "четыреста") {
$kk1 = 400;
$status = 4;
} else if ($one[$i] == "пятьсот") {
$kk1 = 500;
$status = 4;
} else if ($one[$i] == "шестьсот") {
$kk1 = 600;
$status = 4;
} else if ($one[$i] == "семьсот") {
$kk1 = 700;
$status = 4;
} else if ($one[$i] == "восемьсот") {
$kk1 = 800;
$status = 4;
} else if ($one[$i] == "девятьсот") {
$kk1 = 900;
$status = 4;
}
}
function k5() {
if ($one[$i] == "нуля" || $one[$i] == "нулей") {
$kk1 = 0;
$status = 5;
} else if ($one[$i] == "еденицы" || $one[$i] == "едениц") {
$kk1 = 1;
$status = 5;
} else if ($one[$i] == "двойки" || $one[$i] == "двоек") {
$kk1 = 2;
$status = 5;
} else if ($one[$i] == "тройки" || $one[$i] == "троек") {
$kk1 = 3;
$status = 5;
} else if ($one[$i] == "четверки" || $one[$i] == "четверок") {
$kk1 = 4;
$status = 5;
} else if ($one[$i] == "пятерки" || $one[$i] == "пятерок") {
$kk1 = 5;
$status = 5;
} else if ($one[$i] == "шестерки" || $one[$i] == "шестерок") {
$kk1 = 6;
$status = 5;
} else if ($one[$i] == "семерки" || $one[$i] == "семерок") {
$kk1 = 7;
$status = 5;
} else if ($one[$i] == "восьмерки" || $one[$i] == "восьмерок") {
$kk1 = 8;
$status = 5;
} else if ($one[$i] == "девятки" || $one[$i] == "девяток") {
$kk1 = 9;
$status = 5;
}
}
function k1() {
if ($one[$i] == "ноль" || $one[$i] == "нуля") {
$kk1 = 0;
$status = 1;
} else if ($one[$i] == "один" || $one[$i] == "одна") {
$kk1 = 1;
$status = 1;
} else if ($one[$i] == "два" || $one[$i] == "две") {
$kk1 = 2;
$status = 1;
} else if ($one[$i] == "три" || $one[$i] == "трое") {
$kk1 = 3;
$status = 1;
} else if ($one[$i] == "четыре" || $one[$i] == "четверо") {
$kk1 = 4;
$status = 1;
} else if ($one[$i] == "пять" || $one[$i] == "пятеро") {
$kk1 = 5;
$status = 1;
} else if ($one[$i] == "шесть" || $one[$i] == "шестеро") {
$kk1 = 6;
$status = 1;
} else if ($one[$i] == "семь" || $one[$i] == "семеро") {
$kk1 = 7;
$status = 1;
} else if ($one[$i] == "восемь") {
$kk1 = 8;
$status = 1;
} else if ($one[$i] == "девять") {
$kk1 = 9;
$status = 1;
}
}
function k3() {
if ($one[$i] == "одиннадцать") {
$kk1 = 11;
$status = 3;
} else if ($one[$i] == "двенадцать") {
$kk1 = 12;
$status = 3;
} else if ($one[$i] == "тринадцать") {
$kk1 = 13;
$status = 3;
} else if ($one[$i] == "четырнадцать") {
$kk1 = 14;
$status = 3;
} else if ($one[$i] == "пятнадцать") {
$kk1 = 15;
$status = 3;
} else if ($one[$i] == "шестнадцать") {
$kk1 = 16;
$status = 3;
} else if ($one[$i] == "семнадцать") {
$kk1 = 17;
$status = 3;
} else if ($one[$i] == "восемнадцать") {
$kk1 = 18;
$status = 3;
} else if ($one[$i] == "девятнадцать") {
$kk1 = 19;
$status = 3;
}
}
function k2() {
if ($one[$i] == "десять") {
$kk1 = 10;
$status = 2;
} else if ($one[$i] == "двадцать") {
$kk1 = 20;
$status = 2;
} else if ($one[$i] == "тридцать") {
$kk1 = 30;
$status = 2;
} else if ($one[$i] == "сорок") {
$kk1 = 40;
$status = 2;
} else if ($one[$i] == "пятьдесят") {
$kk1 = 50;
$status = 2;
} else if ($one[$i] == "шестьдесят") {
$kk1 = 60;
$status = 2;
} else if ($one[$i] == "семьдесят") {
$kk1 = 70;
$status = 2;
} else if ($one[$i] == "восемьдесят") {
$kk1 = 80;
$status = 2;
} else if ($one[$i] == "девяносто") {
$kk1 = 90;
$status = 2;
}
}
$one = $queryText.split([" "]);
$all = "";
$time = $one.length;
for ($i = 0; $i < $time; $i++) {
$status = 6;
k1();
k3();
k2();
k4();
if ($status == 6) {
$err = "Ошибка " + $status;
} else {
if ($status == 1) {
$ss1 = $kk1;
$i++;
k5();
if ($status == 5) {
for ($sc = 0; $sc < $ss1; $sc++) {
$all = $all + $kk1;
}
} else {
$all = $all + $ss1;
$i--;
}
} else if ($status == 3) {
$all = $all + $kk1;
} else if ($status == 4) {
$status = 10;
$pp1 = Number($kk1);
$i++;
k3();
if ($status == 3) {
$tt2 = Number($kk1);
$pp1 = $pp1 + $tt2;
$all = $all + $pp1;
}
k2();
if ($status == 2) {
$status = 10;
$tt1 = Number($kk1);
$i++;
k1();
if ($status == 1) {
$tt2 = Number($kk1);
$tt1 = $pp1 + $tt1 + $tt2;
$all = $all + $tt1;
}
if ($status == 10) {
$pp1 = $pp1 + $tt1;
$all = $all + $pp1;
$i--;
}
} else {
k1();
if ($status == 10) {
$all = $all + $pp1;
$i--;
}
if ($status == 1) {
$tt2 = Number($kk1);
$pp1 = $pp1 + $tt2;
$all = $all + $pp1;
}
}
} else if ($status == 2) {
$status = 10;
$pp1 = Number($kk1);
$i++;
k1();
if ($status == 1) {
$tt2 = Number($kk1);
$pp1 = $pp1 + $tt2;
$all = $all + $pp1;
}
if ($status == 10) {
$all = $all + $pp1;
$i--;
}
} else if ($status == 5) {
$all = $all + $kk1;
}
}
}