2018年11月6日 星期二

LINE 聊天機器人快速實作


LINE 聊天機器人的基本實作教學文章,網路上很多,所以我不打算寫詳細的基礎教學步驟。
聊天機器人的實作,大致有三個階段:
  1. 回聲機器人。(你說什麼,他回什麼)
  2. 特定關鍵字回應。(設定一些關鍵字,回應除了定型內容外,還可用爬蟲技術爬出資料再回應)
  3. 智慧對話。(會自然語言處理,了解語意後再做回應)
第三階段比較難,如果要深入的底層實作算法,那就更難。
不過也有一些公司,有提供自然語意分析API可調用,例如 Dialogflow 、 LUIS 等等。
但通常要不是對中文支持度不好,就是要自己寫訓練規則。

剛好在網路上看到一篇文章:

(二)為 Chatbot 增加 NLP 功能
(我這篇文的壓縮檔中 olami.py,取自上面文章代碼,感謝~)

這篇文章提到了 OLAMI  的 Open API,對中文支持度好,還有現成的 IDS 模組,都選用時,直接就可做大部份的智慧回應,還會回應天氣、匯率、股市、新聞、笑話等等。

所以本文就直接採用 OLAMI  的IDS 模組,快速作LINE聊天機器人智慧對話。

以下為作法:

  1. 下載此壓縮檔,解壓縮出一個資料夾 line_bot
  2. LINE聊天機器人的註冊與設定,還有之後要將程式部屬到 Heroku 的教學請看以下連結文章:
    Line Bot 教學
  3. 上面教學文章中:「設定範例機器人」的步驟8,要改成以下過程
    打開解壓縮的 line_bot 資料夾
    開啟config.ini 檔案,將 LINE 的 channel secretchannel access token 填入應填位置(不要弄混),存檔
  4. 再到 OLAMI 註冊,建立應用,得到 App Key App Secret,再填入上面提到的 config.ini 檔案中存檔,此外 OLAMI 應用的對話系統模組(IDS 模組)要全勾選儲存,請再見該篇文章:(二)為 Chatbot 增加 NLP 功能
  5. 再回到上面第2點的文章 Line Bot 教學,其中的「將程式推到 Heroku 上」第2點資料夾改為本文的 line_bot資料夾,其餘步驟都一樣。底下的「將 Heroku 與 Line 綁定」也務必仔細操作,最後「測試範例成果」至完成。

上面就是完成一個智慧對話(大致看起來)的 LINE 聊天機器人,其實本質上就是 OLAMI 的 IDS 模組的對話回應,只是界面移到 LINE 而已。

另外如果要設定關鍵字回應

如果會 python,可直接改壓縮檔的 app.py,在代碼的某段中如以下:

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    
    #下列為要加入的代碼
    if event.message.text == "你要設定的關鍵字":
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text="你要設定的回應"))
    #上面為要加入的代碼
    
    line_bot_api.reply_message(event.reply_token,TextSendMessage(text=Olami().nli(event.message.text)))




2018年9月5日 星期三

用搜尋查找抄襲


