Статьи

Найти и исправить слова с ошибками с помощью Pspell

Каждый из нас совершил орфографическую ошибку в поиске в Google: например, «переменная музыка». При этом вы, возможно, заметили, что Google пытается помочь вам, показывая: «Вы имели в виду альтернативную музыку?». Если на вашем сайте есть функция поиска, указание орфографических ошибок, если не найдено ни одного или слишком мало результатов, является очень полезной функцией, особенно если плохой английский посетителя может заставить вас пропустить продажу. К счастью, модуль PHP Pspell позволяет проверять написание слова и предлагать замену из словаря по умолчанию (вы также можете создать собственный словарь).

Для начала нам нужно проверить, установлен ли Pspell:

<?php $config_dic= pspell_config_create ('en'); 

Если вы получили ошибку, это не так. В системах Linux следуйте этим инструкциям, чтобы решить проблему.

Используйте словарь по умолчанию

Вот небольшая функция, которая поможет вам понять, как работает Pspell:

 <?php function orthograph($string) { // Suggests possible words in case of misspelling $config_dic = pspell_config_create('en'); // Ignore words under 3 characters pspell_config_ignore($config_dic, 3); // Configure the dictionary pspell_config_mode($config_dic, PSPELL_FAST); $dictionary = pspell_new_config($config_dic); // To find out if a replacement has been suggested $replacement_suggest = false; $string = explode('', trim(str_replace(',', ' ', $string))); foreach ($string as $key => $value) { if(!pspell_check($dictionary, $value)) { $suggestion = pspell_suggest($dictionary, $value); // Suggestions are case sensitive. Grab the first one. if(strtolower($suggestion [0]) != strtolower($value)) { $string [$key] = $suggestion [0]; $replacement_suggest = true; } } } if ($replacement_suggest) { // We have a suggestion, so we return to the data. return implode('', $string); } else { return null; } } 

Чтобы использовать эту функцию, достаточно передать ей строковый параметр:

 <?php $search = $_POST['input']; $suggestion_spell = orthograph($search); if ($suggestion_spell) { echo "Try with this spelling : $suggestion_spell"; } 

Если строка, которую вы отправляете в Pspell, называется «вот мое неверное слово», предыдущий скрипт вернет: «Попробуйте с этим написанием: вот мое слово с ошибкой». Тем не менее, Pspell не чудотворец, особенно если вы автоматически используете первую предложенную альтернативу правописанию! Для достижения наилучших результатов вы можете использовать все предложения, предложенные Pspell. Следующий скрипт возвращает двадцать предложений вокруг слова «lappin»:

 <?php $dict = pspell_new ("en"); if (!pspell_check ($dict, "lappin")) { $suggestions = pspell_suggest ($dict, "lappin"); foreach ($suggestions as $suggestion) { echo "Did you mean: $suggestion?<br />"; } } 

Вы должны настроить словарь для инициализации Pspell. Для этого создайте дескриптор для файла конфигурации словаря, измените некоторые параметры этого дескриптора, затем используйте словарь конфигурации, чтобы создать второй дескриптор для реального словаря. Если это звучит немного сложно, не беспокойтесь: код редко меняется, и вы обычно можете скопировать его из другого скрипта. Однако здесь мы будем изучать это шаг за шагом. Вот код
это настраивает словарь:

  // Suggests possible words in case of misspelling $config_dic = pspell_config_create('en'); // Ignore words under 3 characters pspell_config_ignore($config_dic, 3); // Configure the dictionary pspell_config_mode($config_dic, PSPELL_FAST); 

$config_dic — это исходный шаблон, который управляет параметрами вашего словаря. Вы должны загрузить все параметры в $config_dic , а затем использовать его для создания словаря. pspell_config_create() создает словарь английского языка (en). Чтобы использовать английский язык и указать, что вы предпочитаете американскую орфографию, укажите «en» в качестве первого параметра и «american» в качестве второго. pspell_config_ignore() указывает, что ваш словарь будет игнорировать все слова из 3 букв или менее. Наконец, pspell_config_mode() указывает Pspell рабочий режим:

• PSPELL_FAST — это быстрый метод, который возвращает минимум предложений.
• PSPELL_NORMAL возвращает среднее количество предложений с нормальной скоростью.
• PSPELL_SLOW предоставляет все возможные предложения, хотя этот метод требует некоторого времени для проверки орфографии. Мы могли бы по-прежнему использовать другие параметры конфигурации (например, чтобы добавить собственный словарь, как мы увидим позже), но, поскольку это быстрая проверка, мы просто создадим словарь с этой строкой:

  $dictionary = pspell_new_config($config_dic); 

С этого момента вы можете использовать словарь двумя способами:
1. pspell_check($dictionary, "word") возвращает true если слово «word» находится в словаре.
2. pspell_suggest($dictionary, "word") возвращает массив предлагаемых слов, если «word» нет в словаре (первый элемент этого массива является наиболее вероятным кандидатом). Количество полученных слов варьируется, но вы получаете больше с PSPELL_SLOW и меньше с PSPELL_FAST.

Теперь, когда словарь готов, мы обрезаем строку, переданную в качестве параметра, чтобы получить массив слов: «здесь мое предложение» становится массивом из трех элементов: «здесь», «мое» и «предложение». Затем мы проверяем правописание каждого слова, используя словарь по умолчанию. Поскольку он не любит запятые, мы также удаляем их перед разрывом строки. Если слово содержит более трех символов, выполняется проверка, а в случае орфографической ошибки мы выполняем следующие операции:

  1. Мы просим Pspell предоставить множество предложений по исправлению.
  2. Мы берем наиболее вероятное предложение (первый элемент массива $ предложить) и заменяем слово с ошибкой на него.
  3. Мы устанавливаем флаг $replacement_suggest в true, чтобы в конце цикла обработки мы знали, что нашли ошибку орфографии где-то в $string . В конце цикла, если были исправления орфографии, мы преобразовываем строку из элементов исправленного массива и возвращаем эту цепочку. В противном случае функция возвращает ноль, чтобы указать, что она не обнаружила опечатку.

Добавить пользовательский словарь в Pspell

Если слово отсутствует в словаре по умолчанию, вы можете легко добавить его. Однако вы также можете создать собственный словарь, который будет использоваться по умолчанию.
Создайте каталог на своем сайте, где PHP имеет право написать и инициализировать в нем новый словарь. Чтобы создать новый файл словаря с именем perso.pws в пути к каталогу вашего сервера, используйте следующий скрипт:

 <?php $config_dic = pspell_config_create ('en'); pspell_config_personal($config_dic, 'path / perso.pws'); pspell_config_ignore($config_dic , 2); pspell_config_mode($config_dic, PSPELL_FAST); $dic = pspell_new_config($config_dic); 

Это тот же сценарий, что и в предыдущем разделе, но с существенным дополнением: вызов pspell_config_personal() инициализирует файл личного словаря. Если этот файл еще не существует, Pspell создаст для вас новый. Вы можете добавить в этот словарь столько слов, сколько хотите, используя следующую функцию:

 `pspell_add_to_personal($dic, "word");` 

Пока вы не сохранили словарь, слова добавляются в него временно. Поэтому, вставив нужные слова, добавьте эту строку в конец скрипта:

 pspell_save_wordlist($dic); 

Затем вызовите pspell_config_personal() как указано выше в демонстрационном скрипте, и ваш новый словарь будет готов.

Вывод

Pspell может помочь вам повысить коэффициент конверсии, предоставив посетителям возможность автоматически исправлять и замечать их опечатки. Это может улучшить возможности поиска, представления на форуме и общую лингвистическую точность веб-сайта с пользовательским контентом. Если вы хотите более глубоко взглянуть на Pspell или реализовать его интересным образом, сообщите нам об этом в комментариях ниже!