2013-08-03 3 views
2

Я создаю приложение, которое загружает предложения и анализирует их для словесной игры. Я заранее не знаю, какую пунктуацию будет содержать текст.String splitting с неизвестной пунктуацией в Ruby

Я хотел бы иметь возможность разделить предложение/s, изучить их для части речевого тега, и если найден правильный тег, замените его на " " и верните их обратно по порядку.

text = "some string, with punctuation- for example: things I don't know about, that may or may not have  whitespaces and random characters % !!" 

Как я могу разделить его в массив, так что я могу передать анализатор над каждым словом, и присоединиться к ним , чтобы, имея в виду, что string.split(//) кажется, нужно знать, что знаки препинания я ищу для?

+0

Почему вы должны воссоединиться с ними? Почему бы просто не использовать оригинальную строку? Или вы делаете какую-то трансформацию? –

+0

Можете ли вы объяснить, что вы подразумеваете под «частью тега речи»? –

+0

Когда вы собираете предложение после внесения каких-либо изменений, которые вам нужно сделать, вам нужно сохранить все остальное в предложении, включая конкретные пробелы? –

ответ

6

split полезен, когда вы можете более легко описать разделители, чем части, подлежащие извлечению. В вашем случае вы можете более легко описать детали, которые нужно извлечь, а не разделители, и в этом случае scan больше подходит. Это неправильное решение использовать split. Вы должны scan.

text.scan(/[\w']+/) 
# => ["some", "string", "with", "punctuation", "for", "example", "things", "I", "don't", "know", "about", "that", "may", "or", "may", "not", "have", "whitespaces", "and", "random", "characters"] 

Если вы хотите заменить спички, есть еще причина, чтобы не использовать split. В этом случае вы должны использовать gsub.

text.gsub(/[\w']+/) do |word| 
if word.is_of_certain_part_of_speech? 
    "___" # Replace it with `"___"`. 
else 
    word # Put back the original word. 
end 
end 
+0

Это полезный шаг. Как мне лучше всего продолжать удерживать пунктуацию и пробелы в исходной строке, чтобы объединить их вместе? Создание словаря, который отображает исходное слово с завершающей пунктуацией и пробелом в новый список слов (таким образом, только заменяя преобразованное слово?) –