上海网站搜索引擎优化(基于向量空间模型个性化搜索算法的工作原理及使用方法)
优采云 发布时间: 2021-09-04 00:03上海网站搜索引擎优化(基于向量空间模型个性化搜索算法的工作原理及使用方法)
传统的检索模型都受到不完整的查询结果和不一致的文档相关性的困扰。基于这种情况,文章提出了一种基于向量空间模型的个性化搜索算法,并设计了一个可以进行个性化搜索过程以满足不同用户需求的搜索系统。
1.搜索引擎介绍
1.1简介
搜索引擎是指按照一定的策略,使用特定的计算机程序,从互联网上采集信息的服务。对信息进行整理和处理后,为用户提供搜索服务。向用户显示与用户检索相关的信息的系统。搜索引擎包括全文索引、目录索引、wu 搜索引擎、垂直搜索引擎、集合搜索引擎、门户搜索引擎和免费链接列表。
1.2 搜索引擎的工作原理
2.模型对比
2.1语言模型
语言模型是在 1980 年代提出的。它使用概率来计算某个句子出现的概率,以确定哪个词序列更可能出现。它分为语法语言模型和统计语言模型。 .
2.2空间矢量模型
空间矢量模型是在 1970 年代提出的。它使用词频tf和词条信息idf来标识某个文档,即某个文档是tf-idf权重在n维坐标系中的组合向量。之后,通过计算当前查询词与文档向量之间的相似度对文档进行排序。由于其简单直观,并且支持部分或近似匹配,因此在许多领域都有应用。
3.具体代码实现
3.1Lucene 介绍
3.1.1目的
使用Lucene,全文搜索工具包的索引和索引搜索功能,构建一个小型搜索引擎。这个小型搜索引擎可以根据用户给出的查询语句返回数据集的相关文档。
3.1.2Lucene 架构
Lucene的使用主要体现在两步:
创建索引,通过TndexWriter为不同的文件创建索引,保存在索引相关文件的存储位置。
通过索引搜索关键字相关文档。
以下是七夕最常用的五个文件:
第一个也是最重要的一个,Lucene-core-4.0.0.jar,它的屮包括常用的文档、索引、搜索、存储等相关核心代码。
第二个是Lucene-analyzers-common-4.0.0.jar,里面收录了各种语言的词法分析器,用于从文件内容中切分提取关键词。
第三个,Lucene-highlighter-4.0.0.jar,这个jar包主要用于高亮搜索到的内容。
第四个和第五个,Lucene-queryparser-4.0.0.jar,提供了各种搜索的搜索相关代码,比如模糊搜索,范围搜索等等。
3.2实现
3.2.1 预处理
一种编码格式转换
N01和N02的文档都是UNTCODE编码的,N03~N16的文档都是UTF-8编码的,但是这些编码无法识别,所以我们只好将它们转换成ANST编码
b转到标签
STNO 文件有很多标签,我们需要去掉这些标签并转换成文本文件
3.2.2分词
(1)choice 和分词器的改进
目前网络上流行的三种切词工具:Paoding、IK和Ictclas4j。经过调查,我们最终选择了TKAnalyzer2012FF-u1 tokenizer。 TK Analyzer是一个基于java语言开发的开源、轻量级的分词工具包。我们选择它主要有以下两个原因:
TK Analyzer 支持扩充停止词表的功能。我们在网上找到屮文的停用词表,对原有停用词表进行扩充,优化分词结果。
TK Analyzer 支持扩展字典功能。我们将经常出现在语料库中的话题,如浩克比空难、科索沃战争等,作为一个词加入到词典中,从而提高查询的准确率。
(2)分词原理
分词的步骤主要分为以下4个步骤:
分词,也就是所谓的分词,就是将原创文档一个一个地分成词。
在索引过程中去除停用词和去除不相关词,以提高返回结果的准确性。
语言处理(以英语为例),这里主要分为三个步骤(1)把单词变成小写(2)extract词干,比如把兴趣变成兴趣(3)词形回,比如改吃吃。
将处理过的词传递给索引。
创建索引
建立索引分为以下几个步骤:
①获取索引所在目录的路径。
②实例化分析器。
③实例化 TndexWriterConfig。
④ 实例化 TndexWriter。
⑤ 遍历预处理后的原创文本文档,将每个文档的文件名、内容、文件路径加入索引。
搜索
搜索分为以下几个步骤:
输入查询语句。
去除停用词、切词并对查询语句进行语言处理。
设置返回内容。由于每个topic大约有10个相关文档,我们将返回内容设置为“10”
根据查询对每个文档进行评分。
返回前十个子文件的文件名、路径和分数。
4.评估结果
4.1Lucene 的评分公式
Lucene的score也叫TF/IDF算法,基本上就是词频算法。系统会自动为每个文档打分,反馈结果会根据文档路径后添加的分数来确定反馈的优先级。简单来说就是将搜索到的词组进行切分得到切分项,每个切分项结合每个索引文档根据词频的TF/IDF分数计算。然后将每个分词项的分数相加,得到本次搜索对应的文档分数。对应的评分公式如下:
score(q,d) ?coord(q, d)x queryNorm(q)x'(find)x idf(t)2x t.getBoost( )x nor^i(t, d))
这个评分公式由 6 部分组成: coord(q, d) 评分因子,基于文档中查询项的数量。文档中的查询项越多,文档的匹配度越高。
queryNorm(q) 查询的标准查询,这个因子对于所有文档都是相同的值,所以不影响排序结果。比如我们希望所有文档的分数都更高,那么就需要设置这个值。
tf(t in d)是指文档d屮中项目t出现的次数。具体值为次数的根。
idf(t) 是指项目 t 出现的文档数量。吨。 GetBoost 查询项权重。 norm(t, d) 长度相关的权重因子。
4.2评价结果
我们一共测试了13个查询,分别计算了每个查询结果的tf/idf值,发现85%的查询结果100%准确,调用率普遍偏低;调用率低的原因是为了保证较高的准确率,我们预先限制了每次查询返回的文档数为10个文档。准确率大多为100%。首先是我们在一定程度上牺牲了准确性。二是用户查询比较短,所以查询内容基本都是关键词。三是话题文章与关键词的相关性比较高。