作者:微信小助手
发布时间:2022-04-19T10:29:09
来源:https://blog.csdn.net/m0_57315623?type=blog
咱们如果用我们的小服务器去搞百度,搜狗那种引擎肯定是不行的,内属于全站搜索,我们这里做一个站内搜索。这个还是可以的,就类似于我们对网站里的资源进行搜索。
搜索引擎就像一个小蜜蜂每天不停的采摘蜂蜜,就是去爬虫各个网页,然后通过爬取之后建立索引,以供于我们去搜索。
这里我们可以使用Python,或者下载文档压缩包。这里我们下包把,快多了。本来想搞一个英雄联盟的,实在找不见,要是后续有老铁找到可以分享一下。
建议大家别爬虫(要不然被告了,不过我们学校的官网倒是可以随便爬,我们当时就是拿这个练手的) 为什么要用索引呢?
因为爬的数据太多了,不索引,难道我去遍历吗?时间复杂度太大了。
这里我们需要建立索引,索引分别为正排索引,和倒排索引。
拿LOL举个例子吧,正排就相当于,我们提到无极剑圣的技能就可以联想到:
所以这是根据名字选技能
倒排索引就是LOL里面谁有剑:
所以这是根据特点选择英雄
1)扫描下载到的文档,分析内容,构建出,正排索引和倒排索引。并且把索引内容保存到文件中。
2)加载制作i好的索引。并提供一些API实现查正排和查倒排这样的功能。
1)调用索引模块,实现一个搜索的完整过程。
输入:用户的查询词 输出:完整的搜索结果
需要实现一个简单的web程序,能够通过网页的形式和用户进行交互。包含了前端和后端。
1.基于词库
尝试把所有的词都进行穷举,把这些结果放到词典文件中。
2.基于统计
收集到很多的语料库,进行人工标注,知道了那些字在一起的概率比较大~
java中能够实现分词的第三方工具也是有很多的
比如ansj(听说唱的兄弟可能听过ansj,哈哈)这个就是一个maven中央仓库的分词第三方库。
我们直接下载最新版本然后放入pom.xml里面
test包里直接操作:我们使用这个测试代码直接搞。试一下这个包咋用。
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import java.util.List;
public class TastAnsj {
public static void main(String[] args) {
String str = "易大师是一个有超高机动性的刺客、战士型英雄,擅长利用快速的打击迅速击溃对手,易大师一般打野和走单人路,作为无极剑道的最后传人,易可以迅速砍出大量伤害,同时还能利用技能躲避猛烈的攻击,避开敌人的集火。";
List<Term> terms = ToAnalysis.parse(str).getTerms();
for (Term term : terms) {
System.out.println(term.getName());
}
}
}
把刚刚下载好的文档的路径复制到String中并且用常量标记。
这一步是为了用遍历的方法把所有html文件搞出来,我们这里用了一个递归,如果是绝对路径,就填加到文件链表,如果不是就递归,继续添加里面的值。