ruby regex: заменить кластеры имен в данных POS-тегов - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть POS-теги на английском языке фразы вида: the_DT flower_NN pot_NN и я хочу объединить все существительные последовательности в одно существительное, разделенное подчеркиванием: the_DT flower_pot_NN.

Я пытаюсь сделать следующее:

s.gsub!(/ ([^ ]+)_NN ([^ ]+)_NN/, " #{$1}_#{$2}_NN")

Это решение не работает, если в строке несколько существительных, например: the_DT monster_NN truck_NN wallpaper_NN, которое должно стать the_DT monster_truck_wallpaper_NN.

Что мне делать?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011
while s.gsub!(/\b(\S+)_NN\s+(\S+)_NN\b/, '\1_\2_NN')
end

Вы не можете делать все это одновременно в регулярном выражении, так как нет условий для рекурсии (или итерации). Что вы делаете, соединяйте соседние пары, затем повторяйте, пока не будет смежных NN.

EDIT: исправлена ​​также и запасная часть. Должен работать сейчас.

1 голос
/ 02 апреля 2011

Вы также можете попробовать это, используя одну глобальную замену.

s.gsub!(/_NN\s+(?=\b[^ ]+_NN)/, "_");
...