如果我有一个字符串“blueberrymuffinsareinsanelyDelicious”,那么最有效的解析方法是什么,这样我就剩下了[“blueberry”,“muffins”,“are”,“insanely”,“delicious”]?
我已经有了我的单词列表(mac's/usr/share/dict/words),但是如何确保完整的单词存储在我的数组中,也就是蓝莓,而不是两个独立的单词,blue和berry。
最佳答案
尽管有些情况下可能有多种解释,选择最好的解释可能会有麻烦,但您始终可以使用这样一种相当天真的算法来实现它:
WORDS = %w[
blueberry
blue
berry
fin
fins
muffin
muffins
are
insane
insanely
in
delicious
deli
us
].sort_by do |word|
[ -word.length, word ]
end
WORD_REGEXP = Regexp.union(*WORDS)
def best_fit(string)
string.scan(WORD_REGEXP)
end
这将解析您的示例:
best_fit("blueberrymuffinsareinsanelydelicious")
# => ["blueberry", "muffins", "are", "insanely", "delicious"]
请注意,这将跳过任何不匹配的组件。
关于ruby - 将没有空格的字符串解析为单个单词的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41705626/