查询纠错、查询提示与意图识别

    今天我们动手实现了一个查询纠错和查询提示的代码:

    1. trie树代码如下:

def build_trietree(root, words, str1):
    if( not str1 in words ):
        words.append(str1);
    index_str1=len(words)-1;
    
    p=root;
    for i in range(0, len(str1)):
        if( p.has_key(str1[i]) ):
            p = p[str1[i]];
            if( index_str1 not in p["str"]):
                p["str"].append(index_str1);
        else:
            break;
    for j in range(i,len(str1)):
        p[str1[j]]={};
        p=p[str1[j]];
        if( not p.has_key("str") ):
            p["str"]=[];
        p["str"].append(index_str1);

def find_trietree(root, str1):
    p=root;
    for i in range(0, len(str1)):
        if( p.has_key(str1[i]) ):
            p = p[str1[i]];
        else:
            return [];
    return p["str"];

if __name__=="__main__":
    root={};
    words=[];
    build_trietree(root,words, "abc");
    build_trietree(root,words, "abc");
    build_trietree(root,words, "abdhijk")
    build_trietree(root, words, "abefg")
    index_array=find_trietree(root,"a");
    for index in index_array:
        print words[index];
 

    2. 计算查询纠错编辑距离的代码:

def min1(aint, bint, cint):
    min_result=aint if( aint < bint ) else bint
    min_result=min_result if( min_result < cint ) else cint
    return min_result;
    

def calc_editdistance(a, b):
    s=[([0] * len(b)) for i in range(len(a))];
    
    for i in range(0,len(a)):
        for j in range(0, len(b)):
            if( i == 0 and j == 0):
                s[i][j]=1;
                if(a[0] == b[0]):
                    s[i][j]=0;
                continue;
            if( j == 0 ):
                s[i][j]=s[i-1][j]+1;
                if(b[0]==a[i]):
                    s[i][j]=s[i-1][j];
                continue;
            if( i == 0 ):
                s[i][j]=s[i][j-1]+1;
                if(a[0]==b[j]):
                    s[i][j]=s[i][j-1];
                continue;
            dis=1;
            if( a[i] == b[j]):
                dis=0;
            s[i][j]=min1( s[i-1][j-1]+dis, s[i-1][j]+1, s[i][j-1]+1 );
    return s[len(a)-1][len(b)-1]; 
    
if __name__=="__main__":
    print calc_editdistance("ac","abc")


 

    3. 如果我们想把查询纠错和suggest服务合并到一起实现呢?这样其实是一个很好玩的想法的。

    4. 用户查询意图识别:

               垂直领域检索的query大多数为短query,对于短query来说,识别用户的查询意图是十分困难的。如何在准确率和召回率之间权衡呢?我们只有在对分词和新词挖掘的基础上,使用基于规则的匹配和基于机器学习的方法作为辅助的办法来取得更好的意图识别。更进一步我们可以对用户的查询做一些句法的分析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值