https://arca.live/b/programmers/9294182

어찌보면 이 게시글의 연장선 임...


다운로드 한 음악파일들과 기존 가지고 있는 음악파일들 중복된 것들 제거 하고

이름 비슷하게 다듬는 것이 목표



저 글에서 이런 질문을 했었거든

이 질문에 대한 답변



이렇게 관련 모듈 다운 받으면 손 쉽게 해결 가능

아 .... 다시한번 알려주셔서 감사합니다 (__)


그런데 결국 난 저 관련 모듈을 다운받지 않았다

그냥 좀 귀찮지만 내 손으로 하나하나 골라냄 ....


그 뒤로 잊고 있다가

어제 유튭 영상 중에서 문자열 막 바꾸고 하는 관련 된 영상을 봤거든

replace() 쓰면 쉽게 해결 되지만

이거 안쓰고 하는 방법 + 응용해서 저 함수가지고도 할 수 없는 조건부 문자열 바꾸기

신기하고 재미있더라고 그렇게 하루 끝났는데


다음날인 오늘 일 하다가 갑자기 생각 나더라

"음악 파일 모든 문자 하나하나 싹 다 비교해보고 카운터 세보면 가능하지 않을까?"

해서 한번 도전 해 봄


한글변수는 미안하다 ....


어찌저찌 작동은 잘 하더라


이런 식으로 작동 하게끔 한 것....


그리고 또 만들어진 거



비교할문자 와 비교 당할 전체문자 가지고

첫 번째 함수 써써 True 면 카운트 하나씩 세고

비교할문자 와 전체문자 둘 다 첫 번째 함수 이용해서 하나씩 지우기


놀랍게도 잘 작동 한다!!!

"가" "나" 라는 각 하나의 단어가

"다나라마가" 라는 단어 안에 전부 포함 되어있어서  100% 비슷


 


 "가" "나" 가

"다나라마가" 라는 단어 안에 전부 포함 되어있어 있지만

두번 째 "가" 라던가 "하" 가 없어서 3개 중 2개만 비슷


오오.......


이제 음악 하나하나씩 비교해보면 가능하지 않을까????



이건 기존에 가지고 있던 음악 파일 중 7개만 임의로 가져온 것



실험을 위해 파일이름을 조금씩 바꿈



대충 이런식으로

이름이 바뀐 7개의 파일이 있는 "받은음악" 폴더

음악파일 500여개 들어있는 "음악" 폴더 가지고 서로 비교 해 봄


파일에 공통적으로 있는 " - " 이랑 .mp3 지우고 해봄



오 ..... 나름 만족 함

500여개의 모든 파일을, 그것도 한글자 한글자 하나하나 다 비교하는거라서 엄청 느릴 줄 알았는데 생각보다 빨랐고


아주 비슷한 것들만 골라내고 싶으면 퍼센트를 높게

좀 많이 달라도 어쨌든 걸러내고 싶으면 퍼센트를 낮게

해서 이용하면 될거 같음!!!!


근데 사실은 이래도 못쓰겠다 ....


퍼센트를 낮게 잡으면

같은 가수가 부른 다른 노래도 다 걸러질 거 같고

그렇다고 퍼센트 높게 잡으면 위 스샷 처럼 7개 중 두개는 안걸러 진거 처럼

결국은 내 손으로 일일히 다시 걸러야 한다....


뭐 어쨌든 ..... 요약하면

오늘 갑자기 퇴근 하자마자 밥 대충 먹고 계속 붙잡아 봤는데 생각보다 재미있었음



...



def 첫글자_지우기(한글자전체문자):
    """
    한글자 = 지울 문자, 하나의 글자만 입력\n
    전체문자 = 전체 문자, 한글자와 비교 후 지움\n
    리턴값 = 지워진 전체문자, 지우면 True 없으면 False
    """
    확인용 = False
    new_전체문자 = ""

    for i in 전체문자:
        if 확인용 == False and i in 한글자:
            확인용 = not 확인용
            new_전체문자 += ""
        else:
            new_전체문자 += i

    return new_전체문자, 확인용

def 비교(비교문자전체문자int=70):
    """
    비교문자 = 전체문자 와 비교 할 문자\n
    전체문자 = 전체문자\n
    int = 몇% 까지 정확한가\n
    리턴값 = 몇% 인가, 숫자로
    """
    비교문자_출력용 = 비교문자
    전체문자_출력용 = 전체문자
    글수 = len(비교문자)
    count = 0
    for _ in range(len(비교문자)):
        for i in 비교문자:
            비교 = 첫글자_지우기(i, 전체문자)
            if 비교[1] == True:
                count += 1
                전체문자 = 비교[0]
                비교문자 = 첫글자_지우기(i, 비교문자)[0]
                # print(전체문자)
                break

    if count/글수*100 >= int:
        print()
        print(비교문자_출력용)
        print(전체문자_출력용)
        print(str(count/글수*100) + "% 만큼 비슷")
        return count/글수*100
    else:
        return 0