PHP中使用SCWS中文分词

SCWS 简介

SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。
这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开,所以如何准确并快速分词一直是中文分词的攻关难点。

SCWS 采用纯 C 语言开发,不依赖任何外部库函数,可直接使用动态链接库嵌入应用程序,支持的中文编码包括 GBKUTF-8 等。此外还提供了 PHP 扩展模块,可在 PHP 中快速而方便地使用分词功能。

分词算法上并无太多创新成分,采用的是自己采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试准确率在 90% ~ 95% 之间,基本上能满足一些小型搜索引擎、关键字提取等场合运用。首次雏形版本发布于 2005 年底。

SCWS 由 hightman 开发,并以 BSD 许可协议开源发布 ,参见COPYING。

PHP 分词演示

  • GBK http://www.xunsearch.com/scws/demo/v4.php
  • UTF-8 http://www.xunsearch.com/scws/demo/v48.php
  • 繁体中文 http://www.xunsearch.com/scws/demo/v48.cht.php

安装

目前 scws 只提供源码包,和大多数 GNU 软件的编译安装步骤一样。下面我们以 Linux 系统为例,
要求装有 gcc 编译器。Windows 上则建议用 cygwin 或 mingw 环境编译。

  1. 取得 scws 源码并解压到当前目录

    wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.1.tar.bz2 | tar xjf -
    
  2. 进入源码目录配置和编译

    cd scws-1.2.1 ; ./configure ; make install
    

    注意:这是以默认方式安装到 /usr/local 目录。详细配置参数执行 ./configure --help 查看。

PHP 扩展

在 UNIX 类的系统上,请直接从源码方式编译安装 PHP 扩展;对于 windows 系统,请直接下载我们编译好的
php_scws.dll 即可。

假定您已经将 scws 安装到 $prefix 目录,还要求系统环境装有 autoconf automake 及 phpize 工具。

  1. 进入源码目录的 phpext/ 并执行 phpize (位于 php 安装目录下的 bin 目录里)

  2. 执行 configure 进行配置和基础检测,假定您的 php 安装在 $php_prefix 目录

    ./configure --with-scws=/usr/local --with-php-config=$php_prefix/bin/php-config
    
  3. 先编译然后以 root 身份安装

    make
    sudo make install
    
  4. 在 php.ini 中加入以下内容

    [scws]
    ; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,
    ; 再把 extension = scws.so 或 php_scws.dll 指定绝对路径。
    extension = scws.so
    scws.default.charset = gbk
    scws.default.fpath = $prefix/etc
    
  5. 命令行下执行 php -m 就能看到 scws 了,phpinfo() 也会包含关于 scws 的信息。

  6. windows 下的 php 扩展是采用 dll 库文件。我们已预编译若干个版本,采用 zip 压缩位于
    phpext/win32/php_scws-1.2.1-win32.zip,请直接解压后选择相应版本的 php_scws.dll
    将它复制到 PHP 的扩展目录中(通常是 extensions 或 ext 目录),然后参考上面的方式修改 php.ini

  7. 关于 PHP 扩展的示例用法及开发参考,请参见 phpext/README.md。

配套工具用法

  1. $prefix/bin/scws 这是分词的命令行工具,执行 scws -h 可以看到详细帮助说明。

    Usage: scws [options] [[-i] input] [[-o] output]
    
    • -i string|file 要切分的字符串或文件,如不指定则程序自动读取标准输入,每输入一行执行一次分词
    • -o file 切分结果输出保存的文件路径,若不指定直接输出到屏幕
    • -c charset 指定分词的字符集,默认是 gbk,可选 utf8
    • -r file 指定规则集文件(规则集用于数词、数字、专有名字、人名的识别)
    • -d file[:file2[:…]] 指定词典文件路径(XDB格式,请在 -c 之后使用)
      自 1.1.0 起,支持多词典同时载入,也支持纯文本词典(必须是.txt结尾),多词典路径之间用冒号(:)隔开,
      排在越后面的词典优先级越高。文本词典的数据格式参见 scws-gen-dict 所用的格式,但更宽松一些,允许用不定量的空格分开,只有<词>是必备项目,
      其它数据可有可无,当词性标注为“!”(叹号)时表示该词作废,即使在较低优先级的词库中存在该词也将作废。
      
    • -M level 复合分词的级别:1~15,按位异或的 1|2|4|8 依次表示 短词|二元|主要字|全部字,缺省不复合分词。
    • -I 输出结果忽略跳过所有的标点符号
    • -A 显示词性
    • -E 将 xdb 词典读入内存 xtree 结构 (如果切分的文件很大才需要)
    • -N 不显示切分时间和提示
    • -D debug 模式 (很少用,需要编译时打开 --enable-debug)
    • -U 将闲散单字自动调用二分法结合
    • -t num 取得前 num 个高频词
    • -a [~]attr1[,attr2[,…]] 只显示某些词性的词,加~表示过滤该词性的词,多个词性之间用逗号分隔
    • -v 查看版本
  2. $prefix/bin/scws-gen-dict 词典转换工具

    Usage: scws-gen-dict [options] [-i] dict.txt [-o] dict.xdb
    
    • -c charset 指定字符集,默认为 gbk,可选 utf8
    • -i file 文本文件(txt),默认为 dict.txt
    • -o file 输出 xdb 文件的路径,默认为 dict.xdb
    • -p num 指定 XDB 结构 HASH 质数(通常不需要)
    • -U 反向解压,将输入的 xdb 文件转换为 txt 格式输出 (TODO)

    文本词典格式为每行一个词,各行由 4 个字段组成,字段之间用若干个空格或制表符(\t)分隔。
    含义(其中只有 <词> 是必须提供的),# 开头的行视为注释忽略不计:

    #<词>  <词频(TF)>  <词重(IDF)>  <词性(北大标注)>
    新词条 12.0        2.2          n
    

