web-dev-qa-db-fra.com

Ruby: Extraction de mots d'une chaîne

J'essaie d'analyser les mots d'une chaîne et de les mettre dans un tableau. J'ai essayé la chose suivante:

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

Cela semble faire l'affaire, mais c'est un peu fragile (je devrais inclure plus de caractères spéciaux, par exemple). Y a-t-il une meilleure façon de le faire en rubis? 

Facultatif: j'ai une description du cours cs. J'ai l'intention d'extraire tous les mots et de les placer dans un tableau de chaînes, de supprimer du tableau le mot le plus courant en anglais, puis d'utiliser le reste des mots comme balises que les utilisateurs peuvent utiliser pour rechercher cs cours.

30
sybohy

La commande split.

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

divisera la chaîne en un tableau basé sur une expression régulière.\W signifie n'importe quel caractère "non-Word" et le "+" signifie de combiner plusieurs délimiteurs.

59
David Nehme

Eh bien, vous pouvez diviser la chaîne d'espaces si c'est votre délimiteur d'intérêt

@string1.split(' ')

Ou diviser les limites du mot

\W  # Any non-Word character

\b  # Any Word boundary character

Ou sur des non-mots

\s  # Any whitespace character

Astuce: essayez de tester chacun de ceux-ci sur http://rubular.com

Et notez que Ruby 1.9 a quelques différences par rapport à 1.8

13
BF4

Pour moi, le meilleur pour séparer des phrases est:

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

Même avec des mots multilingues et des signes de ponctuation fonctionnent parfaitement:

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

Pour Rails, vous pouvez utiliser quelque chose comme ceci:

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