2013-07-10 4 views
3

필자는 미디어 센터의 기능을 자동화하도록 프로그래밍 한 SiriServerCore 설정이 있습니다. 이 미디어 센터에는 영화, TV 프로그램 및 음악이 있습니다. 본질적으로 음성 텍스트는 "Play The Final Episode by Alexandria"과 같이 나타납니다. 내 모든 음악 파일 위치가 포함 된 파이썬 목록에는 "알렉산드리아 - 2 - 마지막 에피소드 (채널을 변경합시다.) .mp3"이라는 파일이 있습니다. 목록의 항목에 텍스트 말하기가 "가장 일치"하면 어떨까요? 어떤 도움을 주셔서 감사합니다!Python - Best Matching Search

+1

파이썬보다 일반 알고리즘 질문에 가깝습니다. 머리 꼭대기에, 당신은 당신의 콜렉션에있는 캡션/제목에있는 모든 단어의 인덱스를 작성하는 것이 좋습니다. 일종의 전체 텍스트 검색 엔진 (인터넷에서 그것들 톤)을 사용하는 것보다. – J0HN

답변

2

음성 입력이 문자열로 변환된다고 가정하면 노래 목록을 반복하고 노래 제목의 처음 두 개 또는 세 단어를보고 각 제목을 입력 문자열과 비교하고 노래 제목은 같은 것 권리 song.This에 대한 결정을 할 수 있습니다 당신의 목소리를 대표하는 문자열에 존재 :

>>> a = "Play The Final Episode by Asking Alexandria" # voice input 
>>> songList = ["Asking Alexandria - 2 - The Final Episode (Let's Change Channel).mp3",  "Angie", "Yesterday.mp3"] 
>>> for songTitle in SongsList: 
     songTitleWords = songTitle.split(" ") 
     if " ".join(songTitleWords[:2]) in voiceInput: 
      # play the song 

을하지만이보다는 완벽한 솔루션 직감에 가깝습니다. 나는 노래 제목의 첫 단어가 일반적으로 가장 중요하다고 생각한다. 동시에 음성 입력에 불필요한 요소가 포함될 수 있기 때문에 노래 제목과 일치하는 노래 제목을 음성 입력으로 시작하는 것이 좋습니다. 음성 입력의 처음 세 단어는 "노래를 재생하십시오"와 같을 수 있습니다 제목의 ". 노래 제목의 첫 단어는 대개 유익합니다.

1

this question에 따르면 library for fuzzy string comparisons을 사용할 수 있습니다. 두 문자열 간의 유사성을 검사합니다. 당신은 그것을 사용하여 가장 잘 맞는 것을 찾을 수 있습니다.

+0

나는이 lib가 좋은 결과를 낼지 의심 스럽다. '알렉산드리아를 묻는 마지막 에피소드 '와'알렉산드리아 - 2 - 마지막 에피소드'는 거대한 레벤 시틴 거리를 가지고 있지만 실제로는 완벽하게 일치합니다. – J0HN