web-dev-qa-db-ja.com

Ruby:文字列から単語を抽出する

私は文字列から単語を解析し、配列に入れようとしています。私は次のことを試しました:

@string1 = "oriented design, decomposition, encapsulation, and testing. Uses "
puts @string1.scan(/\s([^\,\.\s]*)/)

それはトリックを行うようですが、それは少し不安定です(たとえば、より多くの特殊文字を含める必要があります)。ルビーでそうするより良い方法はありますか?

オプション:csコースの説明があります。すべての単語を抽出して文字列配列に配置し、生成された配列から英語の最も一般的な単語を削除し、残りの単語をユーザーがcsの検索に使用できるタグとして使用する予定ですコース。

31
sybohy

Splitコマンド。

   words = @string1.split(/\W+/)

正規表現に基づいて文字列を配列に分割します。\Wは「非単語」文字を意味し、「+」は複数の区切り文字を結合することを意味します。

60
David Nehme

さて、それがあなたの関心の区切り文字である場合、スペースで文字列を分割することができます

@string1.split(' ')

または、単語の境界で分割する

\W  # Any non-Word character

\b  # Any Word boundary character

または非単語で

\s  # Any whitespace character

ヒント:これらのそれぞれを http://rubular.com でテストしてみてください

また、Ruby 1.9には1.8とは異なる点があることに注意してください

13
BF4

私にとって、文を分割するのに最適なのは:

line.split(/[^[[:Word:]]]+/)

多言語の単語や句読点でも完全に機能します。

line = 'English words, Polski Żurek!!! crème fraîche...'
line.split(/[^[[:Word:]]]+/)
=> ["English", "words", "Polski", "Żurek", "crème", "fraîche"] 
13
lazzy.developer

Railsの場合、次のようなものを使用できます。

@string1.split(/\s/).delete_if(&:blank?)
1
ayckoster