Недавно начав работать над проектом, который может нуждаться в (хороших) возможностях масштабирования, у меня возник следующий вопрос:
Не принимая во внимание алгоритм Левенштейна (я работаю с/над разными вариантами), я перебираю каждое слово словаря и вычисляю расстояние Левенштейна между словом словаря и каждым из слов в моей входной строке. Что-то вроде:
<?php
$input_words = array("this", "is", "a", "test");
foreach ($dictionary_words as $dictionary_word) {
foreach ($input_words as $input_word) {
$ld = levenshtein($input_word, $accepted_word);
if ($ld < $distances[$input_word] || $distances[$word] == NULL) {
$distances[$input_word] = $ld;
if ($ld == 0)
continue;
}
}
}
?>
Мой вопрос о наилучшей практике: время выполнения составляет ~ 1-2 секунды. Я думаю о запуске «словарного сервера», который при запуске загружает словарные слова в память, а затем выполняет итерацию как часть проверки орфографии (как описано выше) при получении запроса. Уменьшит ли это время выполнения или медленная часть будет итерацией (для циклов)? Если да, то могу ли я что-нибудь сделать для правильной оптимизации?
Google "Вы имели в виду:?" не требуется несколько секунд, чтобы проверить одну и ту же строку ввода;)
Заранее спасибо и с наступающим Новым годом.