<a href="#%E5%89%8D%E8%A8%80">前言</a>
<a href="#%E6%A8%A1%E5%9D%97%E5%8C%96">子產品化</a>
<a href="#%E7%99%BB%E5%BD%95%E6%A8%A1%E5%9D%97">登入子產品</a>
<a href="#%E5%8D%9A%E5%AE%A2%E6%89%AB%E6%8F%8F%E6%A8%A1%E5%9D%97">部落格掃描子產品</a>
<a href="#%E5%8D%9A%E5%AE%A2%E8%AF%A6%E6%83%85%E6%A8%A1%E5%9D%97">部落格詳情子產品</a>
<a href="#%E6%90%9C%E7%B4%A2%E6%A8%A1%E5%9D%97">搜尋子產品</a>
<a href="#%E6%BC%94%E7%A4%BA">示範</a>
<a href="#%E6%A1%88%E4%BE%8B%E4%B8%80">案例一</a>
<a href="#%E6%A1%88%E4%BE%8B%E4%BA%8C">案例二</a>
<a href="#%E6%80%BB%E7%BB%93">總結</a>
之前學過一點點關于全文檢索相關的技術,當時使用的是Java語言,Lucene和compass架構。有興趣的話可以參考下面的專欄連結
<a href="http://blog.csdn.net/column/details/lucene-compass.html" target="_blank">http://blog.csdn.net/column/details/lucene-compass.html</a>
然後現在用的是Python了,是以需要疊代一下。網上搜尋了下,相關的還真不少,還有pylucene,但是相比較而言,whoosh更為出色。那今天就用它吧。
安裝它也比較簡單。
這樣就可以了。
目标: 對自己的部落格進行“站内搜尋”,來稍微改善一下CSDN站内查找的缺點。
最近越來越喜歡把任務子產品化了,這樣單個的功能也比較容易管理,而且整合的時候對內建測試也比較友善。或者添加新功能,重構,都很友善。
針對上面的需求,我這裡設計了幾個小子產品,待會逐個進行解釋。
登入子產品是有點必須的,這是因為在擷取部落格詳細内容的時候,需要有一個已經登入的session會話來支撐,否則拿不到資料。
先前也寫過一點關于CSDN模拟登陸的例子,當時完成的功能有
模拟登陸
頂、踩文章
發評論
擷取部落客詳情
為了不讓别有用心的人拿代碼做壞事,我這裡就不貼代碼了。技術方面歡迎私信,或者在文章下面發評論。
下面把模拟登陸的代碼補上。
部落格掃描這個子產品不需要登入狀态的支援,完成的功能是掃描部落客的文章總數,以及每個文章對應的URL連結。因為接下來會用它來擷取文章的詳情。
關于部落格詳情,我倒是覺得CSDN做的真不賴。而且是json格式的。話不多說,看下登入狀态下能擷取到的部落格的詳細内容吧。
這下思路很清晰了,就是要擷取标題,URL,标簽,摘要描述, 文章正文内容。代碼如下:
搜尋子產品是今天的核心,使用到的庫就是whoosh, 真的是很貼心的一個庫,而且文檔詳細,簡單易懂。我這蹩腳的英文水準都可以,你也一定可以的。
預設的文本分析器是英文的,是以為了更好的照顧到中文相關,就得處理一下中文分詞,于是在網上抄了一個,不過效果不咋地。
好了,差不多就是這樣了。下面來看下運作的效果。
首先看下對于DBHelper這個關鍵字的搜尋, 因為文章過多的話計算也是比較慢的,是以就爬取前幾篇文章好了。
代碼運作結果如下:
不難發現,本人部落格隻有前兩篇是關于DBHelper 的文章,是以命中了這兩個document。看起來還不錯。
下面再來試試其他的關鍵字。比如Python。
然後依然來看下運作的效果。
命中了4條記錄,命中率也還算說得過去。
最後來總結下。關于whoosh站内搜尋的問題, 要向更高精度的比對到文本結果,其實還需要很多地方優化。QueryParser 這塊其實還有很多需要挖掘。
另外高亮顯示查找結果也是很友善的。官方文檔上有詳細的介紹。
最後一步就是中文問題,目前我還沒有什麼好的辦法來提高分詞和命中率。