Регулярные выражения в Ruby - PullRequest
0 голосов
/ 05 мая 2011

У меня есть внешний текстовый файл, который выглядит следующим образом:

This_ART is_P an_ART example_N.
Thus_KONJ this_ART is_P a_ART part_N of_PREP it_N.

Теперь я хочу открыть этот файл в Ruby и создать массив с каждым аннотированным словом.Моя попытка выглядит следующим образом:

def get_entries(file)
  return File.open(file).map { |x| x.split(/\W+_[A-Z]+/) }
end

, но выполнение просто возвращает массив с каждым предложением в качестве члена:

[["This_ART is_P an_ART example_N.\n"],["Thus_KONJ this_ART is_P a_ART part_N of PREP it_N.\n"]]

Знаки препинания и escape-символы включены.Где ошибка или что мне нужно изменить, чтобы получить правильный массив?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

попробуйте отсканировать только те, которые вам нужны, например,

return File.read(file).scan(/\w+_[A-Z]+/)

, что даст вам что-то вроде:

["This_ART", "is_P", "an_ART", "example_N", "Thus_KONJ", ...]

, если вы хотите удалить часть аннотации, вы можете добавить:

.map{ |w| w.gsub(/_[A-Z]+\z/, '') }

обратите внимание, что \ w - это слова, а \ W - это не слова

0 голосов
/ 05 мая 2011
/\W+_[A-Z]+/

соответствует только в том случае, если перед _ стоит символ, не состоящий из слов, чего нет в вашей строке.

Я не знаю точно, что вы ожидаете в результате, но попробуйте это:

/_[A-Z]+\W*/

Разделение по этому регулярному выражению дает вам

["This", "is", "an", "example", "Thus", "this", "is", "a", "part", "of", "it"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...