在自然语言处理中使用boost :: iterator_range

时间:2012-10-31 22:41:50

标签: c++ regex boost nlp boost-iterators

我的问题与自然语言处理(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;

我希望这是有道理的。我不一定在寻找完整的代码,但提示如何以这种方式使用正则表达式(我是新手)。

0 个答案:

没有答案