Tsearch2分词函数

来源:互联网 发布:snmp trap 软件 编辑:程序博客网 时间:2024/06/07 07:27

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

基础的分字程序

下面是 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;
使用感受:
最近用过了这两个自定义的分词函数,简单的说就是将汉字分割开来,例如:
“我来自地球",通过上面的分词函数后就变成“我 来 自 地 球”,会在每个字之间加入空格,这种方式比较适合标题式的检索,因为标题本身的内容不多,这样输入一个字,也是能查找出来相关的标题信息的。
如果应用的场景需要很精确的查询,那么可以使用这种方式,在调用之前做一次转换。

原创粉丝点击