# 自定义分词插件

# 命名空间要求

自定义分词类文件的命名空间:

namespace WindSearch\Plugin;

# 方法要求

自定义分词类要包含三个方法:

public function segmentAll($str,$is_idf=false) // 全分词
public function standard($str,$is_idf=false) // 精确分词
public function segmentNgram($str, $len); // ngram分词

segmentAll是全分词,standard是精确分词,segmentNgram是ngram分词,均返回分词后的terms数组;

//分词后,返回的数据结构
['term1','term2','...']

$is_idf参数决定是否同时返回每个term的idf值(idf值用于bm25分数计算),如果$is_idf=true,则返回的数据结构为:

[
    'terms' => ['term1','term2','...'],
    'idf' => [
        'term1' => 'idf1',
        'term2' => 'idf2'
        // ...
    ]
];

segmentNgram的$len参数表示窗口长度,例如2个字符,3个字符...

# 文件结构

自定义的分词插件要包含在一个文件夹内(不能是单文件的形式),然后将文件夹放在 /src/plugin/ 下面,注意:类名、类文件名、文件夹名,都要完全一样。

// 示例
|--plugin //插件文件夹
|---MyAnalyzer //自定义分词插件文件夹
|----MyAnalyzer.php // 类文件
|------namespace WindSearch\Plugin; // 类文件的命名空间
|----- class MyAnalyzer{... // 类文件的定义
|

# 加载自定义分词插件

然后调用下面的方法,加载自定义分词插件:

// 实例化引擎
$Wind = new \WindSearch\Index\Wind($indexName);
// 加载自定义分词
// 例如你的分词插件类名为 myAnalyzer
$Wind->loadCustomAnalyzer('myAnalyzer');