<p>这个答案建立在@Rafaels answer的基础上</p>
<ol>
<li><p>模糊模糊中的<code>process.extractOne</code>默认情况下使用记分器<code>fuzz.WRatio</code>。这是FuzzyWuzzy提供的多个记分器的组合,对于Seatgeek使用的数据集非常有效。所以你可能想和其他得分手一起尝试,看看哪一个对你来说表现最好。但是请注意,使用编辑距离可能很难区分相当多的元素。例如<code>Vitamin E</code><-&燃气轮机<code>Vitamin D</code>只需要一次编辑,即使它们完全不同。同样的行为也发生在甘油醚-7上</p>
</li>
<li><p>fuzzyfuzzy的速度相对较慢,因此在处理较大的数据集时,您可能希望使用<a href="https://github.com/maxbachmann/RapidFuzz" rel="nofollow noreferrer">RapidFuzz</a>(我是作者),它提供类似的算法,但性能更好</p>
</li>
<li><p><code>process.extractOne</code>默认情况下预处理输入字符串(小写并用空格替换非字母数字字符)。由于您可能会多次搜索元素,因此有必要提前对可能的选择进行一次预处理,并停用此行为以确保安全:</p>
</li>
</ol>
<pre class="lang-py prettyprint-override"><code>process.extractOne(str2Match,strOptions, processor=None)
</code></pre>
<h2>RapidFuzz和FuzzyFuzzy的区别</h2>
<p>由于您报告了RapidFuzz和FuzzyFuzzy之间结果的差异,以下是一些可能的原因:</p>
<ol>
<li>我不舍入结果。所以你会得到一个像42.22的浮点值,而不是42</li>
<li>如果您不使用快速模糊模糊实现(即使用python Levenshtein),您可能会得到不同的结果,因为它使用difflib,这是一个不同的度量。它在大多数情况下产生非常相似的结果,但并不总是如此</li>
<li>如果您使用快速实现任何部分比率,如部分比率,则。。。可能会在fuzzyfuzzy中返回错误的结果,因为部分_比率被破坏(请参见<a href="https://github.com/seatgeek/fuzzywuzzy/issues/79" rel="nofollow noreferrer">here</a>)</li>
<li>将processor=None传递给extract/extractOne在RapidFuzzy和FuzzyFuzzy中有不同的含义。在RapidFuzz中,它将停用预处理,而在FuzzyFuzzy中,它仍将使用默认的分数。以</li>
</ol>
<pre><code>extract(..., scorer=fuzz.WRatio, processor=None)
</code></pre>
<p>FuzzyWozzy仍将预处理WRatio中的字符串,因此无法停用预处理。我个人认为这是一个糟糕的设计,所以我对它进行了修改,让用户能够停用处理器,这很可能是您在传递<code>processor=None</code>时想要实现的</p>