Как включить и настроить SCWS PHP-модуль в ServBay
ServBay — это мощная локальная среда для веб-разработки, созданная специально для macOS. Она интегрирует среды для PHP, Node.js, Python, Go, Java и другие языки, а также базы данных MySQL, PostgreSQL, MongoDB, Redis и поддерживает различные веб-серверы, включая Caddy и Nginx. Для разработчиков, которым нужно обрабатывать китайские тексты в PHP-приложениях, в ServBay предустановлен высокоэффективный модуль SCWS (Simple Chinese Word Segmentation) для сегментации китайского языка, процесс активации которого крайне прост.
В этом руководстве подробно описано, как активировать SCWS-расширение PHP в ServBay, настроить словарь SCWS и использовать его на практике с примерами кода.
Обзор модуля SCWS
SCWS — это популярный проект с открытым исходным кодом для сегментации китайских текстов, отличающийся высокой производительностью и точностью. Он комбинирует подходы на основе словаря и статистических моделей, быстро и эффективно разбивая китайские тексты на слова. Это делает его отличным выбором для реализации поиска на китайском, анализа текста, извлечения ключевых слов и т.д.
Ключевые преимущества
- Высокая производительность: SCWS использует оптимизированные алгоритмы, позволяющие быстро обрабатывать большие корпуса китайских текстов.
- Точность: Сочетание словарей и статистики обеспечивает высокую точность разбиения.
- Широкий функционал: Поддерживается не только базовая сегментация, но и извлечение ключевых слов, определение частей речи и прочие расширенные возможности.
- Легкая интеграция: Удобный API для быстрой интеграции в PHP-приложения.
- Открытый исходный код и бесплатность: Распространяется свободно с возможностью адаптации под задачи.
Предустановленная версия SCWS в ServBay
ServBay поддерживает несколько версий PHP и для каждой предварительно устанавливает соответствующий модуль SCWS. По состоянию на момент написания документа для PHP 5.6 до PHP 8.4 поставляется расширение SCWS 1.2.3.
Как включить SCWS-модуль
По умолчанию модуль SCWS отключён в ServBay. Для его активации есть два подхода: через графический интерфейс или путём ручного редактирования конфигурации.
Рекомендуемый способ: включение через интерфейс ServBay
Это самый быстрый и удобный вариант:
- Откройте главное окно ServBay.
- В левом меню выберите Языки (Languages), затем PHP.
- В списке версий PHP справа найдите ту, для которой хотите активировать SCWS (например,
PHP 8.4
). - Нажмите кнопку Расширения (Extensions) справа от соответствующей версии PHP.
- В появившемся списке найдите модуль
SCWS
. - Переведите переключатель слева от SCWS во включённое положение (обычно индикатор становится зелёным).
- Нажмите Сохранить (Save) внизу окна.
- ServBay запросит перезапуск пакета PHP для применения изменений. Подтвердите, нажав Перезапустить (Restart).
После этих действий модуль SCWS будет успешно активирован для выбранной версии PHP.
Ручное редактирование конфигураций (для продвинутых пользователей)
Для более гибкой настройки или устранения неполадок можно редактировать файлы конфигурации вручную:
Найдите файл конфигурации: Сначала отыщите каталог
conf.d
для вашей версии PHP. Файл с настройками SCWS называетсяscws.ini
и обычно располагается по следующему пути:/Applications/ServBay/etc/php/X.Y/conf.d/scws.ini
1Замените
X.Y
на ваш актуальный номер версии PHP, например8.4
.Отредактируйте
scws.ini
: Откройте файл в текстовом редакторе и найдите строки:ini[scws] ; Uncomment the following line to enable scws ;extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5Снимите комментарий с параметра
extension = scws.so
, чтобы получилось:ini[scws] ; Uncomment the following line to enable scws extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5(Необязательно) Здесь же можно задать отображаемый по умолчанию набор символов и путь к словарю, но рекомендуется задавать эти опции динамически из PHP-кода для большей гибкости. Если решите это сделать, раскомментируйте строки и измените значения. Например, для словаря в кодировке UTF-8:
ini[scws] ; Uncomment the following line to enable scws extension = scws.so scws.default.charset = utf8 scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5Сохраните и закройте
scws.ini
.Перезапустите PHP-пакет: В главном окне ServBay перейдите в Пакеты (Packages), найдите отредактированную версию PHP (например, PHP 8.4) и нажмите кнопку перезапуска (обычно значок в виде круговой стрелки).
Как проверить загрузку SCWS-модуля
После активации убедитесь, что модуль действительно был успешно подгружен. Проще всего это сделать, просмотрев вывод функции PHP phpinfo()
:
- В базовом каталоге сайтов ServBay —
/Applications/ServBay/www
— создайте подпапку для теста, напримерscws-test
. - В этой папке (
/Applications/ServBay/www/scws-test
) создайте файлphpinfo.php
. - Вставьте в него следующий PHP-код:php
<?php phpinfo(); ?>
1
2
3 - Проверьте, что ваш веб-сервер (например, Caddy или Nginx), настроен и работает так, чтобы файлы в
/Applications/ServBay/www
были доступны. По умолчанию ServBay настраивает доменservbay.demo
на эту папку. - В браузере перейдите по адресу
https://servbay.demo/scws-test/phpinfo.php
. - На открывшейся странице прокрутите и найдите секцию с названием "SCWS". Если отображается информация о модуле (версия, настройки), значит всё работает корректно.
(Примечание: путь к картинке примерный, используйте актуальные изображения из документации ServBay)
Создание и настройка словаря SCWS
Поскольку SCWS работает на основе словаря, качество сегментации напрямую зависит от используемого файла. По умолчанию в ServBay уже есть стандартный словарь и правила (обычно в /Applications/ServBay/etc/scws
). Вы также можете создать и свой кастомный словарь.
Формат файла словаря SCWS
SCWS поддерживает словари в виде простого текста, а также бинарном формате xdb (рекомендуется, так как быстрее и экономнее по памяти).
Формат текстового словаря — каждый термин на новой строке, после слова опционально указывается частота (число, чем выше, тем слово употребительнее) и часть речи:
слово1 [частота1] [часть_речи1]
слово2 [частота2] [часть_речи2]
...
2
3
Пример:
искусственный интеллект 1000 n
обработка естественного языка 800 n
ServBay 500 nz
2
3
Сохраните свои термины в текстовый файл, например my_dict.txt
. Убедитесь, что кодировка файла соответствует ожидаемой (рекомендуется UTF-8).
Создание xdb-словаря
В комплекте с ServBay идёт консольная утилита scws-gen-dict
, которая преобразует текстовые словари в быстрый бинарный формат xdb.
- Откройте Терминал macOS.
- Перейдите в каталог с исполняемыми файлами ServBay или укажите путь к утилите напрямую, например:bashЗамените
/Applications/ServBay/bin/scws-gen-dict -i /path/to/your/my_dict.txt -o /Applications/ServBay/etc/scws/my_dict.utf8.xdb -c utf8
1/path/to/your/my_dict.txt
на свой путь к текстовому словарю. Параметр-o
определяет путь и имя выходного xdb-файла (лучше сохранять в/Applications/ServBay/etc/scws
). Параметр-c utf8
указывает кодировку исходного файла.
Использование словаря SCWS в PHP
Когда .xdb-файл готов, укажите его, вызывая SCWS из PHP:
<?php
$scws = scws_new();
$scws->set_charset('utf8'); // Установите ту же кодировку, что и в словаре
// Основной словарь: используйте стандартный или свой xdb-файл
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// Можно добавить свой дополнительный словарь
$scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT); // SCWS_XDICT_TXT — добавить пользовательский словарь
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini'); // Подключение файла правил, он уже есть в ServBay
// ... дальнейшая сегментация текста ...
?>
2
3
4
5
6
7
8
9
10
11
Метод set_dict()
задаёт основной словарь (обычно большой официальный). add_dict()
позволяет дополнительно подключить свой пользовательский. Константа SCWS_XDICT_TXT
указывает тип добавляемого словаря.
Пример использования SCWS
После включения расширения и настройки словаря можно использовать его из PHP-кода для сегментации китайских текстов. Пример основного сценария:
<?php
// Проверьте, что расширение SCWS загружено
if (!extension_loaded('scws')) {
die('SCWS extension is not loaded.');
}
// Инициализация объекта SCWS
$scws = scws_new();
if (!$scws) {
die('Failed to initialize SCWS.');
}
// Установите используемую кодировку (должна совпадать с кодировкой текста и словаря)
$scws->set_charset('utf8');
// Укажите путь к основному словарю (стандартный из ServBay)
// set_dict() — основной словарь
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// add_dict() — если нужно добавить пользовательский словарь
// $scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT);
// Укажите путь к файлу правил (уже есть в ServBay), нужен для части речи и т.д.
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini');
// Режим сегментации (опционально, по умолчанию используется SCWS_XDICT_XPINYIN | SCWS_XDICT_DUALITY)
// SCWS_XDICT_XPINYIN: делить символы x (не китайские), например, email, url и т.п.
// SCWS_XDICT_DUALITY: смешанный режим (двоичная сегментация)
// $scws->set_ignore(true); // Игнорировать ли знаки препинания
// $scws->set_multi(SCWS_MULTI_WORD | SCWS_MULTI_ZHONGCI); // Уровень смешанной сегментации
// Текст на китайском для разбора
$text = "ServBay 是一个强大的本地 Web 开发环境,支持 PHP、Node.js 和多种数据库。";
// Отправьте текст на обработку
$scws->send_text($text);
// Получите результаты сегментации
echo "Исходный текст: " . $text . "\n\n";
echo "Результат сегментации:\n";
// Пройдитесь по каждому найденному сегменту
while ($result = $scws->get_result()) {
foreach ($result as $word) {
// $word — ассоциативный массив: 'word', 'idf', 'attr' (часть речи) и пр.
echo "Слово: " . $word['word'] . " (часть речи: " . $word['attr'] . ")\n";
}
}
// Освободите ресурсы SCWS
$scws->close();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Сохраните этот код в файл .php
(например, scws_example.php
) и поместите в папку сайта ServBay (например, /Applications/ServBay/www/scws-test/
). Откройте через браузер адрес https://servbay.demo/scws-test/scws_example.php
, чтобы увидеть результат.
Важные нюансы
- Убедитесь, что версия модуля SCWS совместима с используемой версией PHP. В ServBay это учтено по умолчанию, но при ручной настройке проверьте совместимость.
- Качество сегментации SCWS тесно связано с выбранным словарём. Для отраслевых текстов рекомендуется создавать или подбирать специализированные словари.
- Проверьте корректность путей к файлам конфигурации (
scws.ini
), словарям (.xdb
), правилам (.ini
) и наличие у процессов PHP доступа на чтение. - После изменений в конфигурации PHP всегда перезапускайте соответствующий пакет, чтобы новые настройки применились.
Часто задаваемые вопросы (FAQ)
В: Я включил SCWS через интерфейс ServBay, но его нет в phpinfo()
?
О: Убедитесь, что вы перезапустили именно тот пакет PHP, который используется вашим сайтом. Иногда работают сразу несколько версий PHP — перезапустите нужную. Если ничего не помогает, попробуйте отредактировать scws.ini
вручную и проверьте синтаксис и пути.
В: Как создать и подключить свой словарь?
О: Следуйте разделу «Создание и настройка словаря SCWS» этого документа: сначала сконвертируйте текстовый словарь в .xdb с помощью scws-gen-dict
, затем подключите его через add_dict()
в PHP-коде.
В: Для чего нужен файл правил SCWS (rules.utf8.ini
)?
О: Файл с правилами отвечает за определение частей речи и специальные правила сегментации. В ServBay уже есть предустановленный файл, обычно его не требуется менять.
Заключение
ServBay предоставляет удобные инструменты для активации и управления модулем SCWS для сегментации китайского языка в PHP. Независимо от того, выбираете ли вы интуитивный графический интерфейс или ручную настройку — интеграция SCWS в ваш рабочий процесс займет минимум времени. Благодаря предустановленным инструментам и стандартному словарю SCWS вы сможете быстро приступить к обработке китайских текстов, реализовать поиск, аналитику и другие возможности в своих веб-приложениях. SCWS отлично дополняет экосистему пакетов ServBay и делает её одной из самых функциональных сред локальной разработки.