入力が与えられた場合:
str = "foo bar jim jam. jar jee joon."
スペースで区切られたすべての2単語と3単語のフレーズの出力が必要です。
[ "foo bar", "bar jim", "jim jam", "jar jee", "jee joon",
"foo bar jim", "bar jim jam", "jar jee joon" ]
特に、上記の「ジャムジャー」、「ジャムジャムジャー」、「ジャムジャージー」は期間の関係で不足していることに注意してください。
str.scan(/\w+/).each_cons(2).map{ |a| a.join(' ') }
が含まれるので使用できません"jam jar"
。
/\w+ \w+/
歩留まりをスキャンすると["foo bar", "jim jam", "jar jee"]
、特に「bar jim」と「jeejoon」が欠落し、問題が浮き彫りになります。
このための実際のアプリケーションは、検索エンジンのフレーズベースのインデックスを生成することです。句読点で区切られた単語を除いて、すべての真に連続した単語をフレーズとして見つけたいと思います。
編集:次のバリエーションを介して正規表現/スキャンでこれを行う方法があるようです:
"a b c d".scan(/(?=([abc] [abc]) )[abc]/)
#=> [["a b"], ["b c"]]