# SearechEngine **Repository Path**: floatgemut/SearchEngine ## Basic Information - **Project Name**: SearechEngine - **Description**: 新的玩意儿 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-16 - **Last Updated**: 2023-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 搜索引擎 ## 介绍 一期项目框架 1、关键字推荐 2、网页搜索 ## 软件架构 软件架构说明 ### 离线部分 #### 关键字推荐 ##### 英文 英文的**词典库**:单词+词频 (统计两个英文文件)存储在本地 英文的**索引库** 每一个字母 + 字母所在的单词的行号 26个字母 拆解成字符,找到字符出现的行号存起来,再取交集 #### 中文 中文的**词典库**: 短语/词组 + 频率 中文的**索引库** 每个汉字 + 每个汉字所在的短语的行号 cppjieba对中文进行分词,设计cppjieba的安装与使用 #### 网页搜索 ##### 网页库 1.利用以前的rss的解析方法,生成对应的**网页库**。tinyxml2 2.将网页库进行去重。生成新的**网页库** 第一种方法:TopK (抽出频率最高的十个词进行比较) 第二种方法:simhash(google提供的第三方库),具备去重的能力 两种生成最终网页库的方法,第一种时首先生成有重复文章的网页库,然后再使用上面的两种方法中的任意一个进行去重;第二种方法就是,再生成网页库的过程之中进行去重 ##### 网页偏移库 id + 起始地址 + 文章长度 作用:==取id对应的文章内容== ##### 倒排索引库(TF-IDF算法) 短语 + 文章id + 短语在文章中的权重(==推荐排序的依据==) 王道 武汉 湖北 ==取交集找到对应文章,再到偏移库中找到文章偏移,再找到该文章内容== >王道 1 4 10 >武汉 1 4 20 >湖北 1 5 30 >**总结:在离线部分生成七个文件** ## 在线部分 ### 关键字推荐部分 英文(hello) 从英文词典库,索引 中午(王道) 从中文词典库,索引库 王 出现王的行号 1 3 5 8 道 出现道的行号 1 3 7 10 20 在中文索引库中进行搜索,再取交集会有没有匹配词的情况这个时候可以取并集 >比如:王二小 王八 > 道路 道理 >==把所有出现的短语取并集,然后再去与待查询的短语“王道”进行比较== > **最小编辑距离算法**,本身会用到动态规划。 再根据算出来的最小编辑距离比较排序; 当最小编辑举例相同时,再按照短语的频率进行比较排序; 当频率也相同的时候,按照字母序排序,然后推荐出来 >注意:对于中文而言,使用的时utf8的编码格式,需要研究utf8编码规范。 ### 网页搜索部分 王道 在线 科技 公司 将每个短语的文章id取出来,将其取交集。 x = (x1, x2, x3, x4, 0, ......); y = (y1, y2, y3, y4, y5,......); 算出两文章的夹角, 夹角越小的话,就证明两篇文章越相似 (余弦相似度) 根据余弦相似度进行排序 返回的标准:文章的标题、文章的链接、文章的摘要 文章的摘要: 1.静态摘要,可以选择文章的最前面的一段化(长度可以自定) 2.动态摘要,可以再每个短语的前后分别找出一定数量的短语,然后拼接成为摘要 ## 安装教程 1. 进入主程序目录的build目录 2. 在终端输入命令cmake .. 3. 再输入make 4. 可执行文件在主目录/build/src/bin下 ## 使用说明 1. xxxx 2. xxxx 3. xxxx ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request # 7.6 ## 进度汇报