2010-12-28 2 views
2

Недавно начала работать над проектом, который может понадобиться (хорошо) Масштабные возможности, я придумал следующий вопрос:PHP оптимизация орфографии итерации

Не принимая во внимание алгоритма levensthein (я работаю с/на разных вариантах), я повторяю каждое слово словаря и вычисляю расстояние levensthein между словарем слова и каждым из слов в моей строке ввода. Что-то по строкам:

<?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 «Возможно, вы имели в виду:?» не требуется несколько секунд, чтобы проверить одну и ту же входную строку;)

Заранее благодарен и счастливый Новый год.

+0

С тех пор как вы упомянули google http://answers.google.com/answers/threadview?id=526503 –

ответ

3

Прочитано Norvig's How to Write a Spelling Corrector. Хотя в статье используется Python, другие реализовали ее в PHP here и here.

+0

В нижней части этой страницы есть 2 ссылки на 2 PHP-реализации –

+0

@Tom Спасибо, добавил, что. – marcog

+0

Мне удалось получить время выполнения от 0,0001-0,001 за слово, взяв пример Норвига, немного изменив настройку и оставив инициализацию для запуска (запуск скрипта python в качестве сервера, который задает вопросы о написании и отвечает с исправленной версией), поэтому большое спасибо! – James

0

Вам бы удалось реализовать свой словарь как двоичное дерево или другую более эффективную структуру данных. Дерево значительно сократит время поиска.

+0

Спасибо за подсказку – James

Смежные вопросы