覺得有點意思,拿出來和大家一起研究下,歡迎提供更好的建議。

因為爬x手的時候,網頁已經沒了,只能自食其力;用unrar(rarlab上下的,apt-get里的太古老)獲得rar內的文件名,用zipfile模塊列zip包的,抓的時候直接把返回的內容插到數據庫了,沒分析,因為沒那麼多時間去想算法,還是先把dirty data擼下來再說。

然後開始正文了www

按照這麼一個基本思想,字幕文件名除了擴展名以外,其餘部分和視頻文件是一樣的。如果壓縮包裏面只有一個文件,那麼直接就是它去掉擴展名就好了;但是如果有多個版本的字幕(比如eng,GB,BIG5等),那就需要一個字符串最大匹配的算法。←為了裝B取的名字

我是這麼想的,首先需要一個最小單位來比較,不然一個一個字匹配,加上選擇排列的時間複雜度,估計要跪;所以要減少最小單位的個數。因為大部分文件名用空格、「-」、「_」、「][」(二次元一般比較喜歡用中括號)。找一個能把文件名切割成最多的快的分隔符出來:

分得越多當然就匹配的粒度更細嘛。

分割完之後,壓縮包里的各個文件名都變成了一個個列表

然後就是每個單位做一個排列組合,如果有超過閾值的文件的某一個單位相同,則認為這是共同部分

getCaptital就是把第一個變成大寫的函數。這是考慮到有些魂淡一會首字母大寫一會首字母不大寫造成的。不直接全部轉小寫再比較,是因為要盡量保持文件名的原始性,比如有些就是小寫字母開頭的名字,那不就坑爹了。

這裡設置的閾值是30%的排列項一樣就認為這個單位是共同部分。你覺得很低嘛,其實不低的呀,你想要是逗比字幕組在裏面放一個招人.srt那不是傻掉了。

當然也要過濾擴展名。

啊呀好麻煩我不寫了你們看代碼吧