LearnRun

[Python 3] 문자열의 일치율 (1) 본문

메모장

[Python 3] 문자열의 일치율 (1)

PROMPT_ 2019. 8. 26. 18:04

null

 

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