我的问题与自然语言处理(NLP)以及将输入字符串分块为逻辑组有关。
为了简化我所拥有的东西,它是一个Token数据结构的向量,每个数据结构都包含一个'tag'字符串值等。
class Token
{
public:
std::string tag;
std::string word;
// other stuff;
};
std::vector<Token> input_tokens;
typedef std::vector<Token>::iterator tok_iter;
我还从矢量中的每个令牌中形成一个连接的'tag'值串联字符串,如下所示:
std::string pos_tags = "DT JJ NN NN IN RB JJ NN DT";
我感兴趣的是只形成JJ(形容词)和NN(名词)实例的块,以便 在pos_tags示例上面会有两个匹配的块:
“JJ NN NN”,“JJ NN”
是否可以在pos_tags字符串上运行一种正则表达式,使得每个正则表达式匹配表示输入令牌集(input_tokens)中的标记范围从哪里来?换句话说,形成的每个块不是字符串,而是由开始/结束迭代器表示。
理想情况下,我想将我发现的匹配项存储为boost :: iterator_range的向量,其中每个范围代表找到的每个块的开始/结束,如下所示:
std::vector< boost::iterator_range<tok_iter> > chunks;
我希望这是有道理的。我不一定在寻找完整的代码,但提示如何以这种方式使用正则表达式(我是新手)。