向量相似度的算法实现(信息检索) python

向量相似度的算法实现

实验目的:

通过实验,使学生掌握向量相似度的基本实现方法。

实验内容:

向量空间模型是信息检索中最重要的形式化模型之一,向量相似度是对向量空间模型评分的重要依据。本实验需要编程实现向量相似度的基本算法。P78

要求:

输入:查询(如 “best car insurance”),文档(如“car insurance auto insurance”),文档总数N的值(如1000000)
,文档中每个词的文档频率df
输出:向量相似度的值
编程语言:Python

例子

在这里插入图片描述

伪代码

在这里插入图片描述

代码完整版

# 使用nnc.ltn方法

import math
import re

def Vector_similarity():
    # 输入查询和文档
    injury = input("请输入查询: ")
    doc = input("请输入文档: ")
    # injury = "best car insurance"
    # doc = "car insurance auto insurance"

    # 输入检索(参与计算)的词项,并且输入df
    word_retrieve = []
    df = []
    while(1):
        tem = input("请输入词项并按下回车,结束直接按下回车")
        if tem != '':
            word_retrieve.append(tem)
            df.append(int(input("请输入{}的df:".format(tem))))
        else:
            break
    # df = [5000, 50000, 10000, 1000]
    # word_retrieve = ["auto", "best", "car", "insurance"]

    # 输入文档总频率
    N = int(input("输入文档总频率: "))
    # N = 1000000

    #将输入的查询和文档 injury和doc 提取英文单词并存至列表
    injury_list = re.findall('[a-zA-Z0-9|-]+', injury)
    doc_list = re.findall('[a-zA-Z0-9|-]+', doc)
    print("查询的所有单词项为: ", injury_list)
    print("文档的所有单词项为: ", doc_list)

    #计算待检索词项在查询中和在文档中出现的频率并存入字典
    dic_injury ={}
    dic_doc = {}
    for i in range(len(word_retrieve)):
        count = 0
        for j in range(len(injury_list)):
            if word_retrieve[i] == injury_list[j]:
                count += 1
        dic_injury[word_retrieve[i]] = count
        count = 0
        for j in range(len(doc_list)):
            if word_retrieve[i] == doc_list[j]:
                count += 1
        dic_doc[word_retrieve[i]] = count
    print("查询中tf为:", dic_injury)
    print("文档中tf为:", dic_doc)

    #计算  idf
    idf = [math.log(N/per_df, 10) for per_df in df]
    print("查询中idf为:", idf)
    W_tq = {}
    W_td = {}
    #计算余弦平方
    sum_doc = 0
    for i in dic_doc.values():
        sum_doc += pow(i, 2)
    pow2 = pow(sum_doc, 0.5)
    print("pow2(即平方和开根号)值为: ", pow2)
    #计算W_tq, W_td
    inner_mutiply = 0 #计算内积
    for i in range(len(word_retrieve)):
        W_tq[word_retrieve[i]] = dic_injury[word_retrieve[i]] * idf[i]
        W_td[word_retrieve[i]] = dic_doc[word_retrieve[i]] / pow2
        inner_mutiply += W_tq[word_retrieve[i]] * W_td[word_retrieve[i]]
    print("查询的W_tq=wf(查询)*idf值为: ", W_tq)
    print("查询的W_td=wf(文档)/pow2(即平方和开根号)值为: ", W_td)
    print("内积和最终结果为:\n", inner_mutiply)


if __name__ == '__main__':
    Vector_similarity()

运行截图

在这里插入图片描述

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值