发表回复 
 
主题评价:
  • 2 次(票) - 平均星级: 5
  • 1
  • 2
  • 3
  • 4
  • 5
英文数字组合字符串分词问题,已结贴。
2014年05月13日, 14:49 (这个帖子最后修改于: 2014年05月14日 10:04 by hpxl.)
英文数字组合字符串分词问题,已结贴。
华硕主板H61-PLUS,想分词结果中包含H61。
通过 [url=http://www.xunsearch.com/scws/demo/v48.php]http://www.xunsearch.com/scws/demo/v48.php[/url] 得到的结果为“华硕/主板/H/61/-/PLUS”。尝试过自定义词库,$prefix/data/项目名称/dict_user.txt 加入H61,但是不起作用,中文词汇是可以的。如果想分词结果中有H61,是不是只能自定义分词了?像这种商品的型号中很多类似的,如华硕主板H87-PLUS,H61、H87分别代表不同的主板芯片组。

Hello world!
查找这个用户的全部帖子
引用并回复
2014年05月14日, 08:55
RE: 英文数字组合字符串分词问题
我也有同样的问题,自己字义的英文字典,但无法使用。
查找这个用户的全部帖子
引用并回复
2014年05月14日, 10:03 (这个帖子最后修改于: 2014年05月14日 10:08 by hpxl.)
RE: 英文数字组合字符串分词问题
sdk/php/app/demo.ini配置
PHP 代码:
[id]
type id

[productsName]
type title
tokenizer 
scwsSplit 
自定义字母、数字分词类
sdk/php/lib/XSTokenizerScwsSplit.php
PHP 代码:
<?php
/**
 * 包含字母、数字组合字符串分词
 */
class XSTokenizerScwsSplit extends XSTokenizerScws
{
    public function 
getTokens($valueXSDocument $doc null)
    {
        
// 包含scws分词结果
        
$tokens parent::getTokens($value$doc);
        
          
// 匹配多个字母、数字组合字符串
        
$preg '/([a-zA-Z0-9]+)/';
        if (
preg_match_all($preg$value$matches)) {
            
$words $matches[1];

            foreach (
$words as $word) {
                
$tokens array_merge($tokens$this->_splitWords($word));
            }
            
$tokens array_flip(array_flip($tokens));
        }

        return 
$tokens;
    }

    
/**
     * 字母、数字字符串分词
     *
     * 例如:maximus,分割成如下
     * ma max maxi maxim maximu maximus
     * ax axi axim aximu aximus
     *
     * @param string $word 待分割的字符串
     * @return array $words 分割成多个词的数组
     */
    
private function _splitWords($word
    {
        
$words = array();
        
$word_len strlen($word);

        
$new_sub_pos 0;
        while (
$new_sub_pos $word_len) {
            
$new_word substr($word$new_sub_pos);
            
$new_word_len strlen($new_word);

            
$cut_pos 1;
            while (
$cut_pos $new_word_len) {
                
$str '';
                for (
$start 0$start <= $cut_pos$start++) {
                    
$str .= $new_word[$start];
                }
                
$words[] = $str;
                
$cut_pos++;
            }

            
$new_sub_pos++;
        }
        
        return 
$words;
    }


只要分词结果中包含某个词,就都可以搜索到了。

Hello world!
查找这个用户的全部帖子
引用并回复
2014年05月14日, 11:21
RE: 英文数字组合字符串分词问题
[quote='hpxl' pid='7811' dateline='1400033006']
sdk/php/app/demo.ini配置
[id]
type = id

[/quote]

是scws-1.2.2 的如何让它支持自已定义的英文词库?

像http://bbs.xunsearch.com/showthread.php?tid=3088 这样修改代码吗?
查找这个用户的全部帖子
引用并回复
2015年08月24日, 14:06
RE: 英文数字组合字符串分词问题,已结贴。
自定义分词器使用时,从数据库建立索引时会发生fwrite(): send of 49 bytes failed with errno=32 Broken pipe错误,这个是怎么控制的?需要怎么修正?
查找这个用户的全部帖子
引用并回复
2015年10月23日, 11:37
RE: 英文数字组合字符串分词问题,已结贴。
没有收藏主题的功能
查找这个用户的全部帖子
引用并回复
发表回复 


论坛跳转:


正在浏览该主题的用户: 1 个游客