之前工作收到的稿件中,部分作者會抄襲網路上的內容,有時我會攫取文句當關鍵字,用google查找,並採用加雙引號的精準搜尋。
(在關鍵字前後加雙引號",只會返回和關鍵字「完全吻合」的結果。例如搜尋「用搜尋查找」和搜尋「"用搜尋查找"」,兩者結果不同,後者查找的結果數量一定會少很多。)

當攫取的文字達一定長度(至少7字以上),要出現一模一樣的字句時,機率是比較低的,文字越長機率越低
攫取較長文句後採用雙引號的精準搜尋,查找到網路上有相同文句,當此種情況出現多次時,就有抄襲的可能性。此時應可從有查找到相同文句的網路文章再做其他處比對。

由於不曉得稿件哪些地方有抄襲?所以要擷取搜尋哪些文句,只能碰運氣,若要從頭到尾人工處理,太沒有效率,於是就有了想寫這個程式的想法。


程式概念

  1. 首先將要查找的文章拆解為大量的字句組,以做為搜尋的關鍵字用。
  2. 從有加雙引號的精準搜尋結果,來判斷有無和網路上收錄的字句一模一樣。
    例如google搜尋"xxxxxx",如果找不到時,網頁開頭會顯示:
    找不到 "xxxxxx" 的結果。
  3. 程式跑完後,在查找的word中,之前有找到的字句都標上顯明顏色

我設計的拆解模式有兩種

第一種是依標點符號拆解。(標點符號包含全形半形,還有空白間隔等符號)。例如以下文句:「因為工作性質,需要校對錯別字,因此就想找找有沒有能幫忙自動校對錯別字的程式。」就會被拆解成以下三組:
"因為工作性質""需要校對錯別字""因此就想找找有沒有能幫忙自動校對錯別字的程式"

並且可自行設定長度最少幾個字才要搜尋,例如設定「7」字,則上面的"因為工作性質"只有6個字,就被淘汰,不列入搜尋關鍵字中。(因為字數太少,重複機率高,沒有太大的搜尋意義,所以長度不要設定太小)


第二種是逐字攫取模式,必須先設定每次要擷取幾個字。則會從「每行字」都擷取固定字數,但是是逐字更動擷取,不遺漏,直到該行結束。不好說明,請見底下範例:
例如:因為工作性質,需要校對錯別字。」為獨立一行,設定擷取7個字。
拆解結果為:(標點也算入字數)
"因為工作性質,"、"為工作性質,需"、"工作性質,需要"、"作性質,需要校"、"性質,需要校對"、"質,需要校對錯"、",需要校對錯別"、"需要校對錯別字"、"要校對錯別字。"
此種模式,整篇文章拆解下來文句一定很多,會使搜尋的工作量大為增加,以致程式要跑很久。

強烈建議,採用第一種模式即可,第二種只是提供另外的可能性,畢竟擷取方式不同,會多出許多搜尋的可能性,但通常情況第一種就夠用了。

爬取yahoo

程式採用爬蟲技術,一開始我想爬的搜尋引擎當然是google,後來測試了許久,代理也用了,還是沒辦法完美解決google的反爬蟲問題。(在短時間大量爬取google搜尋結果,一段時間後,程式會被擋ip,被拒絕服務,要隔天才會解除阻擋,不過我測試時阻擋是只阻擋該程式,不影響瀏覽器查詢使用google

最後我試著改用其他搜索引擎,發現yahoo也有加雙引號的精準搜尋功能,且反爬蟲的設定比google寬鬆許多,即使阻擋了,也很快解擋,因此此程式採用yahoo的搜索


使用過程如下

  1. 下載此程式,之後點擊程式  (12月10日更新程式)
  2. 依程式視窗的說明文字操作即可
  3. 程式主要適用於中文,並且須事先安裝word
  4. 查找的文章檔案,必須為word檔
  5. 基本上不用選擇使用代理,有測試過數萬字文章,都沒被擋

代理伺服器

  1. 通常情況不用使用代理yahoo搜索的反爬蟲還算寬鬆,除非使用過程中,有被阻擋,之後再考慮使用。
  2. 代理在此程式的用處,就是降低被yahoo搜索阻擋服務的機率,因為同一ip短時間大量請求服務,一段時間後可能會被阻擋。若使用代理,則程式可輪流使用不同ip請求。
  3. 若要使用,在程式視窗使用時,依詢問輸入操作。
  4. 代理檔須為txt的文件檔,代理檔中的內文為每行一個代理(至少2個可輪流),格式為  ip:端口,如下2個占2行:
    101.255.64.90:36127
    163.172.86.64:3128
  5. 代理網路上自己找,,請找「HTTP代理」、「高匿名」,嚮應速度盡量不要太慢,重點是網路上找的未必可以用,要自己測試,怎麼測試,可用瀏覽器或用程式測試。

另外注意事項

  1. 程式進行時,會顯示每次搜尋結果,由於程式代碼函數的設定因素,搜尋文句的順序不會依照文章順序
  2. 程式進行時,若沒跑搜尋結果,會顯示「HTTP狀態碼」,常見情況有以下:
    HTTP狀態碼為「200」時,可能是延遲太久,到跑狀態碼時才ok,此情況該次文句不會跳過,會進入下一次繼續搜尋。
    HTTP狀態碼為「400」時,是由於採用模式2時,當搜尋字句有「%」時,會造成網址搜尋方式的錯誤。我處理方式是下一次跳過該文句,也就是模式2時,此類文句被網路收錄的可能性被忽視。
    HTTP狀態碼為「999」時,是yahoo拒絕服務時的狀態碼,會擋ip一段時間,我測試時通常不會被擋太久,可休息一小時候再測試看看。如果多次出現此情況,下次可考慮使用代理,或切割文章長度為多個word檔,隔時間分次處理。
  3. 如果查找文章已被網路搜索引擎收錄,要查找是否有其他網站抄襲,用此程式是無法判斷的。
  4. 最後結果中,沒被高亮顯示的文字,不代表搜索不到,可能是被自己設定的字數限定給淘汰。
  5. 由於要降低被擋機率,yahoo搜尋引擎我不是只採用台灣yahoo,也輪流使用一些其他國家的yahoo搜索(採用的是搜尋中文後,結果和台灣yahoo差異不大的)。測試過程中,有出現極少部分是相同字句,在不同國家的yahoo,搜尋結果是不同的。因而造成顯明亮色字句,有可能是台灣yahoo無法找到的字句。



轉載請註明出處





2018年4月7日 星期六

多個word檔合併,保留格式


多個word檔合併成一個word檔時,有許多方法。
但很多方法有其缺點,尤其當多個檔案的版面格式不一致,合併後常常格式會跑掉。
另外當要合併的檔案很多時,方法不夠省力。
於是小弟寫了個小程式幫忙。

優點:


  1. 可批次合併大量word檔,操作快速簡單
  2. 保留每個檔案各自不同的版面格式
  3. 可依照自己想要的順序合併(依自己點選檔案的順序,不用改檔名)
  4. 每個檔案皆另起頁合併



使用方法:

  1. 下載此程式
  2. 點擊下載好的程式MergeFiles.exe
  3. 見程式開啟後的黑色視窗中的使用說明來操作

另注意:
  1. 此程式是採用個每word檔案合併時插入分節符號,以維持各檔案的格式
  2. 各檔案合併的頁首頁尾格式,會套用延續上一個檔案的頁首頁尾設定

轉載請註明出處



LINE 聊天機器人快速實作

LINE 聊天機器人的基本實作教學文章,網路上很多,所以我不打算寫詳細的基礎教學步驟。 聊天機器人的實作,大致有三個階段: 回聲機器人。(你說什麼,他回什麼) 特定關鍵字回應。(設定一些關鍵字,回應除了定型內容外,還可用爬蟲技術爬出資料再回應) 智慧對話。(會自然語言...