回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在和亚历克斯鬼混。我的任务是将用户输入与从web动态加载的可能答案列表相匹配。在这个例子中,它是一个电影列表。在</p>
<p>当然,我不能假设总会有一个完美的匹配,无论是用户还是回声设备都不能很好地匹配。我目前克服这个问题的方法是SequenceMatcher函数。因此,我测量用户输入和列表中所有项目的相似性,最终胜出者可能是用户真正谈论的列表项:</p>
<pre><code>from difflib import SequenceMatcher
maxi = 0
haystack = ["Die Verurteilten", "Der Pate", "Der Pate 2", "The Dark Knight", "Die zwölf Geschworenen", "Schindlers Liste", "Pulp Fiction", "Der Herr der Ringe - Die Rückkehr des Königs", "Zwei glorreiche Halunken", "Fight Club", "Der Herr der Ringe - Die Gefährten", "Forrest Gump", "Das Imperium schlägt zurück", "Inception", "Der Herr der Ringe - Die zwei Türme", "einer flog über das Kuckucksnest", "GoodFellas - Drei Jahrzehnte in der Mafia", "Matrix", "Die sieben Samurai", "Krieg der Sterne", "City of God", "Sieben", "Das Schweigen der Lämmer", "Ist das Leben nicht schön?", "Das Leben ist schön"]
needle = "Die Gefährten"
for hay in haystack:
ratio = SequenceMatcher(None, needle, hay).ratio()
print('%.5f' % ratio + " " + hay)
if ratio > maxi:
maxi = ratio
result = hay
print(result)
</code></pre>
<p>大多数时候我对结果很满意。然而,有时候(也有点太频繁了)我不是。如果用户可能会像上面的例子那样要求“Die Gefährten”,则会发生这种情况:</p>
^{pr2}$
<p>对于这种特殊情况,用分隔符<code>-</code>分割列表项,对所有结果部分进行计算并返回最大分数,这可能是一个简单的解决方案。但由于清单上可能有其他东西(食谱、书籍、歌曲、游戏等等),我想知道是否有更普遍的方法。有什么想法吗?在</p>
<p>谢谢。在</p>