В PHP я пытаюсь создать естественную систему распознавания текста, которая может распознавать то, что вы пишете интеллектуальным способом.
Я бы хотел, чтобы оно соответствовало предложению с «шаблоном» и сохраняло некоторую информацию, например, если schedule a {scheduletype} with {person} at {time}
по сравнению с Schedule a meeting with Ann at 3pm
, код PHP будет создавать переменные $scheduletype
с ценностью встречи, $person
с Энн и $time
с 3 вечера. Можно ли заставить его работать, если предложение написано в другом порядке, например, «В 3 часа дня назначить встречу с Энн»?
Я пытался найти это в Google и Stack Exchange, но, к сожалению, ничего не нашел.
Вот мой текущий код:
$pattern = 'schedule a ([a-zA-Z0-9\-\.\/\?_=&;]*) with ([a-zA-Z0-9\-\.\/\?_=&;]*) at ([a-zA-Z0-9\-\.\/\?_=&;]*)';
$content = 'shedule a meeting with Ann at 3pm';
$match = preg_match($pattern, strtolower($content) , $found);
print_r($match);
Проблема в том, что мой код ничего не назначает $preg_match
,
Вы можете использовать этот тип именованного регулярного выражения группы захвата:
#Schedule a (?<scheduletype>\w+)\swith\s(?<person>\w+)\sat\s(?<time>\w+)#
Пример:
<?php
$regex= '#Schedule a (?<scheduletype>\w+)\swith\s(?<person>\w+)\sat\s(?<time>\w+)#';
preg_match($regex, 'Schedule a meeting with Ann at 3pm', $matches);
echo $matches['scheduletype']."\n";
echo $matches['person']."\n";
echo $matches['time']."\n";
Играть с регулярным выражением здесь: https://regex101.com/r/6QPRsG/1/
Играть с кодом здесь: https://3v4l.org/OBOnY
Других решений пока нет …