ruby regex:替换POS标记数据中的名词簇

时间:2011-04-01 23:15:54

标签: ruby regex substitution

我有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 个答案:

答案 0 :(得分:2)

while s.gsub!(/\b(\S+)_NN\s+(\S+)_NN\b/, '\1_\2_NN')
end

你不能在regexp中一次完成所有操作,因为没有提供递归(或迭代)。你做的是,加入相邻的对,然后重复,直到没有相邻的NN。

编辑:修复了更换部件。现在应该工作。

答案 1 :(得分:1)

您也可以尝试使用一个全局替换。

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