Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby正则表达式:替换POS标记数据中的名词集群_Ruby_Regex_Substitution - Fatal编程技术网

ruby正则表达式:替换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+

我用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+)_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}};结束
yields
the_DT monster_truck_NN
Heh,很抱歉,没有首先检查原始表达式的正确性。尽管如此,答案的本质仍然是不变的:一个
while
循环。实际上,你可以通过积极的前瞻一次完成这一切。这似乎不起作用。
$1
$2
似乎受到了重击。如果
x=怪物卡车壁纸,那么
当x.gsub!(/\b([^]+)\u NN\s+([^]+)\u NN/,“{$1}{$2}};结束
yields
the_DT monster_truck_NN
Heh,很抱歉,没有首先检查原始表达式的正确性。尽管如此,答案的本质仍然是不变的:一个
while
循环。实际上,你可以通过积极的前瞻一次完成这一切。