Tsearch2分词函数

这是网上已有的分词函数,先转过来了解了解。

基础的分字程序

下面是 Carrie (感谢 Carrie!:D )写的一个基础的分字程序,在很大程度上可以满足相当多应用的需要:

--
-- a basic Chinese word segment function
-- author: Carrie
--

create or replace function CarrieCharSeg( input text ) returns text as $$
declare
        retVal text;
        i int;
        j int;
begin
        i:= char_length(input);
        j:= 0;
        retVal:= '';
        LOOP
                retVal:= retVal || substring(input from j for 1) || ' ';

                j:= j+1;

        EXIT WHEN j=i+1;
        END LOOP;
        return retVal;
end;
$$language plpgsql;

下面是一个重载的分词程序,区分了单词和汉字,对单词单独进行分词:

--
-- a basic Chinese word segment function
-- author: Carrie
--
create or replace function CarrieCharSeg(input text,int) returns text as $Q$
declare
        query text:= '';
        retVal text:= '';
        thisVal text:= '';
        lastVal text:= '';
        i integer:= 0;
        j integer:= 0;

begin
        query:= lower(regexp_replace(input,'[[:punct:]]',' ','g'));
        --raise notice '123: %',query;
        i:= char_length(query);
        LOOP
                thisVal:= substring(query from j for 1);
                IF ((thisVal <> ' ')AND(thisVal <> ' ')) THEN
                        IF (((lastVal >= 'a') AND (lastVal <= 'z'))
                            OR((lastVal >= 'A')AND(lastVal <= 'Z'))) AND
                            (((thisVal >= 'a') AND (thisVal <= 'z')) OR
                            ((thisVal >= 'A')AND(thisVal <= 'Z'))) THEN
                                        retVal:= retVal || thisVal;
                        ELSE
                                retVal:= retVal || ' ' || thisVal;
                        END IF;
                END IF;
                lastVal:= thisVal;
                j:= j+1;
                EXIT WHEN j > i;
        END LOOP;
        RETURN trim(retVal);
end
$Q$language plpgsql;
使用感受:
最近用过了这两个自定义的分词函数,简单的说就是将汉字分割开来,例如:
“我来自地球",通过上面的分词函数后就变成“我 来 自 地 球”,会在每个字之间加入空格,这种方式比较适合标题式的检索,因为标题本身的内容不多,这样输入一个字,也是能查找出来相关的标题信息的。
如果应用的场景需要很精确的查询,那么可以使用这种方式,在调用之前做一次转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值