0

我的问题与自然语言处理 (NLP) 和将输入字符串分块成逻辑组有关。

为了简化事情,我所拥有的是一个 Token 数据结构的向量,其中每个都包含一个“标签”字符串值等。

class Token
{
   public:
      std::string tag;
      std::string word;
      // other stuff;
};

std::vector<Token> input_tokens;
typedef std::vector<Token>::iterator tok_iter;

我还形成了一个串联的“标签”值字符串,该字符串取自向量中的每个标记,如下所示:

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;

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

4

0 回答 0