2014年11月22日 星期六

[R] 當Text Mining專案完成度達到99%之後...


       先前接下了一個號稱完成度99%的專案,只剩下一個小bug解決好就可以上線...故事由真人真事改編.故事背景是有個利用R來做text mining(文本分析)的專案要上線,這個專案使用了tm package和segmentCN兩個標準的配備(可以參考:[R] TEXT MINING(文字探勘、文本分析練習)).原本剩下這1%的問題在於開發環境和上線環境不同,導致結果的不一致.這個問題在當初我就有寫篇專文[R] tm package version 0.6 大解析(text mining文字探勘套件)來處理這個問題(使用了非常瑣碎的爛方法...有更好的方法請跟我說Orz).今天的故事是從這邊接下去開始...

  • 套件版本控管:當初解決完套件問題後,想要重新更新上線環境的套件版本以保持版本一致,但是因為上線環境資安控管很嚴格,需要複雜的程序才能更新以及安裝軟體,但是R大家也知道常常會需要使用不同的套件,不太可能不同專案用了不同套件就要提需求申請,這樣不論是我或是負責人或是專案時程都非常的麻煩,所以我就使用Packrat套件來幫我打包套件.Packrat會在建立專案時就紀錄所使用的套件,並將相關套件搬到專案目錄下,只要在程式中設定好讀取套件的路徑(使用.libpath())就可以將專案以及套件整包發佈出去,確保開發環境和上線環境版本的一致性.
  • 自訂詞庫無法使用:segmentCN可以自訂詞庫,在使用內建的安裝詞庫功能後,會將使用者詞庫重新編譯放到套件目錄中.這個也是在開發環境沒有問題,但是丟到上線環境卻一直出狀況,會很多內建詞庫的詞無法解析出來的.原本以為是編碼問題,但是改了編碼也無法解決,最後只好暴力解法:將在本機透過segmentCN安裝並編譯好的詞庫直接放到上線環境中對應的路徑下,這就解決了(至今仍不知道為何)
  • 讓R吐log:因為在上線環境中,我們是透過排成工具呼叫Rscript,無法直接在上線環境中以console的方式執行R.為了debug,了解R是在哪個步驟掛掉,利用了warning function讓R在幾個可能出現錯誤的步驟後面都吐一個log來檢視每個步驟的正確性.
    然後下面這些狀況跟R無關,但是是在text mining專案過程中可能容易遇到的狀況
  • 目標網站改版:text mining的來源通常是一些網站,會透過爬蟲程式將內容下載下來.因為我們很有良心,所以通常不太會被ban,反而最怕遇到的是網站改版.一改版沒注意,分析結果就出現outage,得馬上重新修改解析程式.
  • 一些資料流程的設定:因為不是從頭到尾使用R來爬文+解析+mining,而是用好幾個不同工具串接在一起,這時候程式與程式之間資料的input,output就要特別注意.而且常常來源是多個網站的時候,也要留意不同table之間的一致性.
  • 爬文設定:間隔時間,如何設定一次爬多少,如果機器掛掉怎麼辦,多久發報表都是很瑣碎但是很基本要tune的事情...
  • 其他使用者或是老闆的要求...反正工作就這樣大家都知道,規格一開始就要確認好,不然苦得是自己.
        專案上線比單純開發還要複雜許多,記錄下來以後遇到相關的狀況比較知道從何處開始解.