Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

21.6. Списки слов проверки орфографии и принципы работы с ними в PHP

Как всякий язык, РНР позволяет программисту помимо использования зарезерви рованного словаря создание самостоятельных списков слов, при помощи которых в дальнейшем будут проверяться те или иные слова. Это очень полезно, когда вам необходимо контролировать, например, ограниченный перечень слов, известных заранее.

Рассмотрим следующие функции:

• pspell_add_to_personal(),

• pspell_add_to_session(),

• pspell_clear_session(),

• pspell_config_save_repl(),

• pspell_new(),

• pspell_new_config(),

• pspell_new_personal(),

• pspell_save_wordlist().

Это не полный перечень функций работы со списками слов, но изучив основные принципы работы с этими вы без проблем сможете программировать.

В существующие списки слов можно не только удалять, но и добавлять необходи мые слова. Это позволяет сделать функция pspell_add_to_personal(). Функция имеет следующий синтаксис:

int pspell_add_to_personal (int dictionary_link, string word)

dictionary_link — идентификатор функции конфигурации, word — вносимое слово.

Функция pspell_add_to_personal() позволяет добавлять слово в персональный список слов. Если, чтобы открыть словарь, вы использовали фушщии pspell_new_config() совместно с pspell_config_personal(), то в этом случае для сохранения списка слов можно воспользоваться функцией pspell_save_wordlist().


ВНИМАНИЕ

Эта функция не будет работать, если у вас не установлена библиотека pspell версии 11.2 или aspell.32.5 и позже.


Работу функции pspell_add_to_personal() можно изучить на следующем примере:

<?

$ident = pspell_config_create("en");

pspell_config_personal($ident, "/dict/sellere.pws");

$link = pspell_new_config($ident);

pspell_add_to_personal($link, "Sasha");

pspell_save_wordlist($link);

?>

Из примера видно, что при помощи функции pspell_add_to_personal() произойдет добавление слова Sasha в список слов, находящийся по пути /diet/sellere.pws, после чего произойдет операция сохранения данных и программа прекратитвыполнение.

Если вам необходимо произвести аналогичное дополнение нового слова к списку слов в текущей сессии, воспользуйтесь функцией pspell_add_to_session(). Функция аналогична принципу работы pspell_add_to_personal() и имеет такой же синтаксис. Единственное, что их отличает — pspell_add_to_session() производит дополнение в список листов в текущей сессии.

Помимо этого в текущем сеансе можно не только добавлять, но и удалять слова списка слов. Для этого используется функция pspell_clear_session().

Pspell_clear_session() очищает текущий сеанс. Список слов сеанса становится пустым, и, например, если вы попробуете сохранить слова с использованием функции pspell_save_wordlist(), ничего не случится. Обратите внимание например:

<?

$ident = pspell_config_create("en");

pspell_config_personal($ident, "/dict/seller.pws");

$link = pspell_new_config($ident);

pspell_add_to_personal($link, "Sasha");

pspell_clear_session{$link);

pspell_save_wordlist($link) ;

?>

После выполнения примера слово Sasha не будет записано в наш список слов.

Рассмотрим еще одну функцию, представляющую для нас практический интерес. Функция pspell_save_repl() позволяет нам решать, сохранять ли список замены наряду со списком слов. Ее синтаксис:

int pspell_config_save_repl (int dictionary_link, boolean flag)

Функция pspell_config_save_repl() используется перед запросом pspell_new_config(). Это определяет, сохранитли pspell_save_wordlist() слова замены наряду со списком слов. Обычно вместо этой функции принято использовать pspell_save_wordlist().

Чтобы произвести вызов нового словаря, необходимо воспользоваться функцией pspell_new(). Функция похожа на pspell_config_create(). Она оперирует практически аналогичными понятиями параметров, за исключением нового, добавленного параметра, увидеть который вы сможете из приведенного синтаксиса данной функции:

int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])

Помимо трех имеющихся, описанных нами ранее, добавлена еще одна разновидность режима работы:

• PSPELL_RUN_TOGETHER — словосочетания рассматриваются как одно целое, т. е, конструкция thecat будет являться правильным составом и никакой ошибки определяться не будет, хотя этом случае должно содержаться место между мя словами. Изменения этих параметров могут только воздействовать на результаты, возвращенные функцией pspell_check(). В свою очередь функция pspell_suggest() будет все еще возвращать предложения.

Пример работы функции pspell_new():

$link = pspell_new("en", "", "", "", (PSPELL_EAST|PSPELL_RUN_TOGETHER));

Строка приведенного примера позволяет понять, как производится задание тех или иных параметров. Параметр PSPELL_FAST позволяет производить быструю проверку, при этом режимом PSPELL_RUN_TOGETHER мы указали на то, что словосочетания, написанные вместе, например «thedog», не являются ошибкой и нанихне стоит заострять

Для вызова нового словаря с основной конфигурацией используется функция pspell_new__config(). Функция сама по себе не задает конфигурацию, она позволяет производить обращение к ней с учетом уже определенной на начальном этапе создания скрипта. Функция имеет очень простой синтаксис:

int pspell_new_config(int config)

Другими словами, функция pspell_new_config() открывает новый словарь с установками, указанными в конфигурации, созданной при помощи функции pspell_config_create() и изменяемый при помощи функции pspell_config_*(). Этот метод является более гибким и имеет все функциональные возможности, определенные функциями pspell_new() и pspell_new_personal().


ВНИМАНИЕ

Параметр конфигурации устанавливается один раз функцией pspell_config_create(). После этого происходит элементарное обращение к идентификатору конфигурации.


Пример реализации функции pspell_new_config():

$ident = pspell_config_create("en");

pspell_config_personal($ident, "/diet/seller.pws");

pspell_config_repl($pspell_config, "/diet/seller.repl");

$link = pspell_new_config($ident);

Если вам необходимо вызвать новый словарь с персональным списком слов, необходимо воспользоваться функцией pspell_new_personal(). Синтаксис функции похож на синтаксис таких функций, как pspell_config_create() и pspell_new(). Единственное, что отличает pspell_new_personal() от приведенных — задача, для выполнения которой и была создана функция. Синтаксис функции pspell_new_personal():

int pspell_new_personal (string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])

Функция pspell_new_personal() позволяет открывать новый словарь с персональным списком слов и возвращает идентификатор связи словаря для использования в других функциях pspell. Список слов может изменяться и быть сохранен при помощи функции pspell_save_wordlist(). Однако значения слов для замены не сохраняются. Чтобы их сохранять, необходимо создать конфигурацию, используя pspell_config_create(), установить персональный файл списка слов при помощи функции pspell_config_personal(), установить файл для замены слов функцией pspell_config_repl() и вызвать новый словарь при помощи функции pspell_new_config().

В функции добавлен новый параметр (personal). Персональный параметр (personal) устанавливает файл, в котором происходит добавление слов к персональному списку, после этого файл будет сохранен. Это должно быть абсолютное имя файла, начинающееся с символа /, потому что иначе это будет пониматься как $HOME, который является «корневым» (/root) для большинства систем, и скорее всего не тот путь, который вам необходим.

Приведем пример, позволяющий правильно производить работу с данной функцией:

$ident = pspell_new_personal ("/diet/seller.pws", "en", "", PSPELL_EAST|PSPELL_RUN_TOGETHER));

<< Предыдущий параграф Следующий параграф >>
Оглавление