...8384 [pid] type = id [subject] index = both tokenizer =xlen(2) 二元分词只能对英文生效,对中文不生效 同时急于需要一元分词,主要是做黑词筛选用,因为有的时候就要搜索某些一元词,比如 武器 near/2 售,但是不能实现
...个 Tokenizer 类,然后根据自己需要生成 tokens 就可以了。 二元分词并不是直接分成N长的若干段,而是 ABCD => AB + BC + CD 你的作法会把 ABCD => AB+CD 这样搜索 BC 就搜索不到了。。。
以前的二元分词只支持英文,最后找到问题 public function getTokens($value, XSDocument $doc = null) { $terms = array(); for ($i = 0; $i < mb_strlen($value,"utf-8"); $i += $this->arg) { $terms[] = mb_substr($value, $i, $this->arg,"utf-8"); } return $terms; }...
需要 NEAR 位置信息的话,目前只能用内置的 scws 分词 scws 目前不能自定义词库,你必须把词库转换成 dict.utf8.xdb 一个统一的词库放进 $prefix/etc/ 才可以
如果你了解scws就会知道它其实对散字也是自动二元处理。 你所谓的一元是一个字一个词?你也可以拓展 XSTokenizer 自己实现分词
呵呵,多谢hightman![hr] 再针对第三个问题问一下: 如果实现二元分词但无但无单字分词的话以下组合中,是不是要去掉SCWS_MULTI_SHORT? SCWS_MULTI_SHORT | SCWS_MULTI_DUALITY | SCWS_MULTI_ZMAIN | SCWS_MULTI_ZALL
是你自己搞错了! “是一”本身不是词,只是因为二元结合法所以scws自动将其合成为一个词。 复合分词是对原本是词的长词情况处理的,比如”中国“可以切成”中“+”国“+”中国“ 你的问题必须是 [code] $tk = $tokenizer->s...