Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

제목에 콜론(:) 이나 하이픈(-) 포함시 검색안되는 문제.. #23

Open
eightbit11 opened this issue Mar 2, 2019 · 2 comments

Comments

@eightbit11
Copy link

eightbit11 commented Mar 2, 2019

안녕하세요

콜론(:)이나 하이픈(-)이 들어가면 검색이 잘 안되어서 무식하게 넣어서 검색되도록 초심자지만 주섬주섬 문법 찾아가며 수정해봤습니다.
일단 나름 되긴 합니다만.. 다른 문제가 없을지는 모르겠습니다. 확인바랍니다..

'닥터 스트레인지' 검색시 '닥터 스트레인지 2' 정보에 year가 null로 나와서 죽는 문제도 수정했습니다.


# 검색부분 함수로 분리... 공백대소문자 무시 비교
def searchDaumMovieName(results, media, lang, media_name):
  Log.Debug("search: %s %s" %(media_name, media.year))
  data = JSON.ObjectFromURL(url=DAUM_MOVIE_SRCH % (urllib.quote(media_name.encode('utf8'))))
  items = data['items']['movie']
  if len(items) > 0:
    ref_media_name = media_name.lower().replace(' ','')
    for idx, item in enumerate(items):
      title, id, poster, year, r = item.split('|')
      ref_title = title.lower().replace(' ', '')
      if ref_media_name in ref_title:
        score = 80 - min(15, len(ref_title) - len(ref_media_name)) * 5
      else:
        score = 80 - min(5, idx) * 15
      if media.year and year.isdigit():
        score += (2 - min(2, abs(int(media.year) - int(year)))) * 5
      Log.Debug('ID=%s, media_name=%s, title=%s, year=%s, score=%d' % (id, media_name, title, year, score))
      results.Append(MetadataSearchResult(id=id, name=title, year=year, score=score, lang=lang))
    return True
  return False

def searchDaumMovie(results, media, lang):
  bfindcolon = False
  if media.filename != None:
    foldername = os.path.split(urllib.unquote(media.filename))[0]
    foldername = os.path.basename(foldername)
    if foldername.find('-') >= 0:
      bfindcolon = True
  #Log.Debug("searchDaumMovie: %s %s %s" %(media.name, media.year, foldername))
  media_words = unicodedata.normalize('NFKC', unicode(media.name)).strip().split(' ')
  while len(media_words) > 0:
    media_name = ' '.join(media_words)
    if searchDaumMovieName(results, media, lang, media_name):
      break

    if len(media_words) > 1 and bfindcolon:
      found = False
      for i in range(1,len(media_words)):
        # ':' 를 넣어 검색
        media_name = ' '.join(media_words[:i]) + ':' + ' '.join(media_words[i:])
        if searchDaumMovieName(results, media, lang, media_name):
          found = True
          break
        # '-' 를 넣어 검색
        media_name = ' '.join(media_words[:i]) + '-' + ' '.join(media_words[i:])
        if searchDaumMovieName(results, media, lang, media_name):
          found = True
          break
      if found:
        break
        
    media_words = media_words[:-1]

`

@axfree
Copy link
Owner

axfree commented Mar 7, 2019

코드는 간단히 검토해 봤는데 잘 동작할것 같고, 파일명 관련해 약간의 문제가 있어 보이네요.

  • 수동으로 검색할 경우 media.filename이 None,
  • 일부 한국영화의 경우처럼 폴더 없이 미디어 파일만 달랑 있는 경우,

폴더명은 무시하고, 자동완성 결과가 없을 경우에만 특수문자를 포함해서 검색해 보는 식으로 처리하는게 어떨까 생각됩니다.

다만, 영화제목이 짧은 경우 (예: 창, 눈 등) 자동완성 방식으로는 아예 검색이 안되는 경우가 있어서, 다음 메인 검색으로 검색 방식을 바꾸거나 병행해 볼까도 생각 중이라 올려주신 패치 적용은 보류하도록 하겠습니다.

axfree added a commit that referenced this issue Mar 8, 2019
영화: 영화 개봉년도가 없는 경우 죽을 수 있던 문제 수정 #23
@eightbit11
Copy link
Author

오늘자 다운 받아서 사용해보니 검색이 잘 되네요.
감사합니다~~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants