擅长:python、mysql、java
<p>(为了完整起见,这里是我最初的纯Python解决方案,它激发了我尝试机器学习的灵感。)</p>
<p>我同意一个可靠的解决方案需要一个复杂的英语语言模型,但也许我们可以想出一个简单的启发式,这是相当糟糕的。在</p>
<p>我能想到大多数可发音单词所满足的两个基本规则:</p>
<pre><code>1. contain a vowel sound
2. no more than two consonant sounds in succession
</code></pre>
<p>作为正则表达式,可以将其写入<code>c?c?(v+cc?)*v*</code></p>
<p>现在简单地尝试从拼写中识别声音:</p>
^{pr2}$
<p>然后可以使用正则表达式来处理规则:</p>
<pre><code>v = "({0})".format("|".join(vowels))
c = "({0})".format("|".join(consonants))
import re
pattern = re.compile("^{1}?{1}?({0}+{1}{1}?)*{0}*$".format(v, c))
def test(w):
return re.search(pattern, w)
def predict(words):
return ["word" if test(w) else "scrambled" for w in words]
</code></pre>
<p>在单词/乱序测试集中,这个分数大约为74%。在</p>
<pre><code> precision recall f1-score support
scrambled 0.90 0.57 0.70 52403
word 0.69 0.93 0.79 52940
avg / total 0.79 0.75 0.74 105343
</code></pre>
<p>经过调整的版本得分为80%。在</p>