Я работаю над " Вы имеете в виду ... " своего рода системой, похожей на Google! Часть орфографии тривиальна (с библиотекой PHP pspell), но я не могу решить проблему с регистром.
Допустим, слово с ошибкой написано "GoVeNMeNt", тогда правильное слово должно быть "GoVerNMeNt" "(аналогично Google), но библиотека pspell выдает предложения только в одном регистре (обычно в нижнем регистре).
Итак, как мне написать функцию transformCase
, которая принимает фактическую строку ($string
) и строка предложения ($subject
)? Я написал следующую реализацию, которая не обрабатывает все случаи:
function transformCase($string,$subject){
for ($i=0,$marker=0;$i<strlen($string);++$i)
if (strcasecmp($string[$i],$subject[$marker])==0){
$subject[$marker]=$string[$i];
$marker+=1;
}
elseif (strlen($string)==strlen($subject))
$marker+=1;
return $subject;
}
echo transformCase("AbSaNcE",'absence')."\n"; # AbSeNcE :)
echo transformCase("StRioNG",'string')."\n"; # StRiNG :)
echo transformCase("GOVERMENt",'government')."\n"; # GOVERNment :<
В последнем случае вывод должен быть GOVERnMENt. Алгоритм также не работает с другими запросами.
Так что я был бы рад, если бы кто-нибудь помог мне с алгоритмом:)