全书重点在web搜索引擎的各种具体问题和解法,所以本笔记也以问题和解法模式组织。*号表示其它来源但是有价值的内容
1. 爬虫
1.1 如何选取起始url
根据web的蝴蝶结结果( 分为in+scc+out, in多是目录形,out是权威型,scc是多数网页),应该尽量选择in和scc的url作为起始url, 通常为各大门户网站和官方网站首页
1.2 抓取策略是选择宽度优先还是深度优先
宽度优先较好,理由是:
1) 起始站点的重要程度一般较高,随着深度加深,重要程度下降,先抓重要的
2) web的直径(平均两url间最短跳数)只有17,不算太深
3) 宽度有利于多爬虫间的分工合作,不至于重复
1.3 如何处理网页更新问题,在web数量相对较大时
1.4 如何解决抓取中url回路/重复问题
对url做 md5 hash, 然后取模n, n表示hash表容量
1.4.1 如何解决hash内存空间问题
Bitmap结构来压缩mds存储
Boolm filter 算法(多个hash函数)可以节约hash空间
多个爬虫多个hash
*?如果碰撞怎么办
不管它!
1.5 如何设计revist(重访)策略
对不同类型网页设计不同的revist频度
1.6 如何高速爬取
1.6.1 主要是通过多个爬虫并行工作, 并尽量减少重复和遗漏
1) 按照域名分配抓取工作
1.6.2 * 提高单个连接的速度
1) DNS 缓存
2) 常连接
3) 抓取和超连接分析分开 ?
1.7 如何设计大规模的网页库,便于顺序读写和随机访问
1) 日志结构 适合顺序读写
2) hash日志结构 平衡顺序读写和随机访问
1.8 web爬虫的局限或发展
1) 无法‘深度’爬取动态内容
2) 定向爬起
2. 分析部分( 形式的和语义的 )
2.1 如何获取html标题
<title>或者指向自身的anchor文本
2.2 如何判断那个html块是正文
定义一套规则(块的长度,位置等)和权重,然后‘投票’决定那个块属于正文
2.3 如何提取正文
深度遍历选中的html块
2.4 如何查重
0) 预处理: 提取标题和正文等特征
1) I-Match 算法: 比较除去高频和低频词后词汇集合(签名)
2) Shingle(瓦片)算法: 把文档切分成定长字符串集合,然后比较集合的相似度;常用
2.5* 分词
0. 分词的两大难题:歧义词(交叉歧义:"表面的", 和组合歧义:“这个门把手坏了“)和新词确定
a.基于字符串匹配(词典)的分词方法: 初级
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小)
b.基于统计的分词方法( 郭进 Critical Tokenization and its Properties )
因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字
的组合的频度进行统计,计算它们的互现信息
c.基于理解的分词方法: 试验阶段
其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。
2.6 PageRank基本思路
1) backlink越多的更有可能是好网页
2) 好网页指向的可能是好网页
3) 连接越少的越可能是好网页
3. 索引部分
1) 如何给网页编号编码
一般是对url作md5, 然后对排序的整数作’差分编码‘减少值,然后分别多'可变长度编码‘压缩存储
2) 典型的搜索引擎如何建立索引(倒排文件)
顺序读网页库建立正排表(in-memory)
扫描正排表建立倒排表,写入临时倒排文件
采用多路归并建立最终的倒排文件
3) 如何分布式倒排文件
a. 按照文档编号划分机器
优点是容错度好,因为一个台机器出问题,不会影响一个query的全部结果
b. 按照query划分机器
有利用查询并发
c.* hybrid
4. 检索
4.1 如何计算query和文档的相似度
1) 向量空间模型: 把文档看成字符串上的多维向量,长度由各个词频决定,然后计算和query的向量夹角
2) TF/IDF模型: 在向量模型基础上加大高词频高且罕见词汇的权重
4.2 现代搜索引擎的排序方法
在PageRank排序前提下,按照相似度排序, 同时支持布尔模型
使用堆排序得到top-n结果
4.3 如何归并布尔查询的集合
最佳归并树算法: 小集合有限归并
5. 其它
5.1 常见SEO方法
1) 增加热门关键词,提高相似度,并提高被索引的次数
2) 增加backlist, 提高PageRank
3) 动态网友静态化
1. 爬虫
1.1 如何选取起始url
根据web的蝴蝶结结果( 分为in+scc+out, in多是目录形,out是权威型,scc是多数网页),应该尽量选择in和scc的url作为起始url, 通常为各大门户网站和官方网站首页
1.2 抓取策略是选择宽度优先还是深度优先
宽度优先较好,理由是:
1) 起始站点的重要程度一般较高,随着深度加深,重要程度下降,先抓重要的
2) web的直径(平均两url间最短跳数)只有17,不算太深
3) 宽度有利于多爬虫间的分工合作,不至于重复
1.3 如何处理网页更新问题,在web数量相对较大时
1.4 如何解决抓取中url回路/重复问题
对url做 md5 hash, 然后取模n, n表示hash表容量
1.4.1 如何解决hash内存空间问题
Bitmap结构来压缩mds存储
Boolm filter 算法(多个hash函数)可以节约hash空间
多个爬虫多个hash
*?如果碰撞怎么办
不管它!
1.5 如何设计revist(重访)策略
对不同类型网页设计不同的revist频度
1.6 如何高速爬取
1.6.1 主要是通过多个爬虫并行工作, 并尽量减少重复和遗漏
1) 按照域名分配抓取工作
1.6.2 * 提高单个连接的速度
1) DNS 缓存
2) 常连接
3) 抓取和超连接分析分开 ?
1.7 如何设计大规模的网页库,便于顺序读写和随机访问
1) 日志结构 适合顺序读写
2) hash日志结构 平衡顺序读写和随机访问
1.8 web爬虫的局限或发展
1) 无法‘深度’爬取动态内容
2) 定向爬起
2. 分析部分( 形式的和语义的 )
2.1 如何获取html标题
<title>或者指向自身的anchor文本
2.2 如何判断那个html块是正文
定义一套规则(块的长度,位置等)和权重,然后‘投票’决定那个块属于正文
2.3 如何提取正文
深度遍历选中的html块
2.4 如何查重
0) 预处理: 提取标题和正文等特征
1) I-Match 算法: 比较除去高频和低频词后词汇集合(签名)
2) Shingle(瓦片)算法: 把文档切分成定长字符串集合,然后比较集合的相似度;常用
2.5* 分词
0. 分词的两大难题:歧义词(交叉歧义:"表面的", 和组合歧义:“这个门把手坏了“)和新词确定
a.基于字符串匹配(词典)的分词方法: 初级
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小)
b.基于统计的分词方法( 郭进 Critical Tokenization and its Properties )
因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字
的组合的频度进行统计,计算它们的互现信息
c.基于理解的分词方法: 试验阶段
其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。
2.6 PageRank基本思路
1) backlink越多的更有可能是好网页
2) 好网页指向的可能是好网页
3) 连接越少的越可能是好网页
3. 索引部分
1) 如何给网页编号编码
一般是对url作md5, 然后对排序的整数作’差分编码‘减少值,然后分别多'可变长度编码‘压缩存储
2) 典型的搜索引擎如何建立索引(倒排文件)
顺序读网页库建立正排表(in-memory)
扫描正排表建立倒排表,写入临时倒排文件
采用多路归并建立最终的倒排文件
3) 如何分布式倒排文件
a. 按照文档编号划分机器
优点是容错度好,因为一个台机器出问题,不会影响一个query的全部结果
b. 按照query划分机器
有利用查询并发
c.* hybrid
4. 检索
4.1 如何计算query和文档的相似度
1) 向量空间模型: 把文档看成字符串上的多维向量,长度由各个词频决定,然后计算和query的向量夹角
2) TF/IDF模型: 在向量模型基础上加大高词频高且罕见词汇的权重
4.2 现代搜索引擎的排序方法
在PageRank排序前提下,按照相似度排序, 同时支持布尔模型
使用堆排序得到top-n结果
4.3 如何归并布尔查询的集合
最佳归并树算法: 小集合有限归并
5. 其它
5.1 常见SEO方法
1) 增加热门关键词,提高相似度,并提高被索引的次数
2) 增加backlist, 提高PageRank
3) 动态网友静态化