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無法找到的字句。



轉載請註明出處





沒有留言:

張貼留言

LINE 聊天機器人快速實作

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