信息系统建模大作业
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计 主题查询与增量采集 可视化
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
数据存储格式
字段名称 MD5 title abstract keywords author pubDate parentUrl url crawlDate
字段说明 对url计算MD5的结果 网页标题 网页内容介绍性文字 网页关键字 网页平台 网页发布日期 指向当前网页的网页url 当前网页的url 爬取网页日期
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
相关度评分
• 词频 词在文档中出现的频度越高,权重越高 • 逆文档频率 词在集合所有文档里出现的频率越高, 权重越低 • 字段长度归一值 字段越短,字段的权重越高 • 向量空间模型 提供一种比较多词查询的方式,单个评分代表文档与查询的匹配程度,为了做到这点,这
字段说明 检索ID,其值为对url计算MD5的结果 网页标题 网页正文主要内容 网页配图 新闻类型 新闻子类型,如“type = ‘教育’,subType = ‘中考’” 指向当前网页的网页url 当前网页的url 新闻平台
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
新闻类别
• 从新浪新闻引导页开始爬取的10类新闻
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
信息系统建模大作业答辩
参考资料 《自制搜索引擎》 山田浩之 著 《自己动手写分布式搜索引擎》 罗刚 著 Elasticsearch官方文档(https://www.elastic.co/guide/cn/elasticsearch/guide/cn/scoring-theory.html)
# 精确模式, 将句子最精确的分开,适合文本分析
>>> seg_list = jieba.cut(sent, cut_all=False)
中文/分词/是/文本处理/不可或缺/的/一步/!
# 搜索引擎模式, 在精确模式的基础上,对长词再次切分,提高召回率,适合搜 索引擎分词
>>> seg_list = jieba.cut_for_search(sent)
出现位置 1 2, 5 3 4 5 1 2 3 4
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
倒排索引
• Lucene是一款高性能的、可扩展的信息检索(IR)工具库,是由Java语言开发的成熟、自由开源的搜索 类库,基于Apache协议授权。
• Lucene支持模糊检索,根据分词结果构建索引树。 • ElasticSearch是一个基于Lucene的搜索服务器,提供的接口能够轻松的构建倒排索引。 • 为了有更好的分词结果,使用Elasticsearch IK中文分词。
查询排序
数据来源
• 爬取新闻网站,绝大部分的数据来自今日头条、新浪新闻、腾讯新闻和网易新闻。 • 爬取网页个数30000+
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
Scrapy爬虫框架 • Scrapy是Python的一个web数据爬取框架 • Scrapy运行流程:
• 引擎从调度器中取出一个链接(URL)用于接下来的抓取 • 引擎把URL封装成一个请求(Request)传给下载器 • 下载器把资源下载下来,并封装成应答包(Response) • 爬虫解析Response • 解析出实体(Item),则交给实体管道进行进一步的处理 • 解析出的是链接(URL),则把URL交给调度器等待抓取
增量查询 • 对已经爬取过的页面,计算URL的MD5值,并且将该值作为每个页面独一无二的身份信息 • 处理新的URL时,先检测其MD5是否在已经爬取列表当中,如果已经爬取过可直接跳过该URL
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
存在问题 • 爬虫的起点URL十分重要,如设置起点为百度搜索,爬取的绝大部分内容来源均是百度,爬取到其他站
新闻类别 finance edu tech woman fashion sports ent baby military
含义 财经新闻 教育新闻 科技新闻 女性新闻 时尚新闻 体育新闻 娱乐新闻 育儿新闻 军事新闻
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
❸ TF-IDF ❷ 分词向量化 ❶ jieba分词,去停用词 原始文本
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
使用朴素贝叶斯实现文本分类
对所有具有标签的新闻作为训练集,使用朴素贝叶斯方法进行文本分类模型训练。 最终的模型对部分训练集分类的准确率为94.35%; 从网站爬取最新的具有标签的新闻作为测试集,分类准确率为74.16%;
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
倒排索引 • 通过由属性值来确定记录的位置。是实现“单词-文档矩阵”的一种具体存储形式,可以根据单词快速获
取包含这个单词的文档列表。主要由“单词词典” 和“倒排文件”组成。
原始数据
Doc1: 我正在实现一个搜索引擎 Doc2: 没有梯子你无法在中国使用 谷歌搜索 Doc3: 我在谷歌上查找资料
点的信息会很少
• 识别网页的主题主要依靠keywords和title,在实际爬取中发现有大量的网站设置多个重复关键词以提高在 搜索结果的排名。比如设置主题为“流浪地球”进行爬取的过程中,发现有部分网站将其keywords设置 为“流浪地球、流浪地球电影、流浪地球导演、流浪地球小说、流浪地球结局”。
• 有网站在keywords中添加热门关键词以提高搜索引擎检索排名,比如部分和“流浪地球”完全无关的网 站在其keywords中添加“流浪地球”。
个模型将文档和查询都以 向量(vectors) 的形式表示
https://www.elastic.co/guide/cn/elasticsearch/guide/cn/scoring-theory.html
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
前后端实现
前端 后端 索引
Echarts
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
主题匹配 • 使用jieba分词对主题进行分词 • 判断网页主题的关键性信息是网页中的keywords和title两个属性 • 在判断网页内容是否符合主题时,对网页的关键性信息如标题和关键词进行分词并进行匹配;当且仅当
所有的主题分词列表项均匹配时,才认为当前页面符合要求
信息系统建模大作业答辩
设计并实现一个小的搜索引擎 设计一种面向某一特定主题的网页爬取算法
汇报人:硕8064 童瑶
信息系统建模大作业答辩
1 设计并实现一个小的搜索引擎
数据采集 数据分类 建立索引 查询排序以及可视化
2 设计一种面向某一特定主题的网页爬取算法
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
>>> import jieba >>> sent = '中文分词是文本处理不可或缺的一步!’
# 全模式, 将句子中所有可以成词的词语都扫描出来,速度快,但不能解决歧义
>>> seg_list = jieba.cut(sent, cut_all=True)
中文/分词/是/文本/文本处理/本处/处理/不可/不可或缺/或缺/的/一步//
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
基本算法 • 对主题进行分词 • 如果在某页面A没有发现与主题词匹配的内容,我认为A页面所指向的子
页面含有与主题词匹配的内容的概率很小,因此直接放弃页面A,不再往 后爬取 • 采用广度优先的爬取策略,故选择将还没爬取的url存入队列中 • 为了缩短爬虫爬取的时间,限制爬虫爬取的最大深度 • 为了方便对爬取的数据进行检索查看,爬取的数据经过初步筛选之后直 接存到Elasticsearch的索引中
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
网页爬取策略 • 直接解析html源码进行分析 • 采用异步加载的网站(如ajax加载的数据):
• 使用Selenium模拟浏览器获取动态网页数据 • 分析页面获取所需的API
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
数据存储
中文/分词/是/文本/本处/处理/文本处理/不可/或缺/不可或缺/的/一步/!
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
TF-IDF 词频/逆文本频率指数
一般情况下一个关键词只在很少的网页中出现,那么通过这个关键词就很容易锁定搜索目标,因此 给这样的关键词的权重就应该比较大,而如果一个词在网页中经常出现,那么这样的词对于确定网页类型 贡献很小,因此它的权重就应该比较小。TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言 中的出现次数成反比,是词频TF与逆文档频率IDF的乘积。
数据采集
数据分类
建立索引
查询排序
倒排索引
去停用词
Doc1:实现/搜索/索引/引擎/搜索引擎 Doc2:梯子/中国/使用/谷歌/搜索 Doc3:谷歌/查找/资料
倒排索引 关键词 实现 搜索 索引 引擎 搜索引擎 梯子 中国 使用 谷歌 …
文章id 1 1, 2 1 1 1 2 2 2 2
出现频率 1 2 1 1 1 1 1 1 1
谢谢
Scrapy爬取数据
原始数据以json格式保存到本 地文件
数据预处理
去除空数据以及其他无效数据
存储到数据库
将整理好的数据批量存入数据库
小型搜索引擎的设计与实现
数据采集
源自文库
数据分类
建立索引
查询排序
数据存储格式
字段名称 Id title content imgUrl type subType parentUrl url author
Javascript 的图表库
Django
使用python的开放源代码的web应用框架
Elasticsearch
Apache Lucene(TM) 倒排索引
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
信息系统建模大作业答辩
1 设计并实现一个小的搜索引擎 2 设计一种面向某一特定主题的网页爬取算法
jieba分 词
Doc1:我/正在/实现/一个/搜索/索引/引擎/搜索引擎 Doc2:没有/梯子/你/无法/在/中国/使用/谷歌/搜索 Doc3:我/在/谷歌/上/查找/资料
去停用词
Doc1:实现/搜索/索引/引擎/搜索引擎 Doc2:梯子/中国/使用/谷歌/搜索 Doc3:谷歌/查找/资料
小型搜索引擎的设计与实现
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
数据存储格式
字段名称 MD5 title abstract keywords author pubDate parentUrl url crawlDate
字段说明 对url计算MD5的结果 网页标题 网页内容介绍性文字 网页关键字 网页平台 网页发布日期 指向当前网页的网页url 当前网页的url 爬取网页日期
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
相关度评分
• 词频 词在文档中出现的频度越高,权重越高 • 逆文档频率 词在集合所有文档里出现的频率越高, 权重越低 • 字段长度归一值 字段越短,字段的权重越高 • 向量空间模型 提供一种比较多词查询的方式,单个评分代表文档与查询的匹配程度,为了做到这点,这
字段说明 检索ID,其值为对url计算MD5的结果 网页标题 网页正文主要内容 网页配图 新闻类型 新闻子类型,如“type = ‘教育’,subType = ‘中考’” 指向当前网页的网页url 当前网页的url 新闻平台
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
新闻类别
• 从新浪新闻引导页开始爬取的10类新闻
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
信息系统建模大作业答辩
参考资料 《自制搜索引擎》 山田浩之 著 《自己动手写分布式搜索引擎》 罗刚 著 Elasticsearch官方文档(https://www.elastic.co/guide/cn/elasticsearch/guide/cn/scoring-theory.html)
# 精确模式, 将句子最精确的分开,适合文本分析
>>> seg_list = jieba.cut(sent, cut_all=False)
中文/分词/是/文本处理/不可或缺/的/一步/!
# 搜索引擎模式, 在精确模式的基础上,对长词再次切分,提高召回率,适合搜 索引擎分词
>>> seg_list = jieba.cut_for_search(sent)
出现位置 1 2, 5 3 4 5 1 2 3 4
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
倒排索引
• Lucene是一款高性能的、可扩展的信息检索(IR)工具库,是由Java语言开发的成熟、自由开源的搜索 类库,基于Apache协议授权。
• Lucene支持模糊检索,根据分词结果构建索引树。 • ElasticSearch是一个基于Lucene的搜索服务器,提供的接口能够轻松的构建倒排索引。 • 为了有更好的分词结果,使用Elasticsearch IK中文分词。
查询排序
数据来源
• 爬取新闻网站,绝大部分的数据来自今日头条、新浪新闻、腾讯新闻和网易新闻。 • 爬取网页个数30000+
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
Scrapy爬虫框架 • Scrapy是Python的一个web数据爬取框架 • Scrapy运行流程:
• 引擎从调度器中取出一个链接(URL)用于接下来的抓取 • 引擎把URL封装成一个请求(Request)传给下载器 • 下载器把资源下载下来,并封装成应答包(Response) • 爬虫解析Response • 解析出实体(Item),则交给实体管道进行进一步的处理 • 解析出的是链接(URL),则把URL交给调度器等待抓取
增量查询 • 对已经爬取过的页面,计算URL的MD5值,并且将该值作为每个页面独一无二的身份信息 • 处理新的URL时,先检测其MD5是否在已经爬取列表当中,如果已经爬取过可直接跳过该URL
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
存在问题 • 爬虫的起点URL十分重要,如设置起点为百度搜索,爬取的绝大部分内容来源均是百度,爬取到其他站
新闻类别 finance edu tech woman fashion sports ent baby military
含义 财经新闻 教育新闻 科技新闻 女性新闻 时尚新闻 体育新闻 娱乐新闻 育儿新闻 军事新闻
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
❸ TF-IDF ❷ 分词向量化 ❶ jieba分词,去停用词 原始文本
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
使用朴素贝叶斯实现文本分类
对所有具有标签的新闻作为训练集,使用朴素贝叶斯方法进行文本分类模型训练。 最终的模型对部分训练集分类的准确率为94.35%; 从网站爬取最新的具有标签的新闻作为测试集,分类准确率为74.16%;
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
倒排索引 • 通过由属性值来确定记录的位置。是实现“单词-文档矩阵”的一种具体存储形式,可以根据单词快速获
取包含这个单词的文档列表。主要由“单词词典” 和“倒排文件”组成。
原始数据
Doc1: 我正在实现一个搜索引擎 Doc2: 没有梯子你无法在中国使用 谷歌搜索 Doc3: 我在谷歌上查找资料
点的信息会很少
• 识别网页的主题主要依靠keywords和title,在实际爬取中发现有大量的网站设置多个重复关键词以提高在 搜索结果的排名。比如设置主题为“流浪地球”进行爬取的过程中,发现有部分网站将其keywords设置 为“流浪地球、流浪地球电影、流浪地球导演、流浪地球小说、流浪地球结局”。
• 有网站在keywords中添加热门关键词以提高搜索引擎检索排名,比如部分和“流浪地球”完全无关的网 站在其keywords中添加“流浪地球”。
个模型将文档和查询都以 向量(vectors) 的形式表示
https://www.elastic.co/guide/cn/elasticsearch/guide/cn/scoring-theory.html
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
前后端实现
前端 后端 索引
Echarts
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
主题匹配 • 使用jieba分词对主题进行分词 • 判断网页主题的关键性信息是网页中的keywords和title两个属性 • 在判断网页内容是否符合主题时,对网页的关键性信息如标题和关键词进行分词并进行匹配;当且仅当
所有的主题分词列表项均匹配时,才认为当前页面符合要求
信息系统建模大作业答辩
设计并实现一个小的搜索引擎 设计一种面向某一特定主题的网页爬取算法
汇报人:硕8064 童瑶
信息系统建模大作业答辩
1 设计并实现一个小的搜索引擎
数据采集 数据分类 建立索引 查询排序以及可视化
2 设计一种面向某一特定主题的网页爬取算法
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
>>> import jieba >>> sent = '中文分词是文本处理不可或缺的一步!’
# 全模式, 将句子中所有可以成词的词语都扫描出来,速度快,但不能解决歧义
>>> seg_list = jieba.cut(sent, cut_all=True)
中文/分词/是/文本/文本处理/本处/处理/不可/不可或缺/或缺/的/一步//
设计一种面向某一特定主题的网页爬取算法
算法设计 主题查询与增量采集 可视化
基本算法 • 对主题进行分词 • 如果在某页面A没有发现与主题词匹配的内容,我认为A页面所指向的子
页面含有与主题词匹配的内容的概率很小,因此直接放弃页面A,不再往 后爬取 • 采用广度优先的爬取策略,故选择将还没爬取的url存入队列中 • 为了缩短爬虫爬取的时间,限制爬虫爬取的最大深度 • 为了方便对爬取的数据进行检索查看,爬取的数据经过初步筛选之后直 接存到Elasticsearch的索引中
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
网页爬取策略 • 直接解析html源码进行分析 • 采用异步加载的网站(如ajax加载的数据):
• 使用Selenium模拟浏览器获取动态网页数据 • 分析页面获取所需的API
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
数据存储
中文/分词/是/文本/本处/处理/文本处理/不可/或缺/不可或缺/的/一步/!
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
TF-IDF 词频/逆文本频率指数
一般情况下一个关键词只在很少的网页中出现,那么通过这个关键词就很容易锁定搜索目标,因此 给这样的关键词的权重就应该比较大,而如果一个词在网页中经常出现,那么这样的词对于确定网页类型 贡献很小,因此它的权重就应该比较小。TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言 中的出现次数成反比,是词频TF与逆文档频率IDF的乘积。
数据采集
数据分类
建立索引
查询排序
倒排索引
去停用词
Doc1:实现/搜索/索引/引擎/搜索引擎 Doc2:梯子/中国/使用/谷歌/搜索 Doc3:谷歌/查找/资料
倒排索引 关键词 实现 搜索 索引 引擎 搜索引擎 梯子 中国 使用 谷歌 …
文章id 1 1, 2 1 1 1 2 2 2 2
出现频率 1 2 1 1 1 1 1 1 1
谢谢
Scrapy爬取数据
原始数据以json格式保存到本 地文件
数据预处理
去除空数据以及其他无效数据
存储到数据库
将整理好的数据批量存入数据库
小型搜索引擎的设计与实现
数据采集
源自文库
数据分类
建立索引
查询排序
数据存储格式
字段名称 Id title content imgUrl type subType parentUrl url author
Javascript 的图表库
Django
使用python的开放源代码的web应用框架
Elasticsearch
Apache Lucene(TM) 倒排索引
小型搜索引擎的设计与实现
数据采集
数据分类
建立索引
查询排序
信息系统建模大作业答辩
1 设计并实现一个小的搜索引擎 2 设计一种面向某一特定主题的网页爬取算法
jieba分 词
Doc1:我/正在/实现/一个/搜索/索引/引擎/搜索引擎 Doc2:没有/梯子/你/无法/在/中国/使用/谷歌/搜索 Doc3:我/在/谷歌/上/查找/资料
去停用词
Doc1:实现/搜索/索引/引擎/搜索引擎 Doc2:梯子/中国/使用/谷歌/搜索 Doc3:谷歌/查找/资料
小型搜索引擎的设计与实现