ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 权威指南 1. [编写自定义分词器](#) 1. [使用自定义分词器](#) # 自定义分词器 `Xunsearch` 默认内置了功能强大的 [SCWS](http://www.xunsearch.com/scws/) 分词系统,也附加提供了一些简单常见的分词规则,但考虑到用户的个性需求,特意提供了自定义分词器的功能。 > **Note:** 自定义分词器存在一个缺陷,它不支持存储位置信息,也就是不能按短语检索、以及 `NEAR` 之类的 语法检索。相当于该字段配置中的 `phrase` 值恒为 `no`,通常把自定义分词用于一些带有一定规则的简要 字段,而不是更多的考虑语义关系。 ### 1. 编写自定义分词器[?]() 自定义分词器必须实现 [XSTokenizer](#) 接口。假定您要编写一个名为 `xyz` 的分词器,则您要编写的代码文件为 `XSTokenizerXyz.class.php`,请将文件统一放入 `$prefix/sdk/php/lib` 目录。 通常来讲,您只需要实现 [XSTokenizer::getTokens](#) 即可。该函数接受 2个参数,分别为要分词的值以及当前的文档对象(可选);返回值为分好的词汇组成的数组。下面以按 `-` 分割字段为例: ~~~ class XSTokenizerXyz implements XSTokenizer { public function getTokens($value, XSDocument $doc = null) { $ret = array(); if (!empty($value)) $ret = explode('-', $value); return $ret; } } ~~~ > **Note:**[XSTokenizer::getTokens](#) 的参数 `$value` 的编码始终为 UTF-8 。 如果您需要编写带有参数支持的分词器,比如让用户传入按什么字符分割,请参照下面写法编写构造函数: ~~~ class XSTokenizerXyz implements XSTokenizer { private $delim = '-'; // 默认按 - 分割 public function __construct($arg = null) { if ($arg !== null && $arg !== '') $this->delim = $arg; } public function getTokens($value, XSDocument $doc) { $ret = array(); if (!empty($value)) $ret = explode($this->delim, $value); return $ret; } } ~~~ ### 2. 使用自定义分词器[?]() 编写完了自定义分词器的代码后,您就可以在项目配置文件中使用它了,在需要用这个分词器的字段中指定 `tokenizer` 选项的值,例子中省略了字段的其它选项,实际编写时可能还包括其它选项。 而在[搜索语句](#)中,如果指明了字段搜索前缀 `field:XXX` 那么搜索引擎内部也会对这个搜索语句执行自定义分词。 ~~~ [some_field] ; 不带参数的用法 tokenizer = xyz ; 带参数的用法,表示把 _ 作为参数传递给构造函数 tokenizer = xyz(_) ~~~ $Id$ [« 项目配置详解](#) [编写第一个配置文件 »](#) Copyright © 2008-2011 by [杭州云圣网络科技有限公司](http://www.xunsearch.com) All Rights Reserved. ![](https://box.kancloud.cn/2015-09-10_55f11d02b2acd.gif) ![](https://box.kancloud.cn/2015-09-10_55f11d02ba7f1.gif) ![](https://box.kancloud.cn/2015-09-10_55f11d02c0ea7.gif)