'비슷한 이름의 파일'을 찾는 방법

klara의 이미지

윈도우의 KMP나 곰플레이어를 보면, 파일을 열때 비슷한 이름의 파일을 찾아서 재생목록으로 넣어주는 기능이 있습니다.

저도 제 프로그램에 한 파일을 열때 같은 경로내의 비슷한 이름의 파일을 자동으로 찾아서 열어주는 기능을 넣을려고 하는데요, 이 '비슷한 이름의 파일'이란건 어떻게 찾으면 좋을까요?

KMP도 그렇지만 특히나 곰플레이어는 진짜 신통하게도

시리즈명 1화 처음시작.avi
시리즈명 2화 두번째.avi

이런식으로 되있는 경우도 알아서 추가해주던데요...

이래저래 생각해봤는데, 생각해봐야하는 경우가 너무 많은듯 하여서 어떻게 손을 대야할지 모르겠네요.

'비슷한 이름의 파일'을 찾기위한 방법이나 아이디어가 있다면 알려주시면 감사하겠습니다.

Hyun의 이미지

correlation을 구해보고 특정 수치보다 높게 나오는걸로 판단하는건 어떨까요?

klara의 이미지

답변감사합니다.
말씀하신 correlation가 통계학에서 분산, 공분산등과 함께 나오는 상관을 말씀하시는 건가요...?
숫자로된 자료라면 몰라도, 문자열에서 상관을 어떻게 구해야할지 감이 안오는데요.. 혹시 correlation를 구하기위한 공식같은게 있나요...?

Hyun의 이미지

그냥 생각없이 적었는데... 생각해보니 correlation으로 하기에는 문자열이 많이 짧은거 같네요. 잘 될꺼같지도 않고..
보통 제목이 파일이름의 앞부분에 있으니깐 그냥 앞에서부터 같은 문자가 몇개 있느냐... 이정도 갓고 판단하는게 좋지 않을까요?

송효진의 이미지

수가 나오는것을 기준으로 그 앞의 부분만
특수문자, 공백 등을 제거한 채 비교하면 어떨까요?
수는 최대한 뒤쪽을 기준으로 시작해서,
시리즈번호가 아닌것 같으면 하나 더 앞으로.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

klara의 이미지

답변감사합니다.
박현우님과 송효진님 두분모두 앞쪽을 비교한다고 말씀하셨는데, 제가 고민하는 것 중에, 꼭 공통된 부분이 앞쪽에 있으란 법은없지않나? 라는 것입니다.
저도 (전부일지도 모르지만) 대부분 공통된 부분은 앞쪽을 봐왔지만, 그래도 일반성이 결여되는 듯한 생각이 들어서요...
일단은 두분이 조언해주신대로 앞쪽 비교하는 걸로 만들고, 차후에 다른 방법을 알게되면 개선하도록 해봐야겠습니다.

송효진의 이미지

특수문자, 숫자 를 기준으로 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 - 명령어도 몇개 안되요~

klara의 이미지

오...그런 방법도 있군요. 그런데 그 비율을 몇이상을 비슷하다고 할지가 중요할 것 같은데 혹시 특별히 10:4라고 정하신 이유가 있으신가요?

송효진의 이미지

그냥 예문 만들어 놓고 걸리는 비율을 생각해 본것입니다.
'편집거리'도 좋아보이기는 하는데,
제 예문같은 경우는 편집거리로 하면 같은거로 안나올것 같습니다.
예문을 너무 잘 만든것 같아요.===3=3

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

wyb330의 이미지

유사한 단어를 찾는 알고리즘으로 편집거리(Edit Distance)라는 게 있습니다.
두 단어 사이에 삽입/삭제/변경해야 하는 거리를 계산하는 방법이죠.
예를들어 abcdefg와 abcdrfg가 있다면 e를 r로 대체하면 되게 되기 때문에 편집거리가
1이 되겠죠. 이런 방식으로 두 문자열의 유사도를 비교하는 방식입니다.
아마도 이 방식을 사용하지 않았을까 합니다.

klara의 이미지

인터넷에 찾아보니 이미 C++구현된 간단한 알고리즘들도 소개되어있네요.
한번 이용해보록 해야겠습니다. 감사합니다.

klara의 이미지

숫자로 앞뒤로 쪼갠다음, 처음 두개를 비교해서 앞쪽이 같으면 그 다음부턴 앞쪽이 같은 파일들을 찾고, 뒤쪽이 같은 뒤쪽이 같은 파일들을 찾도록 만들었습니다.
예를 들어 앨범 트랙처럼 경로가 .../앨범명/트랙번호. 노래제목.ogg 이런식의 경우는 파일이름으로 편집거리를 비교해보면 결국 .과 확장자외에는 전부 다르게 되어서 기대된 결과를 얻기 힘들어, 편집거리는 제외시켰습니다.
또 송효진님께서 알려주신 덩어리로 쪼개서 비교하는 방법도 마찬가지로 이런 경우에는 바른 결과를 얻기가 힘들듯구요...
도움주셨는데 안써서 죄송합니다-_-;;

혹시 또 다른 아이디어가 있으신분 계시면 더 답변을 받아보고 싶어서 완료로 하지 않고 내버려둡니다.

송효진의 이미지

'한가지 알고리즘'에 얽매이지 마세요.
번호-문장 -> 번호순
문장1-번호1 -> 패턴매칭후 번호순
문장1-번호1-문장2-번호2 -> 패턴매칭 (문장1에 중요도 *2)

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

klara의 이미지

답변감사합니다. 정말 그렇네요. 꼭 하나의 방법으로 전부 해결 할필요는 없고 상황에 맞게 알고리즘을 적용할수도 있겠군요.
일단 떠오르는 경우에 대해서 만들어 두고, 나중에 새로운 패턴이 발견되면 수정하도록 해야겠습니다.

오호라의 이미지

어디선가 본듯한데 기억이 안나네요.

soundex 으로 구글링해보시면 될듯합니다.

Hello World.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.