mirror of
https://github.com/PKUFlyingPig/cs-self-learning.git
synced 2026-06-21 08:57:14 +08:00
Update 信息检索.md
更新格式和部分文字
This commit is contained in:
parent
1abdb29e69
commit
4ee347eeb6
1 changed files with 32 additions and 29 deletions
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
## 前言
|
||||
|
||||
<em>碰到问题,记住第一件事是 **翻阅文档** ,不要一开始就问人或者打开搜索引擎!</em>
|
||||
<em>碰到问题,记住第一件事是 **翻阅文档** ,不要一开始就直接搜索或者找人问,翻阅FAQ可能会快速找到答案。</em>
|
||||
|
||||
信息检索,我的理解来说,实际上就是灵活运用搜索引擎中,方便快捷的搜到需要的信息,包括但不限于编程。
|
||||
|
||||
编程最重要的,就是 STFW(search the fucking web)和 RTFM(read the fucking Manual),首先要读文档,第二要学会搜索,网上那么多资源,怎么用,就需要信息检索。
|
||||
编程最重要的,就是 STFW(search the fucking web) 和 RTFM(read the fucking Manual) ,首先要读文档,第二要学会搜索,网上那么多资源,怎么用,就需要信息检索。
|
||||
|
||||
要搜索,我们首先要搞清楚搜索引擎是如何工作的:
|
||||
|
||||
|
|
@ -14,25 +14,27 @@
|
|||
|
||||
搜索引擎的工作过程大体可以分成三阶段:[^1]
|
||||
|
||||
1. 爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,获取网页HTML代码存入数据库。
|
||||
1. 爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,获取网页 HTML 代码存入数据库。
|
||||
1. 预处理:索引程序对抓取来的网页数据进行文字提取,中文分词,索引等处理,以备排名程序调用。
|
||||
1. 排名:用户输入关键词后,排名程序调用索引库数据,计算相关性,然后按一定格式生成搜索结果页面。
|
||||
|
||||
第一步,就是大家经常听说的网络爬虫,一般Python卖课的都会吹这个东西。简单可以理解为,我用一个自动的程序,下载网站中的所有文本、图片等相关信息,然后存入本地的磁盘中。
|
||||
第一步,就是大家经常听说的网络爬虫,一般 Python 卖课的都会吹这个东西。简单可以理解为,我用一个自动的程序,下载网站中的所有文本、图片等相关信息,然后存入本地的磁盘。
|
||||
|
||||
第二步是搜索引擎的核心,但是对于我们使用来说,并不是特别关键。
|
||||
第二步是搜索引擎的核心,但是对于我们使用来说,并不是特别关键,大致可以理解为洗干净数据,然后入库页面,每个页面加入关键字等信息方便我们查询。
|
||||
|
||||
第三步跟我们息息相关,不管是什么搜索网站,google、百度、Bing,都一样,输入关键字或者需要查询的内容,搜索引擎会给你返回结果。本文就是教你如何获取更好的结果。
|
||||
第三步跟我们息息相关,不管是什么搜索网站, google 、百度、 Bing ,都一样,输入关键字或者需要查询的内容,搜索引擎会给你返回结果。本文就是教你如何获取更好的结果。
|
||||
|
||||
## 基础搜索技巧
|
||||
|
||||
根据上述的工作原理,我们大致就能明白,其实可以把搜索引擎当作一个比较聪明的数据库,更好的使用查询条件就能更快速的找到你想要的信息,下面介绍一些搜索的技巧:
|
||||
|
||||
### 使用英文
|
||||
|
||||
首先我们要知道一件事,编程中,最好使用英文搜索。原因主要有几点:
|
||||
|
||||
1. 编程和各种软件操作中,英文资料质量比中文资料和其他语言资料高,英文通用性还是更好些
|
||||
2. 因为翻译问题,英文的名词比中文准确通用
|
||||
3. 中文搜索中,分词系统不准会导致歧义,比如Google搜中文可能会搜不出几条有用结果
|
||||
3. 中文搜索中,分词系统不准会导致歧义,比如 Google 搜中文可能会搜不出几条有用结果
|
||||
|
||||
如果你英文不好,用百度翻译或者搜狗翻译,足够了。
|
||||
|
||||
|
|
@ -44,7 +46,7 @@
|
|||
|
||||
我们需要提炼问题,确定我们到底需要解决什么问题。
|
||||
|
||||
例如,我想知道vcpkg如何集成到工程上而不是全局中,那么搜索 `vcpkg如何集成到工程上而不是全局中` 这种长句可能无法找到相关的结果,最好是拆分成单词,`vcpkg 集成到 工程 全局` 这样的搜索。其实这里只是举个例子,针对本条其实都能搜索出相关信息,但是越具体的问题,机器分词越可能出问题,所以最好是拆分关键字,使用词组或者断句来进行搜索。
|
||||
例如,我想知道 vcpkg 如何集成到工程上而不是全局中,那么搜索 `vcpkg如何集成到工程上而不是全局中` 这种长句可能无法找到相关的结果,最好是拆分成单词,`vcpkg 集成到 工程 全局` 这样的搜索。其实这里只是举个例子,针对本条其实都能搜索出相关信息,但是越具体的问题,机器分词越可能出问题,所以最好是拆分关键字,使用词组或者断句来进行搜索。
|
||||
|
||||
### 替换关键字
|
||||
|
||||
|
|
@ -52,20 +54,21 @@
|
|||
|
||||
### 高级搜索
|
||||
|
||||
普通搜索引擎一般都支持高级搜索,包括 google,bing,百度,ecosia,等等,大部分都支持,不过可能语法不同,一般通用的表示:
|
||||
普通搜索引擎一般都支持高级搜索,包括 google , bing ,百度, ecosia ,等等,大部分都支持,不过可能语法不同,一般通用的表示:
|
||||
|
||||
* 精准匹配 用双引号括起来,比如搜索 线性代数,可以在输入框内输入 "线性代数"
|
||||
* 不包含关键字 用 - 减号连接关键字
|
||||
* 包含关键字 用 + 加号连接关键字
|
||||
* 搜索特定文件类型 filetype:pdf 直接搜索 pdf 文件
|
||||
* 搜索特定网址 site:stackoverflow.com
|
||||
* 精准匹配: 精准匹配能保证搜索关键词完全被匹配上,一般是用双引号括起来
|
||||
* 比如搜索线性代数,可以在输入框内输入 "线性代数",搜索引擎将只匹配完整包含 “线性代数” 的页面,而不会搜索拆分成线性和代数两个词的页面
|
||||
* 不包含关键字: 用 - 减号连接关键字,用于排除某些干扰词
|
||||
* 包含关键字: 用 + 加号连接关键字
|
||||
* 搜索特定文件类型: `filetype:pdf` 直接搜索 pdf 文件
|
||||
* 搜索特定网址: `site:stackoverflow.com` 只搜索特定网站内的页面
|
||||
|
||||
一般可以参照网站说明,比如百度可以参照 [高级搜索](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) ,Bing 可以参照 [高级搜索关键字](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1) 和 [高级搜索选项](https://help.bing.microsoft.com/apex/index/18/zh-CHS/10002)
|
||||
一般可以参照网站说明,比如百度可以参照 [高级搜索](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) ,Bing 可以参照 [高级搜索关键字](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1) 和 [高级搜索选项](https://help.bing.microsoft.com/apex/index/18/zh-CHS/10002)。
|
||||
|
||||
|
||||
#### GitHub 的高级搜索
|
||||
|
||||
可以直接用 [高级搜索页面](https://github.com/search/advanced) 进行搜索,也可以参照 [Github查询语法](https://zhuanlan.zhihu.com/p/273766377) 进行查找,简单说几个:
|
||||
可以直接用 [高级搜索页面](https://github.com/search/advanced) 进行搜索,也可以参照 [Github查询语法](https://zhuanlan.zhihu.com/p/273766377) 进行查找,简单说几个:
|
||||
|
||||
* `in:name <关键字>` 仓库名称带关键字查询
|
||||
* `in:description <关键字>` 仓库描述带关键字查询
|
||||
|
|
@ -78,41 +81,41 @@
|
|||
* `language:java <关键词>` 仓库语言为 Java 的带关键字查询
|
||||
* `user:<用户名>` 查询某个用户的项目
|
||||
* `org:<组织名>` 查询某个组织的项目
|
||||
这些可以混合使用,也可以先查找某一类的 awesome 仓库,然后从 awesome 库里找相关的资源,github 里有很多归纳仓库,可以先看看已有的收集,有时候会节省很多时间
|
||||
这些可以混合使用,也可以先查找某一类的 awesome 仓库,然后从 awesome 库里找相关的资源,github 里有很多归纳仓库,可以先看看已有的收集,有时候会节省很多时间
|
||||
|
||||
### 更多技巧
|
||||
|
||||
使用中,实际上我会去特定网站找一些问题:
|
||||
|
||||
* 如果是语言本身相关,比如c++/Qt/OpenGL如何实现什么功能,可以直接加上 site:stackoverflow.com
|
||||
* 如果是具体的业务/开发环境或者软件相关,可以先在BugList、IssueList,或者相关论坛里先找一下,比如Qt的问题就可以直接去Qt论坛,QGis或者GDAL相关问题可以在stackExchange里去搜
|
||||
* QQ群也是一个提问的地方,但是需要你提的问题有意义,否则大部分人不会回你,而且QQ群回复并不及时。
|
||||
* 知乎专栏、简书、博客园、CSDN中有大量中文笔记,这些都是别人嚼烂了的东西,基本是别人踩坑的经验
|
||||
* 如果是语言本身相关,比如 c++/Qt/OpenGL 如何实现什么功能,可以直接加上 `site:stackoverflow.com`
|
||||
* 如果是具体的业务/开发环境或者软件相关,可以先在 BugList 、IssueList ,或者相关论坛里先找一下,比如 Qt 的问题就可以直接去 Qt 论坛,QGis 或者 GDAL 相关问题可以在 stackExchange 里去搜
|
||||
* QQ 群也是一个提问的地方,但是需要你提的问题有意义,否则大部分人不会回你,而且 QQ 群回复并不及时。
|
||||
* 知乎专栏、简书、博客园、 CSDN 中有大量中文笔记,这些都是别人嚼烂了的东西,基本是别人踩坑的经验
|
||||
|
||||
### 关于百度
|
||||
|
||||
大部分编程人都会告诉你别用百度,用Google或者Bing国际版,但是Bing基本是个残废,Google需要科学,如果真的需要,可以使用Ecosia、Yandex之类的搜索引擎。而且中文搜索来说,百度可能还真是最好的。
|
||||
大部分编程人都会告诉你别用百度,用 Google 或者 Bing 国际版,但是 Bing 中文搜索的准确率并不高, Google 需要科学上网,如果真的需要,可以使用 Ecosia 、 Yandex 之类的搜索引擎。而且中文搜索来说,百度可能还真是最好的。
|
||||
|
||||
百度的问题主要在于排序算法,可能两页都没啥对的内容,但是收录比Bing还是好一些的,甚至比Google好。从数据库来说,百度比google和Bing收录的中文内容要多,如果你碰到的时中文相关的问题而且确实找不到相关内容,那么就用百度,搜索引擎是工具,能用好用才是王道。
|
||||
百度的问题主要在于排序算法,可能两页都没啥对的内容,但是收录比 Bing 还是好一些的(百度以前并不遵守 robots.txt ,会抓取所有页面,所以有些个人网站甚至专门对百度做了屏蔽),甚至有时候比 Google 好。从数据库来说,百度比 Google 和 Bing 收录的中文内容要多,如果你碰到的时中文相关的问题而且确实找不到相关内容,那么就用百度,搜索引擎是工具,能用好用才是王道。
|
||||
|
||||
## 代码搜索
|
||||
|
||||
我们除了搜索引擎查找问题,还有可能会搜一些代码,可能是自己写的,也可能是项目中的,下面推荐一些工具:
|
||||
|
||||
代码检索有两种,第一是本地的代码检索,第二是要写个啥算法,需要在网上搜索
|
||||
代码检索有两种,第一是本地的代码检索,第二是要写个啥算法,需要在网上搜索
|
||||
|
||||
### 本地代码搜索
|
||||
|
||||
* ACK 或者 ACK2,老牌搜索工具,perl 写的
|
||||
* ACK 或者 ACK2,老牌搜索工具,perl 写的
|
||||
* The Silver Searcher c 实现的
|
||||
* The Platinum Searcher go 实现的
|
||||
* FreeCommander 自带的搜索,如果是固态硬盘速度还不错
|
||||
* IDE 自带的,搜索有些时候并不太好用
|
||||
* FreeCommander 自带的搜索,如果是固态硬盘速度还不错
|
||||
* IDE 自带的,搜索有些时候并不太好用
|
||||
|
||||
### 开源代码搜索
|
||||
|
||||
* [Searchcode](https://searchcode.com) 搜索开源代码,速度比较快
|
||||
* [一行代码](https://www.alinecode.com) 国产的,有些国产工具很好用
|
||||
* [Searchcode](https://searchcode.com) 搜索开源代码,速度比较快
|
||||
* [一行代码](https://www.alinecode.com) 国产的,有些国产工具很好用
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue