Использование boost :: iterator_range в обработке естественного языка

Моя проблема связана с обработкой естественного языка (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;

Я также формирую объединенную строку значений ‘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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]