我有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
。
我该怎么办?
答案 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)/, "_");