powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - Распознавание текста из SMS
3 сообщений из 3, страница 1 из 1
Perl - Распознавание текста из SMS
    #38582092
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть SMS-шлюз, на который присылают разные команды, команд примерно с десяток.
Команды присылают как попало, например:
Код: plaintext
1.
2.
3.
4.
BONUS     # нормальная команда
БОНУС     # нормальная команда
БOHYC     # первая буква на кириллице, остальные латинские
B0HUC     # второй знак это цифра 0, остальные символы латинские
Ну и еще с десяток вариантов, фантазия у пользователей неистощимая.
Мне нужно распознать, какая именно команда была введена, учитывая фантазию пользователей.
Все возможные варианты я рассматривать не собираюсь, хотя бы основные.
Ну и еще надо игнорировать незначащие пробелы и переводы строк (в начале или в конце текста), а также игнорировать текст, дописанный после распознаваемой команды (например текст "бонус 20" должен распознаваться как команда BONUS).
Подскажите, как лучше сделать вторую часть задачи?
Дописать к команде пробел и проверять index($text,$cmd.' ') ?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Perl - Распознавание текста из SMS
    #38582628
Kostya5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.,
Для начала формализовать пришедшую смс, заменив У, Y => U; C => S и т.д.
через tr/// или s///
вторая часть как-то так:
Код: php
1.
2.
3.
4.
5.
6.
for $command (qw/BONUS KONUS SMS/) {
 if ($sms_text =~ /$command/i) {
  print $command;
  # do anything
 }
}
...
Рейтинг: 0 / 0
Perl - Распознавание текста из SMS
    #38582836
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормализация команды — это задача отдельная.
Я пока решил ей вообще не заниматься, а просто просматривать несколько наиболее распространенных вариантов.
Вопрос у меня скорее такой. Для распознавания команды используется такая функция:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
sub recognize($)
{
	my $text = shift;
	return undef unless($text);
	my $cmd = {...}; # список кодов команд, {'bonus'=>'Получить бонус'}
	my $msg = {...}; # список возможных вариантов написания команд {'BONUS'=>'bonus', 'БОНУС'=>'bonus'}
	$text =~ s/\n/ \| /g;
	$text =~ s/^\s+//;
	$text =~ s/\s+$//;
	$text =~ s/\./ /;
	$text = uc($text) . ' ';
	foreach my $c (keys %$msg)
	{
		unless (index($text,"$c ") < 0)
		{
			print "Команда $msg->{$c}\n";
			last;
		}
	}
}



Может как-то можно улучшить?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - Распознавание текста из SMS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]