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
C++ 在自然语言处理中使用boost::iterator_范围_C++_Regex_Boost_Nlp_Boost Iterators - Fatal编程技术网

C++ 在自然语言处理中使用boost::iterator_范围

C++ 在自然语言处理中使用boost::iterator_范围,c++,regex,boost,nlp,boost-iterators,C++,Regex,Boost,Nlp,Boost Iterators,我的问题与自然语言处理(NLP)和将输入字符串分块到逻辑组有关 为了简化事情,我有一个令牌数据结构向量,其中每个都包含一个“tag”字符串值 class Token { public: std::string tag; std::string word; // other stuff; }; std::vector<Token> input_tokens; typedef std::vector<Token>::iterator

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

为了简化事情,我有一个令牌数据结构向量,其中每个都包含一个“tag”字符串值

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

std::vector<Token> input_tokens;
typedef std::vector<Token>::iterator tok_iter;
我对形成JJ(形容词)和NN(名词)实例的组块感兴趣,只是为了 上面的pos_标记示例将有两个匹配的块:

“JJNN”,“JJNN”

是否可以在pos_标记字符串上运行一种正则表达式,使每个正则表达式匹配表示输入令牌集中的令牌范围(输入令牌)?换句话说,形成的每个块不是字符串,而是由开始/结束迭代器表示的

理想情况下,我希望将找到的匹配项存储为boost::iterator_range的向量,其中每个范围表示找到的每个块的开始/结束,如下所示:

std::string pos_tags = "DT JJ NN NN IN RB JJ NN DT";
std::vector< boost::iterator_range<tok_iter> > chunks;
std::vector块;

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

我看到“just use
std::vector
”的注释即将出现……我不太明白您想要如何使用正则表达式。您可以将组块模式视为词性标记字母表上的正则表达式,而不是字符字母表上的正则表达式。C++字符串是模板化的,因此可以在其中使用非字符类型,正则表达式库仍然可以工作。这就是你想做的吗?根据你问题的其他部分,我猜不是,但我还是不太明白你的意思。事实上,看这个,它不一定要使用正则表达式,我想正则表达式可能是一种寻找匹配项的好方法。最终,我需要找到某种方法来存储我找到的每个块,但不是存储为字符串,而是作为迭代器,表示每个块在标记向量中的开始/结束迭代器位置。如果我误解了,请告诉我,但我相信您只是缺少了一个额外的数据结构:将POS标记字符串中的位置映射到原始标记向量中的迭代器位置的映射。一个简单的
向量
,长度与POS标签字符串相同。每个条目将提供对应于该位置的令牌的
tok_iter
。使用这个数据结构,将regex结果映射到令牌迭代器将是一个快速的操作。使用boost::iterator_range的动机是提供迭代器的开始/结束位置。