ruby正则表达式:替换POS标记数据中的名词集群
我用POS标记了如下形式的英语短语:ruby正则表达式:替换POS标记数据中的名词集群,ruby,regex,substitution,Ruby,Regex,Substitution,我用POS标记了如下形式的英语短语:the_DT flower\u NN pot\u NN,并希望将所有名词序列组合成一个由下划线分隔的名词:the_DT flower\u pot\u NN 我正在尝试以下方法: s.gsub!(/ ([^ ]+)_NN ([^ ]+)_NN/, " #{$1}_#{$2}_NN") 当一行中有多个名词时,此解决方案失败,例如:怪物卡车墙纸\u NN,它应该成为怪物卡车墙纸\u NN 我该怎么办 while s.gsub!(/\b(\S+)_NN\s+(\S+
the_DT flower\u NN pot\u NN
,并希望将所有名词序列组合成一个由下划线分隔的名词:the_DT flower\u pot\u NN
我正在尝试以下方法:
s.gsub!(/ ([^ ]+)_NN ([^ ]+)_NN/, " #{$1}_#{$2}_NN")
当一行中有多个名词时,此解决方案失败,例如:怪物卡车墙纸\u NN
,它应该成为怪物卡车墙纸\u NN
我该怎么办
while s.gsub!(/\b(\S+)_NN\s+(\S+)_NN\b/, '\1_\2_NN')
end
您不能在regexp中一次完成所有操作,因为没有递归(或迭代)的规定。你要做的是,连接相邻的对,然后重复,直到没有相邻的NN
编辑:也修复了替换零件。现在应该可以工作了
您不能在regexp中一次完成所有操作,因为没有递归(或迭代)的规定。你要做的是,连接相邻的对,然后重复,直到没有相邻的NN
编辑:也修复了替换零件。现在应该可以工作了。您也可以尝试使用一个全局替换
s.gsub!(/_NN\s+(?=\b[^ ]+_NN)/, "_");
您也可以尝试使用一个全局替换
s.gsub!(/_NN\s+(?=\b[^ ]+_NN)/, "_");
您是否希望示例中的输出为
怪物卡车墙纸\u NN
?是:怪物卡车墙纸\u NN
应为:怪物卡车墙纸\u NN
您希望示例中的输出为怪物卡车墙纸\u NN
?是:怪物卡车\u NN墙纸应该是:怪物卡车墙纸这似乎不起作用。$1
和$2
似乎受到了重击。如果x=怪物卡车壁纸,那么当x.gsub!(/\b([^]+)\u NN\s+([^]+)\u NN/,“{$1}{$2}};结束
yieldsthe_DT monster_truck_NN
Heh,很抱歉,没有首先检查原始表达式的正确性。尽管如此,答案的本质仍然是不变的:一个while
循环。实际上,你可以通过积极的前瞻一次完成这一切。这似乎不起作用。$1
和$2
似乎受到了重击。如果x=怪物卡车壁纸,那么当x.gsub!(/\b([^]+)\u NN\s+([^]+)\u NN/,“{$1}{$2}};结束
yieldsthe_DT monster_truck_NN
Heh,很抱歉,没有首先检查原始表达式的正确性。尽管如此,答案的本质仍然是不变的:一个while
循环。实际上,你可以通过积极的前瞻一次完成这一切。