[問題] 請教更高效的比對方法(已解決)

作者: shala (沙羅)   2019-03-03 00:27:48
我有兩個純文字檔
①Keyword.txt:待整理的關鍵字集
②NG.txt:已確定剔除的關鍵字集
兩個檔案都是每行一個關鍵字,各約1000行
我的工作是把Keyword.txt和NG.txt比對,如果Keyword.txt中的關鍵字未收錄在NG.txt裡
,則寫入Temp.txt
我的做法是把NG.txt的內容存成字典,然後將Keyword.txt中的關鍵字逐一與字典比對
但這個方法似乎效率不太好,花了1分鐘以上的時間才完成
所以想請教有無更高效率的做法?
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2019-03-03 00:31:00
你每讀一行NG就要開檔關檔一次? 另外不要用關鍵字當變數名其實是開檔兩次 temp.txt跟ketword.txt一次讀完NG & keyword檔案再一次寫到 temp.txt就好
作者: djshen (djshen)   2019-03-03 00:44:00
O(n)的東西寫成O(n^2)..
作者: TitanEric (泰坦)   2019-03-03 01:03:00
set difference
作者: edwar (海邊的野孩子)   2019-03-03 01:36:00
t=open 到 t.close 的縮排位置錯了, 要跟第一個for一樣
作者: nini200 (200妮妮)   2019-03-03 01:36:00
keyword集合A NG集合B A-B?
作者: edwar (海邊的野孩子)   2019-03-03 01:38:00
還有,存放NG關鍵字dict的變數名字最好換一下,比如用ng變數名字取dict可能會有問題
作者: lemon651 (小明)   2019-03-03 02:41:00
set difference 就解了阿既然你都知道有set或是dict這種數據結構 怎麼會想要每查一個字打開另一個檔爬一遍阿...我建議看一下你其他地方的文件讀寫是不是也是這種寫法,計算不花時間,io的時間不知道耗費了多少
作者: p8p8 (..)   2019-03-03 04:22:00
你的兩個for loop要在同一個indent啦~你現在這樣是nested loop,造成每讀一行NG.txt,就讀取一整個Keyword.txt一次,那當然效率很差本來應該是O(N+M)的,你的寫法是O(NM)差很多還有跟前幾樓說的一樣,用set即可不需用dictionary
作者: sean50301 ( (づ′・ω・)づ)   2019-03-03 16:40:00
ahocorasick
作者: utopia12 (......)   2019-03-04 04:43:00
Don’t use naive solutions, try elasticsearch
作者: shala (沙羅)   2019-03-04 17:44:00
可以解釋為什麼嗎?謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com