Cómo habilitar y configurar el módulo SCWS para PHP en ServBay
ServBay es un potente entorno local de desarrollo web diseñado especialmente para macOS, que integra varios runtimes de lenguajes como PHP, Node.js, Python, Go y Java, así como bases de datos como MySQL, PostgreSQL, MongoDB y Redis, y es compatible con servidores web como Caddy y Nginx. Para los desarrolladores que necesitan procesar texto en chino dentro de aplicaciones PHP, ServBay incorpora de manera nativa el eficiente módulo de segmentación de palabras chinas SCWS (Simple Chinese Word Segmentation), cuya activación es realmente sencilla.
En este artículo encontrarás una guía detallada sobre cómo habilitar la extensión SCWS para PHP en ServBay, configurar los archivos de diccionario, y ejemplos de código para aprender a utilizarla en tus proyectos.
Resumen del módulo SCWS
SCWS es un motor de segmentación de palabras en chino de código abierto, conocido por su alto rendimiento y precisión. Utiliza una combinación de métodos basados en diccionarios y modelos estadísticos, permitiendo segmentar texto chino de manera rápida y precisa. Es ideal para construir motores de búsqueda en chino, minería de texto, análisis de contenidos, extracción de palabras clave y etiquetado de categorías gramaticales.
Características principales
- Alto rendimiento: SCWS utiliza algoritmos de segmentación optimizados capaces de manejar grandes volúmenes de texto en chino de manera eficiente.
- Alta precisión: Gracias a la combinación de diccionario y modelos estadísticos, SCWS ofrece gran exactitud en las tareas de segmentación.
- Funciones avanzadas: Además de la segmentación básica, soporta la extracción de palabras clave, etiquetado gramatical y más funciones avanzadas.
- Fácil integración: Dispone de una API sencilla para que los desarrolladores lo integren fácilmente en sus aplicaciones PHP.
- Código abierto y gratuito: SCWS es software libre, por lo que puede usarse y modificarse sin coste.
Versión de SCWS incluida en ServBay
ServBay soporta múltiples versiones de PHP y trae preinstalado el módulo SCWS correspondiente para cada una. Hasta la fecha, ServBay integra la extensión SCWS 1.2.3 en todas las versiones desde PHP 5.6 hasta PHP 8.4.
Cómo habilitar el módulo SCWS
Por defecto, el módulo SCWS viene deshabilitado en ServBay. Hay dos formas principales de habilitarlo: desde la interfaz gráfica de ServBay o modificando el archivo de configuración manualmente.
Recomendado: habilitación desde la interfaz gráfica de ServBay
Esta es la manera más sencilla y rápida:
- Abre la ventana principal de ServBay.
- En la barra de navegación a la izquierda, haz clic en Language (Idiomas) y luego selecciona PHP.
- Busca en la lista de versiones de PHP la que deseas configurar con SCWS (por ejemplo,
PHP 8.4
). - Haz clic en el botón Extension (Extensiones) junto a la versión de PHP deseada.
- En la lista de extensiones que aparece, busca el módulo
SCWS
. - Activa el interruptor a la izquierda de
SCWS
(normalmente se pondrá verde al estar habilitado). - Haz clic en Guardar (Save) en la parte inferior de la ventana.
- ServBay te solicitará reiniciar el paquete PHP para aplicar los cambios. Haz clic en Reiniciar (Restart).
Después de estos pasos, el módulo SCWS estará habilitado para la versión de PHP seleccionada.
Habilitación manual mediante archivo de configuración (para usuarios avanzados o resolución de problemas)
Para mayor control o si necesitas solucionar problemas, puedes modificar directamente el archivo de configuración de PHP:
Localiza el archivo de configuración: Primero, encuentra el directorio
conf.d
correspondiente a la versión de PHP que utilizas. La configuración de SCWS estará en el archivoscws.ini
, generalmente en la ruta:/Applications/ServBay/etc/php/X.Y/conf.d/scws.ini
1Sustituye
X.Y
por la versión concreta de PHP, por ejemplo8.4
.Edita el archivo
scws.ini
: Abre el archivoscws.ini
con tu editor de texto favorito. Busca las siguientes líneas: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
5Elimina el punto y coma (
;
) al principio de la líneaextension = scws.so
para habilitarlo: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(Opcional) Puedes definir aquí el conjunto de caracteres y la ruta del diccionario. Se recomienda configurarlo desde el propio código PHP para mayor flexibilidad. Si decides hacerlo aquí, descomenta y adapta las líneas necesarias. Por ejemplo, si tu diccionario está en 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
5Guarda y cierra el archivo
scws.ini
.Reinicia el paquete PHP: Abre la interfaz principal de ServBay, ve a Packages (Paquetes), localiza la versión de PHP que has modificado (ejemplo: PHP 8.4) y haz clic en el botón de reinicio (normalmente con el icono de una flecha circular).
Verificar si el módulo SCWS ha sido cargado correctamente
Después de habilitar el módulo, es importante comprobar si está activo. La forma más común es revisar la salida de phpinfo()
de PHP:
- En el directorio raíz recomendado por ServBay,
/Applications/ServBay/www
, crea una subcarpeta nueva para pruebas, por ejemplo,scws-test
. - Dentro de
/Applications/ServBay/www/scws-test
, crea un archivo llamadophpinfo.php
. - Pega el siguiente código PHP dentro de
phpinfo.php
:php<?php phpinfo(); ?>
1
2
3 - Asegúrate de que tu servidor web ServBay (por ejemplo, Caddy o Nginx) está configurado y en ejecución, y que el directorio
/Applications/ServBay/www
es accesible. Por defecto, ServBay asocia el dominioservbay.demo
a esta carpeta. - Accede desde tu navegador a
https://servbay.demo/scws-test/phpinfo.php
. - En la página de información de PHP, busca la sección llamada "SCWS". Si ves opciones y datos relacionados con SCWS (como la versión y las opciones de configuración), significa que el módulo se ha cargado correctamente.
(Nota: la ruta de la imagen es solo de ejemplo, consulta la documentación oficial de ServBay para imágenes actuales)
Crear y configurar un diccionario SCWS
SCWS es un motor de segmentación basado en diccionarios, por lo que su efectividad depende en gran medida del diccionario que utilice. ServBay incluye por defecto diccionarios y archivos de reglas para SCWS en el directorio /Applications/ServBay/etc/scws
. Sin embargo, puedes crear tus propios diccionarios personalizados.
Formato de archivos de diccionario SCWS
SCWS soporta diccionarios en texto plano y en formato binario xdb, recomendando este último por su mayor velocidad de carga y menor consumo de memoria.
El formato de diccionario en texto plano es el siguiente: cada línea indica una palabra, seguida opcionalmente de su frecuencia y tipo gramatical.
Palabra1 [Frecuencia1] [Tipo1]
Palabra2 [Frecuencia2] [Tipo2]
...
1
2
3
2
3
Por ejemplo:
inteligencia artificial 1000 n
procesamiento de lenguaje natural 800 n
ServBay 500 nz
1
2
3
2
3
Guarda tu conjunto de palabras personalizadas en un archivo de texto, por ejemplo mi_diccionario.txt
. Es recomendable codificarlo en UTF-8.
Generar un archivo xdb desde tu diccionario
ServBay incluye la herramienta scws-gen-dict
de SCWS para convertir diccionarios de texto en archivos xdb.
- Abre la Terminal de macOS.
- Usa el comando
cd
para moverte al directorio bin de ServBay, o especifica la ruta completa ascws-gen-dict
. Por ejemplo:bashSustituye/Applications/ServBay/bin/scws-gen-dict -i /ruta/a/tu/mi_diccionario.txt -o /Applications/ServBay/etc/scws/mi_diccionario.utf8.xdb -c utf8
1/ruta/a/tu/mi_diccionario.txt
por la ubicación real de tu archivo de texto. El parámetro-o
indica dónde se guardará el archivo xdb (recomendado en/Applications/ServBay/etc/scws
). El parámetro-c utf8
especifica la codificación.
Configurar SCWS para usar el diccionario
Cuando hayas creado el archivo xdb, puedes indicarle a SCWS que lo use desde tu código PHP:
php
<?php
$scws = scws_new();
$scws->set_charset('utf8'); // Establecer la codificación, debe coincidir con tu diccionario
// Establecer la ruta del diccionario principal (puede ser el predeterminado o tu xdb)
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// Para añadir diccionarios adicionales personalizados:
$scws->add_dict('/Applications/ServBay/etc/scws/mi_diccionario.utf8.xdb', SCWS_XDICT_TXT); // SCWS_XDICT_TXT indica que es personalizado
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini'); // Archivo de reglas para etiquetado gramatical, ya incluido en ServBay
// ... operaciones de segmentación ...
?>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
La función set_dict()
establece el diccionario principal, normalmente el diccionario grande oficial. Con add_dict()
agregas tu propio diccionario personalizado. SCWS_XDICT_TXT
es una constante que indica que se trata de un diccionario adicional.
Ejemplo de uso de SCWS
Una vez habilitado el módulo y configurado el diccionario, puedes realizar la segmentación en tu código PHP. Este es un ejemplo básico:
php
<?php
// Asegúrate de que la extensión SCWS esté cargada
if (!extension_loaded('scws')) {
die('SCWS extension is not loaded.');
}
// Inicializa el objeto SCWS
$scws = scws_new();
if (!$scws) {
die('Failed to initialize SCWS.');
}
// Establece el conjunto de caracteres (debe coincidir con el texto y el diccionario)
$scws->set_charset('utf8');
// Ruta del archivo de diccionario en ServBay
// set_dict() para el principal
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// add_dict() puede usarse para añadir otro diccionario personalizado
// $scws->add_dict('/Applications/ServBay/etc/scws/mi_diccionario.utf8.xdb', SCWS_XDICT_TXT);
// Ruta del archivo de reglas (ServBay incluye uno por defecto), para etiquetado gramatical
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini');
// Configuración de modos de segmentación (opcional, por defecto SCWS_XDICT_XPINYIN | SCWS_XDICT_DUALITY)
// SCWS_XDICT_XPINYIN: segmenta caracteres x (no chinos), como emails, urls, etc.
// SCWS_XDICT_DUALITY: segmentación compuesta (bigrama)
// $scws->set_ignore(true); // Ignorar signos de puntuación
// $scws->set_multi(SCWS_MULTI_WORD | SCWS_MULTI_ZHONGCI); // Ajustar nivel de segmentación compuesta
// Texto en chino a segmentar
$text = "ServBay 是一个强大的本地 Web 开发环境,支持 PHP、Node.js 和多种数据库。";
// Enviar texto a SCWS para su procesamiento
$scws->send_text($text);
// Obtener resultados
echo "Texto original: " . $text . "\n\n";
echo "Resultado de la segmentación:\n";
// Recorrer todos los resultados
while ($result = $scws->get_result()) {
foreach ($result as $word) {
// $word es un array asociativo con 'word', 'idf', 'attr' (tipo gramatical), etc.
echo "Palabra: " . $word['word'] . " (Tipo: " . $word['attr'] . ")\n";
}
}
// Liberar recursos de SCWS
$scws->close();
?>
1
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
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
Guarda este código como un archivo .php
(por ejemplo, scws_example.php
) en el directorio de tu web ServBay (p. ej., /Applications/ServBay/www/scws-test/
). Accede a https://servbay.demo/scws-test/scws_example.php
desde el navegador para ver los resultados.
Consideraciones importantes
- Asegúrate de que la versión de SCWS activada es compatible con la versión de PHP que estás usando. ServBay ya gestiona esto por defecto, pero si configuras manualmente, verifica la compatibilidad.
- La calidad de la segmentación depende mucho del diccionario. Para textos de sectores específicos, considera crear o usar un diccionario especializado.
- Verifica que la ruta de los archivos de configuración de SCWS (
scws.ini
), diccionarios (.xdb
) y reglas (.ini
) sea la correcta y que el proceso PHP tenga permisos de lectura sobre los mismos. - Tras modificar la configuración de PHP, recuerda reiniciar el paquete PHP correspondiente para aplicar los cambios.
Preguntas Frecuentes (FAQ)
P: Habilité SCWS desde la interfaz ServBay, pero no aparece en phpinfo()
?
R: Asegúrate de que hayas reiniciado el paquete PHP correcto. Puede haber varias versiones de PHP ejecutándose y debes reiniciar la que está asociada a tu sitio web. Si el problema continúa, intenta modificar manualmente el archivo scws.ini
y revisa cuidadosamente la ruta y errores de sintaxis.
P: ¿Cómo creo y utilizo un diccionario personalizado?
R: Revisa la sección “Crear y configurar un diccionario SCWS” en este documento, utiliza la herramienta scws-gen-dict
para convertir tu diccionario a formato xdb y luego cárgalo en tu código PHP con el método add_dict()
.
P: ¿Para qué sirve el archivo de reglas (rules.utf8.ini
) de SCWS?
R: El archivo de reglas sirve principalmente para el etiquetado gramatical y algunas reglas especiales de segmentación. ServBay ya incluye uno por defecto que normalmente no necesitas modificar.
Resumen
ServBay ofrece a los desarrolladores una manera conveniente de habilitar y gestionar el módulo de segmentación en chino SCWS para PHP. Ya sea utilizando su interfaz gráfica intuitiva o la configuración manual, puedes integrar SCWS en tu flujo de trabajo PHP fácilmente. Gracias a las herramientas y diccionarios preconfigurados por ServBay, empezar es rápido y simple, y puedes aprovechar el alto rendimiento y precisión de SCWS para procesar contenido en chino en tus aplicaciones web, como búsquedas o análisis de textos. Como parte fundamental del ecosistema de paquetes de ServBay, la integración de SCWS refuerza su propuesta como un completo y versátil entorno local de desarrollo.