Ho cercato boost :: tokenizer e ho trovato che la documentazione è molto sottile. È possibile renderlo tokenize ad una stringa come "delfino-scimmia-babbuino" e rendere ogni parola un gettone, così come ogni doppio trattino un gettone? Dagli esempi ho visto solo i delimitatori a carattere singolo consentiti. La libreria non è abbastanza avanzata per delimitatori più complicati?Utilizzo di boost :: tokenizer con delimitatori di stringhe
risposta
Sembra che sarà necessario scrivere il proprio TokenizerFunction per fare ciò che si desidera.
Vedo. Speravo che ci fosse qualcosa di pre-fatto, ma immagino che speravo troppo. – Martin
Un'opzione è provare boost :: regex. Non sono sicuro delle prestazioni rispetto a un tokenizzatore personalizzato.
Questo è bello. Se funziona, ottiene il mio voto. :) –
utilizzando iter_split consente di utilizzare token di caratteri multipli. Il seguente codice dovrebbe produrre il seguente:
delfino
mon-chiave
babbuino
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/iter_find.hpp>
// code starts here
std::string s = "dolphin--mon-key--baboon";
std::list<std::string> stringList;
boost::iter_split(stringList, s, boost::first_finder("--"));
BOOST_FOREACH(std::string token, stringList)
{
std::cout << token << '\n'; ;
}
Questo ha lo svantaggio di creare una copia dell'intera stringa. Se la stringa che viene tokenizzata è grande, questo è un problema. Il tokenizzatore boost non lo fa. –
So che il tema è abbastanza vecchio, ma è dimostrato tra i primi link in Google quando ho cercare "BOOST tokenizer dalla stringa"
così vorrei aggiungere la mia variante di TokenizerFunction, nel caso in cui:
class FindStrTFunc
{
public:
FindStrTFunc() : m_str(g_dataSeparator)
{
}
bool operator()(std::string::const_iterator& next,
const std::string::const_iterator& end, std::string& tok) const
{
if (next == end)
{
return false;
}
const std::string::const_iterator foundToken =
std::search(next, end, m_str.begin(), m_str.end());
tok.assign(next, foundToken);
next = (foundToken == end) ? end : foundToken + m_str.size();
return true;
}
void reset()
{
}
private:
std::string m_str;
};
dopo possiamo creare
boost::tokenizer<FindStrTFunc> tok("some input...some other input");
e utilizzare, come al solito spinta tokenizzatore
l'implementazione non è l'ideale (potrebbe avere bug), è solo un esempio – Alek86
- 1. boost :: tokenizer vs boost :: split
- 2. Utilizzo di più tokenizer in Solr
- 3. Boost :: tokenizer separati da virgola (C++)
- 4. Utilizzo del taglio con delimitatori non stampabili
- 5. Utilizzo di future con boost :: asio
- 6. Utilizzo di boost :: iostreams :: tee_device?
- 7. Boost tokenizer per trattare la stringa quotata come un token
- 8. Utilizzo di stringhe di overloading
- 9. Split NSString con delimitatori multipli?
- 10. Stringhe tra virgolette con boost: spirit
- 11. Boost :: Dividi con intere stringhe come delimitatore
- 12. Utilizzo di stringhe e stringhe intercambiabili
- 13. Funzione tokenizer stringa Haskell
- 14. Esempi di utilizzo pratico di Boost :: MPL?
- 15. Utilizzo di stringhe in C++
- 16. Utilizzo dei delimitatori ASCII (29-31) nella programmazione moderna
- 17. Delimitatori di postfix Java
- 18. Utilizzo di Boost su Windows (Visual Studio)
- 19. Utilizzo di Boost con l'app universale per Windows 10
- 20. Utilizzo di boost :: tuple in tr1 :: hash
- 21. Come utilizzare il tokenizer predefinito di NLTK per ottenere span invece di stringhe?
- 22. Tokenizer di UITextInput, a cosa serve?
- 23. sqlite-fts3: tokenizer personalizzato?
- 24. con boost :: test di
- 25. Utilizzo della formattazione di stringhe Python con elenchi
- 26. Concatenazione di stringhe con stringhe()
- 27. Tokenizer vs filtri token
- 28. Tokenizer per full-text
- 29. tokenizer stanford nlp
- 30. Perché i delimitatori di stringhe di stringa non formattate devono essere inferiori a 16 caratteri?
Solo curioso il motivo per cui questo è contrassegnato wiki comunità? –
Ho pensato che avrebbe permesso ad altri di chiarire la mia domanda nel caso fosse un po 'diffusa. Forse dovrei leggere su quello che è, fino alla prossima volta. – Martin