0

考虑以下字符串:

I am mad and will not ever set foot in that store again

我正在使用 POS 标记器来标记这样的字符串:

I/NN am/VBP mad/JJ and/CC will/MD not/RB ever/RB set/VBN foot/NN in/IN that/IN 
store/NN again/RB 

现在,我使用正则表达式将“不”连接到、ao、动词,同时忽略否定词(从不,也不是等)

preg_replace(
  "/(\s)(?:(?!never|neither|dont|wont|not|no)(\w*))\/(JJ|MD|RB|VB|VBG|VBN)\b/", 
  "$1not$2",
  $sentence
);

这导致:

I am notmad and notwill notever notset foot in that store notagain 

但是,我想要的只是将“不”连接到出现在(第一个)否定词之后的动词。注意madandwill而不是notmadand notwill

I am mad and will notever notset foot in that store notagain 

所以我认为首先我应该在句子中寻找任何否定词 (never|neither|dont|wont|not|no),然后只从那里执行正则表达式。但是我该怎么做呢?

4

1 回答 1

0

执行此操作的最简单方法似乎是preg_split在您的标记句子上使用将其分成两部分:第一个否定词之前的部分和该否定词之后的部分。保留分隔符 (PREG_SPLIT_DELIM_CAPTURE),然后运行您在第二部分编写的正则表达式,之后您可以简单地将这两个字符串再次连接在一起。最后,您可以使用正则表达式删除 PoS 标签以获得I am mad and will notever notset foot in that store notagain,即没有 PoS 标签。

于 2012-05-14T18:20:40.403 回答