11
votes

Utilisation de boost :: Tokenizer avec délimiteurs de chaîne

J'ai cherché Boost :: Tokenizer et j'ai constaté que la documentation est très mince. Est-il possible de faire de la goûte une chaîne telle que "Dolphin - Monkey - Baboon" et faire chaque mot un jeton, ainsi que chaque double tiret un jeton? Des exemples que je n'ai vu que des délimiteurs de caractères unique autorisés. La bibliothèque n'est-elle pas suffisamment avancée pour des délimiteurs plus compliqués?


2 commentaires

Juste curieux pourquoi c'est marqué Wiki communautaire?


Je pensais que cela permettrait aux autres de clarifier ma question au cas où il était un peu diffus. Je devrais peut-être lire ce qu'il est, jusqu'à la prochaine fois.


4 Réponses :


0
votes

On dirait que vous devrez écrire votre propre TokenizerFunction faire ce que vous voulez.


1 commentaires

Je vois. J'espérais qu'il y aurait quelque chose de pré-fabriqué, mais je suppose que j'espérais trop.



1
votes

Une option est d'essayer Boost :: Regex. Pas sûr de la performance par rapport à un tokéniseur personnalisé.

std::string s = "dolphin--monkey--baboon";

boost::regex re("[a-z|A-Z]+|--");
boost::sregex_token_iterator iter(s.begin(), s.end() , re, 0);
boost::sregex_token_iterator end_iter;

while(iter != end_iter)
{
    std::cout << *iter << '\n';
    ++iter;
}


0 commentaires

10
votes

Utilisation iter_split vous permet d'utiliser plusieurs jetons de caractères. Le code ci-dessous produirait les éléments suivants:
de
Dauphin
MON-KEY
Baboon
xxx


1 commentaires

Cela a l'inconvénient de créer une copie de la chaîne entière. Si la chaîne étant tokenized est grande, c'est un problème. Le tokéniseur de boost ne fait pas cela.



2
votes

Je sais que le thème est assez vieux, mais il est montré dans les principaux liens de Google lorsque je recherche "Boost tokenizer par chaîne"

Donc, je vais ajouter ma variante de TokenizerFunction, juste au cas où: xxx

après que nous puissions créer xxx

et utiliser, comme un tokéniseur de boost habituel


1 commentaires

La mise en œuvre n'est pas idéale (pourrait avoir des bugs), c'est juste un exemple