'비슷한 이름의 파일'을 찾는 방법
글쓴이: klara / 작성시간: 목, 2008/04/03 - 5:34오전
윈도우의 KMP나 곰플레이어를 보면, 파일을 열때 비슷한 이름의 파일을 찾아서 재생목록으로 넣어주는 기능이 있습니다.
저도 제 프로그램에 한 파일을 열때 같은 경로내의 비슷한 이름의 파일을 자동으로 찾아서 열어주는 기능을 넣을려고 하는데요, 이 '비슷한 이름의 파일'이란건 어떻게 찾으면 좋을까요?
KMP도 그렇지만 특히나 곰플레이어는 진짜 신통하게도
시리즈명 1화 처음시작.avi
시리즈명 2화 두번째.avi
이런식으로 되있는 경우도 알아서 추가해주던데요...
이래저래 생각해봤는데, 생각해봐야하는 경우가 너무 많은듯 하여서 어떻게 손을 대야할지 모르겠네요.
'비슷한 이름의 파일'을 찾기위한 방법이나 아이디어가 있다면 알려주시면 감사하겠습니다.
Forums:
correlation을 구해보고
correlation을 구해보고 특정 수치보다 높게 나오는걸로 판단하는건 어떨까요?
답변감사합니다. 말씀
답변감사합니다.
말씀하신 correlation가 통계학에서 분산, 공분산등과 함께 나오는 상관을 말씀하시는 건가요...?
숫자로된 자료라면 몰라도, 문자열에서 상관을 어떻게 구해야할지 감이 안오는데요.. 혹시 correlation를 구하기위한 공식같은게 있나요...?
그냥 생각없이
그냥 생각없이 적었는데... 생각해보니 correlation으로 하기에는 문자열이 많이 짧은거 같네요. 잘 될꺼같지도 않고..
보통 제목이 파일이름의 앞부분에 있으니깐 그냥 앞에서부터 같은 문자가 몇개 있느냐... 이정도 갓고 판단하는게 좋지 않을까요?
숫자가 나오는것을
수가 나오는것을 기준으로 그 앞의 부분만
특수문자, 공백 등을 제거한 채 비교하면 어떨까요?
수는 최대한 뒤쪽을 기준으로 시작해서,
시리즈번호가 아닌것 같으면 하나 더 앞으로.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
https://xenosi.de/
답변감사합니다. 박현
답변감사합니다.
박현우님과 송효진님 두분모두 앞쪽을 비교한다고 말씀하셨는데, 제가 고민하는 것 중에, 꼭 공통된 부분이 앞쪽에 있으란 법은없지않나? 라는 것입니다.
저도 (전부일지도 모르지만) 대부분 공통된 부분은 앞쪽을 봐왔지만, 그래도 일반성이 결여되는 듯한 생각이 들어서요...
일단은 두분이 조언해주신대로 앞쪽 비교하는 걸로 만들고, 차후에 다른 방법을 알게되면 개선하도록 해봐야겠습니다.
특수문자, 숫자 를
특수문자, 숫자 를 기준으로 split 해서 나온 단어들의 앞 두글자를 비교하여
전체단어 : 중복단어 의 비율이 10:4 이상인 파일명.ㅎㅎ
정렬은 우측에 나오는 수 두개까지 한정한다.
예)
프리즌 브레이크 시즌 3 22화.avi -> 프리,브레,시즌,화
석호필]프로즌_브레이크_시즌_2_2_xvid.wmv -> 석호,프로,브레,시즌,xvid
중복: 브레,시즌
비율 9:4 (4.5:2)
순서
2 2 석호필]프로즌_브레이크_시즌_2_2_xvid.wmv
3 22 프리즌 브레이크 시즌 3 22화.avi
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
https://xenosi.de/
오...그런 방법도
오...그런 방법도 있군요. 그런데 그 비율을 몇이상을 비슷하다고 할지가 중요할 것 같은데 혹시 특별히 10:4라고 정하신 이유가 있으신가요?
그냥 예문 만들어
그냥 예문 만들어 놓고 걸리는 비율을 생각해 본것입니다.
'편집거리'도 좋아보이기는 하는데,
제 예문같은 경우는 편집거리로 하면 같은거로 안나올것 같습니다.
예문을 너무 잘 만든것 같아요.===3=3
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
https://xenosi.de/
유사한 단어를 찾는
유사한 단어를 찾는 알고리즘으로 편집거리(Edit Distance)라는 게 있습니다.
두 단어 사이에 삽입/삭제/변경해야 하는 거리를 계산하는 방법이죠.
예를들어 abcdefg와 abcdrfg가 있다면 e를 r로 대체하면 되게 되기 때문에 편집거리가
1이 되겠죠. 이런 방식으로 두 문자열의 유사도를 비교하는 방식입니다.
아마도 이 방식을 사용하지 않았을까 합니다.
인터넷에 찾아보니
인터넷에 찾아보니 이미 C++구현된 간단한 알고리즘들도 소개되어있네요.
한번 이용해보록 해야겠습니다. 감사합니다.
숫자로 앞뒤로
숫자로 앞뒤로 쪼갠다음, 처음 두개를 비교해서 앞쪽이 같으면 그 다음부턴 앞쪽이 같은 파일들을 찾고, 뒤쪽이 같은 뒤쪽이 같은 파일들을 찾도록 만들었습니다.
예를 들어 앨범 트랙처럼 경로가 .../앨범명/트랙번호. 노래제목.ogg 이런식의 경우는 파일이름으로 편집거리를 비교해보면 결국 .과 확장자외에는 전부 다르게 되어서 기대된 결과를 얻기 힘들어, 편집거리는 제외시켰습니다.
또 송효진님께서 알려주신 덩어리로 쪼개서 비교하는 방법도 마찬가지로 이런 경우에는 바른 결과를 얻기가 힘들듯구요...
도움주셨는데 안써서 죄송합니다-_-;;
혹시 또 다른 아이디어가 있으신분 계시면 더 답변을 받아보고 싶어서 완료로 하지 않고 내버려둡니다.
'한가지 알고리즘'에
'한가지 알고리즘'에 얽매이지 마세요.
번호-문장 -> 번호순
문장1-번호1 -> 패턴매칭후 번호순
문장1-번호1-문장2-번호2 -> 패턴매칭 (문장1에 중요도 *2)
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
https://xenosi.de/
답변감사합니다.
답변감사합니다. 정말 그렇네요. 꼭 하나의 방법으로 전부 해결 할필요는 없고 상황에 맞게 알고리즘을 적용할수도 있겠군요.
일단 떠오르는 경우에 대해서 만들어 두고, 나중에 새로운 패턴이 발견되면 수정하도록 해야겠습니다.
soudex 가 있었던 것같은데요.^^;
어디선가 본듯한데 기억이 안나네요.
soundex 으로 구글링해보시면 될듯합니다.
Hello World.
댓글 달기