libscws API

这是整合 scws 到其它应和程序的接口说明,详见 API。

rules.ini 规则集

(暂缺)

关于 XDB 词典

我们的词典使用的是自行开发的专用 XDB 格式,免费提供的词典是通用的互联网信息词汇集,
收录了大约 28 万个词。

如果您需要定制词典以作特殊用途,请与我们联系,可能会视情况进行收费。

性能指标

在 FreeBSD 6.2 系统,单核单 CPU 至强 3.0G 的服务器上,测试长度为 80,535 的文本。
用附带的命令行工具耗时将约 0.17 秒,若改用 php 扩展方式调用,则耗时约为 0.65 秒。

分词精度 95.60%,召回率 90.51% (F-1: 0.93)

PHP中使用SCWS中文分词详解相关推荐

  1. 简单有效的多标准中文分词详解

    简单有效的多标准中文分词详解 本文介绍一种简洁优雅的多标准中文分词方案,可联合多个不同标准的语料库训练单个模型,同时输出多标准的分词结果.通过不同语料库之间的迁移学习提升模型的性能,在10个语料库上的 ...

  2. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  3. ElasticSearch中的中文分词详解

    1.什么是分词: 分词就是指将一个文本转化成一系列单词的过程,也叫文本分析,在Elasticsearch中称之为Analysis. 举例:我是好学生 --> 我/是/好学生 2.分词API 2. ...

  4. Linux环境下使用NLPIR(ICTCLAS)中文分词详解

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 欢迎交流,禁止将本人博客直接复制下来,上传到百度文库等平台. NLPIR介绍 NLPIR是中科院出的一款汉语分词 ...

  5. java做jsp问题_java/jsp中 中文问题详解

    java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00   作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...

  6. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  7. scws sphinx mysql_Sphinx系列文章\SCWS中文分词

    软件清单 SCWS: 1.2.2,下载 XDB字典: 下载 安装 For Mac / Linux 请注意,我的系统是Mac OS X 10.11.2 假设你已经下载好了上面的软件. 第一步:编译和安装 ...

  8. php scws 获取分词结果,php实现scws中文分词搜索的方法

    本文实例讲述了php实现scws中文分词搜索的方法.分享给大家供大家参考,具体如下: 1.4个文件(本站下载地址.)解压后,放到一个地方 eg:E:/wamp/scws 2.php.ini 中配置 e ...

  9. elasticsearch-.yml(中文配置详解)

    此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...

最新文章

  1. 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
  2. opencv 九点标定_精度与HALCON结果仅差(±0.2mm)
  3. php把400个数组建二维,请教怎么将多维数组转换为二维数组
  4. Feign-自定义配置
  5. Dubbo中负载均衡的应用
  6. Django从理论到实战(part32)--外键删除
  7. P2782 友好城市
  8. JavaScript实现数据分页
  9. Linux笔记-inode基本概念
  10. SpringBoot的数据库操作
  11. 优化程序性能(CSAPP)
  12. 虚拟机常见的几种上网方式
  13. 普通计算机安装服务器系统安装教程,Windows Server操作系统详细安装教程
  14. win10开机黑屏不显示桌面,怎么办
  15. 密歇根大学新进展:AI+可穿戴设备,20秒检测儿童内化障碍
  16. 微信屏蔽网站域名,提示“已停止访问该网页”该怎么办?
  17. IDEA设置多行标签页
  18. Python模拟锟斤拷等各类乱码
  19. win10经常无法复制粘贴
  20. FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式

热门文章

  1. Unity 2019 打包黑屏、粉屏
  2. 2019社交电商十大平台集锦
  3. 粉丝投稿 | [CPU+目标检测] OpenVINO 实现 Robomaster 自瞄
  4. mingw编译FFmpeg32位和64位dll
  5. android开发歌词滑动效果_android实现歌词自动滚动效果
  6. 冒泡、快速、选择、插入排序以及时间复杂度、空间复杂度的解析
  7. AntV X6制作画板工具(图形,线段,图片上传)
  8. 盯盘小帮手/智能盯盘助手/量化投资交易/量化炒股
  9. RFID仓储管理系统解决方案
  10. Android Studio 1.5.1最新版下载地址