热爱互联网

Golang Search Engine

这就是哥的毕设,尽管很水,但是不得不写。
大四第一学期开始学的go语言,然后寒假把这个基本写好了,断断续续写了一个月,爬虫还是去表哥那里蹭网测试的。。。
这两天准备写论文了,顺便把代码整理了一遍,目前web界面有点丑,就一个table,一个button,当然遵循MVC模式,到时候把样式改好看的就行了。

记录下比较有意义的地方:

爬虫:整个代码才2500余行,spider就占了500多行,当然麻雀虽小,但五脏俱全,可以配置爬虫的各个参数,比如抓取指定网站下的url, 即使爬虫意外关闭,也可以重新启动从上次断开的地方开始爬取…。 BFS搜索,多个goroutine下载,一个goroutine负责将数据写入磁盘。原理很简单,不过从这个spider中非常能感受到go语言的 channel 和 goroutine 的优美 — 并发之美。

提取网页正文和标题通过正则表达式搞定。

分词:采用双向最大匹配, 写棵 trie 就行了,然后需要记录下状态转移。一开始是用trie去分词的,今天装逼的写了个double array trie去替换掉trie 来优化内存,妈蛋的发现内存差不多, golang里面的map内部是一个非常优化内存了的hash算法,哥的trie就是用map去记录子节点,难怪和double array trie消耗的内存差不多。

关键词提取及索引:哥一开始从人民网上下载了5万多个网页,可以看做一个小型语料库了。然后去计算每个词的逆文档频率(Inverse Document Frequency,缩写为IDF),将这些IDF保存到数据库留作后用。对爬虫下载下来的网页,计算其TF-IDF值,索引之,差不多就完事了。。目前的策略是标题的关键词的权重是正文关键词的数倍。TF-IDF与余弦相似性的应用

数据库是sqlite3,sqliteadmin这个可视化工具不错,方便查看sqlite。当然也可以改用其他数据库,改一个参数就好了。
web方面用的是net/http自带的服务器,template引擎还算凑合。
顺便还写个本地文件搜索,丫的特简单,几十行代码。。

不说了,贴代码:
https://github.com/gansidui/gose

One Comment

  • Posted 01/03/2019 at 01:10 | Permalink

    Inca Trail permits because of these months sell out 5 to 6 months upfront, if this is actually the only time
    when you are able go Peru, you’ll desire to book when the new year begins.
    Full board hotel along the way to Tibet side Zhangmu, Nyalam & Tingri (bed & breakfast, Lunch, dinner)
    5. Whereas in Sariska you can enjoy the wildlife
    with the Aravalis in the background which makes it
    more beautiful experience for that visitors who come to go to the park

Post a Reply to harga hp terbaru 取消回复

Your email is kept private. Required fields are marked *