私の問題は、自然言語処理 (NLP) と入力文字列の論理グループへのチャンクに関連しています。
物事を単純化するために、私が持っているのはトークンデータ構造のベクトルであり、それぞれに「タグ」文字列値が含まれています。
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";
上記の pos_tags の例では、2 つの一致するチャンクが存在するように、JJ (形容詞) と NN (名詞) インスタンスのみのチャンクを形成することに関心があります。
「JJ NN NN」、「JJ NN」
各正規表現の一致が入力トークン セット (input_tokens) 内のトークンの範囲を表すように、pos_tags 文字列に対して一種の正規表現を実行することは可能ですか? つまり、形成される各チャンクは文字列ではなく、開始/終了イテレータによって表されます。
理想的には、見つかった一致を boost::iterator_range のベクトルとして保存したいと思います。各範囲は、見つかった各チャンクの開始/終了を表します。次のようになります。
std::vector< boost::iterator_range<tok_iter> > chunks;
これが理にかなっていることを願っています。必ずしも完全なコードを探しているわけではありませんが、この方法で正規表現を使用する方法についてのヒント (私は初心者です)。