대충 눈으로 보기엔 동영상 폴더에 있는 파일리스트를 정렬해 가져와 그대로 자막리스트에 붙여넣는 것으로 생각할 수 있다.
하지만 이 프로그램은 참으로 쓰잘데기 없이 더럽게 복잡하고 구현하기 조잡한 알고리즘을 사용한다.
그 방법은 다음과 같다.
첫 번째로 StrCmpLogicalW와 IComparer를 이용해 동영상 파일과 자막파일 이름들을 정렬한다.
(전체과정은 그냥 여기서 파일 숫자만 같으면 붙여넣기하면 끝난다.)
두 번째로 자막과 동영상파일들의 각각 동일하지 않은 패턴이 있는지 검사한다. 네 번째에서 자세히 설명한다.
세 번째로 자막 파일의 모든 파일의 확장자가 같은지 검사한다.
일단 확장자가 다른게 있다면 이 프로그램에선 변형시키지 않는다. 왜 이렇게 설계했을까
네 번째로 동영상과, 자막파일의 토큰들을 분리한다. 여기서 말하는 토큰은 숫자, 문자, 기호가 있다.
가령 Rakudai 10 s.smi라는 이름은 문자+기호+숫자+기호+문자+기호+문자 패턴 토큰들로 나누어진다.
두 번째에선 단순한 패턴 토큰들의 일치여부만을 따지고, 여기선 그 토큰들을 분리한다는 것이 차이점이다.
그 다음 모든 분리된 토큰들에 대하여 다른 부분을 찾는다.
가령 Rakudai 10 s.smi, Rakudai 09 s.smi 에선 숫자 토큰들이 다르니 토큰 분석알고리즘은 이 부분들을 찾아낼 것이다.
특별한 방법은 없다. 첫 번째 패턴 토큰들을 한 곳에 박아놓고 다른 부분을 찾는 것이다.
그다음, 틀린 패턴 중 최대인 항목을 찾는다.
다섯 번째. 이제 자막 패턴 토큰들 중 가장 많이 다른 한 토큰 배열을 고르고, 동영상 패턴 토큰들 중 가장 많이 다른 한 토큰을 제외한 배열을 고른다.
전자를 후자에 넣는 작업을 파일 개수만큼 반복한다.
이제 메세지 박스를 띄우고 사용자의 응답을 받아 파일이름을 바꾼다. 최대 25개 까지만 표시된다.
--------------------------------------------------------------------------------------------------------------------------------
이 프로그램은 vb.net으로 작성되었으며 그 소스는
https://github.com/rollrat/subtitle-renamer 에서 얻을 수 있다.
참고로 간단했던 복사 알고리즘은 프로그램을 다만들고 다듬는 과정중에 생각이 났다.
이전에 Renamer Tool의 아이디어를 빌려와 만든 것인데 그것 때문에 넓게 보지 못한 것이 화근이 된 것같다.
조금 덧붙이면 이 알고리즘의 핵심인 네 번째 부분의 토큰 분리-합치기는 사진에서 보이는 것과 같이 마지막 파일의 문자 토큰 중 RAW RAW ... END의 순서를 갖는 형식을 처리하기 위해 어렵게 구현했던 것이다.
결국 쓸모 없었다.
저도 예전에 밝힌 적 있지만, 다양한 기능을 지원하는 이름바꾸는 프로그램을 제대로 만들려면 엄청난 실력을 갖추어야 합니다. 저도 10년 전쯤 한 때 이 거 구상하느라고 며칠간 행복한 명상에 잠긴 적이 있습니다. 절대 간단한 문제가 아니더군요.
이 프로그램을 완벽하게 만들어낸다면 그 사람은 인류 역사에 아주 큰 획을 그은 인물이 될 것입니다. 사용자들은 가끔 엄청난 기능들을 요구하곤 합니다. 가령, 식물이름과 동물이름들이 모두 섞인 폴더에서 "식물_숫자" "동물_숫자" 형식의 이름을 바꾸고 싶다는 등 아주 엄청난 기능들을 요구하더 군요. 심지어 모든 연예인 사진을 때려넣고 사진의 얼굴을 분석해 자동으로 파일이름을 맞출 수 있는 프로그램을 요구하기도 합니다
맞아요 그런 것들 다 구상하다 보니 이게 엄청난 프로젝트란 걸 알고 기겁했었습니다.
예를 들어 서수를 자연수 너머 실수, 허수로 확장한다던지 하면 이걸 처리하기 위해 울프람 알파 급은 되야 하고...
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 요구사항 오졌다
언어 인지를 위해서는 각 언어 인공지능 구현에... 정규화하려고 해도 시소러스, 온톨로지 기능 붙이고, 파일 종류나 원래 이름 인식하려면 영상, 오디오 딥러닝에...
정확한 정의가 있어야 뭘 만드는데, 그런게 결여되어있는 시점부터...
서수 패턴도 다양함 1 2 3 (1) (2) (3)
http://gall.dcinside.com/board/view/?id=programming&no=539086
특수문자 댓글로 안써져서 링크 올림
사람들의 경험에 의해 모든 패턴들이 만들어 진다고 봅니다. 그 경험의 산물을 모두 갈아 넣으면 가능성은 희박하지만 있을 것 같네요