0

私の問題は、自然言語処理 (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;

これが理にかなっていることを願っています。必ずしも完全なコードを探しているわけではありませんが、この方法で正規表現を使用する方法についてのヒント (私は初心者です)。

4

0 に答える 0