2013-07-10 126 views
3

我有一个SiriServerCore安装程序,可以让我的媒体中心的功能基本上自动化。这个媒体中心有电影,电视节目和音乐。基本上,语音文本将收到类似“通过询问亚历山大播放最后一集”。在包含我所有音乐文件位置的Python列表中,有一个名为“请求亚历山大 - 2 - 最终插曲(Let's Change Channel).mp3”的文件。我如何才能让文本语音与列表中的项目“最佳匹配”?任何帮助表示赞赏!Python - 最佳匹配搜索

+1

这是更多的一般算法问题,而不是python。除了使用某种全文搜索引擎(在互联网上的大量文本搜索引擎)之外,您可能想要在头文件中创建字幕/标题中所有单词的索引。 – 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会产生好的结果。 “通过询问亚历山大和亚历山大 - 最后一集来播放最后一集”具有巨大的列文斯坦距离,但是,实际上这是一场完美的比赛。 – J0HN