n-gram算法搜索答案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32113189/article/details/80828912

估计这是6月份最后一篇博客了,这个月好像产出没那么多,可能是因为一直在忙于开题的事,所以没有太多的心思放在码代码上,所以这篇博客要发布我最新使用“全N-gram”算法来对问题进行搜索,准确率还是很高的,希望大家可以在刚开始做问答的时候能用到。

# -*- coding:utf-8 -*-

import simple_so as so

def i_question():
    print('请输入问题')
    question = input()
    return question
'''使用n-gram算法进行问题分析'''
def gram():
    question = i_question()
    n_word = []
    for i in range(len(question)+2):
        for n in range(len(question)):
            one_anw = question[n:n+i-1]
            if one_anw != '' and len(one_anw) >= 2 and one_anw not in n_word:
                n_word.append(one_anw)
            else:
                continue
    return n_word
'''对每个组进行问题搜索'''
def seanswer():
    set_answer = []
    ron_answer = []
    n_word = gram()
    for key_word in n_word:
        answer = so.QA(key_word)
        if answer != []:
            set_answer.append(answer)
        else:
            continue
    for i in range(len(set_answer)):
        ron_answer.extend(set_answer[i])
    return ron_answer
'''将排名前20个的答案提出来'''
def freq():
    counter = {}
    ron_answer = seanswer()
    for k in ron_answer:
        counter[k] = counter.get(k,0) + 1
    Freq = sorted([(freq,word) for word ,freq in counter.items()],reverse=True)[:20]
    for item in Freq:
        print(item)

def main():
    freq()

if __name__ == '__main__':
    main()



这里写图片描述
这里面是我随意从问答库中选择的一个问题和答案的截图,请注意问题的叙述,这和接下来输入问题的问法是不同的。
这里写图片描述
当我输入想要的问题后,程序把前20中最后可能是答案的句子输出了,可以看到,第一行的是34次,因此,我们可以认为该句子就是最正确的答案,其余的句子可以忽略。大家可以只输出第一个句子作为答案。

大家有什么对问答系统想了解或者有什么好的算法的,欢迎大家积极留言。

猜你喜欢

转载自blog.csdn.net/qq_32113189/article/details/80828912
今日推荐