it-swarm.com.de

Ruby: Extrahieren von Wörtern aus String

Ich versuche, Wörter aus einer Zeichenfolge zu analysieren und sie in ein Array zu bringen. Ich habe folgendes versucht:

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

Es scheint den Trick zu tun, aber es ist etwas wackelig (ich sollte zum Beispiel mehr Sonderzeichen enthalten). Gibt es einen besseren Weg, um dies in Rubin zu tun? 

Optional: Ich habe eine cs-Kursbeschreibung. Ich möchte alle Wörter daraus extrahieren und in ein String-Array einfügen, das gebräuchlichste Word in der englischen Sprache aus dem erzeugten Array entfernen und dann die restlichen Wörter als Tags verwenden, mit denen Benutzer nach cs suchen können kurse.

30
sybohy

Der Split-Befehl.

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

teilt den String in ein Array auf, das auf einem regulären Ausdruck basiert.\W steht für ein beliebiges "Nicht-Wort" und das "+" für die Kombination mehrerer Trennzeichen.

59
David Nehme

Nun, Sie könnten die Zeichenfolge in Leerzeichen aufteilen, wenn dies Ihr Abgrenzungszeichen ist

@string1.split(' ')

Oder spalten Sie Word-Grenzen auf

\W  # Any non-Word character

\b  # Any Word boundary character

Oder zu Nichtwörtern

\s  # Any whitespace character

Tipp: Testen Sie diese jeweils auf http://rubular.com .

Beachten Sie, dass Ruby 1.9 einige Unterschiede zu 1.8 hat

13
BF4

Für mich ist das Beste, um Sätze zu spalten:

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

Auch mit mehrsprachigen Wörtern und Satzzeichen funktionieren einwandfrei:

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

Für Rails können Sie so etwas verwenden:

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