LearnRun
[Python 3] 문자열의 일치율 (1) 본문
import difflib
difflib.SequenceMatcher(None, string1, string2).ratio()
두 문자열이 얼마나 일치하는지 파악하고자 할 때 쓰인다.
나는 더미 파일을 상당히 많이 들고있고, 그 중에서도 유독 정리가 난감했던 파일이 예전 앨범업체에서 작업할때 받은 소스들이 중복된채로, 압축된채로 상당히 난잡하게 얽혀있던 것들이었다.
하지만 파일명은 해상도 정보를 제외하곤 그 소스가 내포하는 정보를 나타내고 있어서, 파일명의 문자열 유사도를 파악해서 우선적으로 다량의 데이터를 처리할 수 있었다.
예를들어, 찻잔에 고양이가 들어있는 사진 파일이 2개라면,
하나는 teacup-cat.png,
다른 하나는 cat-cup.png와 같은 식으로 수백개의 폴더와 압축파일에 흩어져 있는 셈.
from difflib import SequenceMatcher
def f(X, b):
ra = 0
str0 = ""
for i in range(0, len(b), 1):
str2 = b[i]
ratio = SequenceMatcher(None, X, str2).ratio()
# print(ratio)
if ratio > ra:
ra = ratio
str0 = str2
# print(str0)
# print(ra)
return str0, ra
glob이나 listdir로 경로 내 파일을 모조리 스캔한 후 (와일드카드를 쓸 수 있어서 glob이 더 좋았다.)
pop으로 리스트 첫 인자를 떼와 남은 리스트와 대조하는 방식을 사용했다. ( X = string, b = list )
파일이 상당히 많아 멀티프로세싱을 사용했지만, 너무 길어지므로 다른 포스팅에서 글을 쓸 예정...
단일 프로세스로는, 약 11초 정도 걸렸다.
다중 프로세스로 작업했을때는 2초에서 3초.
Comments