Skip to content
OpenNMT tokenization library
Branch: master
Clone or download
Latest commit adf1e7e Jun 13, 2019

Build Status


Tokenizer is a generic and customizable text tokenization library for C++ and Python with minimal dependencies.


By default, the Tokenizer applies a simple tokenization based on unicode types. It can be customized in several ways:

  • Customizable reversible tokenization
    Marking joints or spaces by annotating tokens or injecting modifier characters.
  • Subword tokenization
    Support for BPE and SentencePiece models.
  • Advanced text segmentation
    Split digits, segment on case or alphabet change, segment each character of selected alphabets, etc.
  • Case management
    Lowercase text and return case information as a separate feature or inject case modifier tokens.
  • Protected sequences
    Sequences can be protected against tokenization with the special characters "⦅" and "⦆".

See the available options for an overview of supported features.


The Tokenizer can be used in Python, C++, or command line. Each mode exposes the same set of options.

Python API

import pyonmttok

tokenizer = pyonmttok.Tokenizer("conservative", joiner_annotate=True)
tokens, _ = tokenizer.tokenize("Hello World!")

See the Python API description for more details.


#include <onmt/Tokenizer.h>

using namespace onmt;

int main() {
  Tokenizer tokenizer(Tokenizer::Mode::Conservative, Tokenizer::Flags::JoinerAnnotate);
  std::vector<std::string> tokens;
  tokenizer.tokenize("Hello world!", tokens);

See the Tokenizer class for more details.

Command line clients

$ echo "Hello World!" | cli/tokenize --joiner_annotate
Hello World ■!
$ echo "Hello World!" | cli/tokenize --joiner_annotate | cli/detokenize
Hello World!

See the -h flag to list the available options.




CMake and a compiler that supports the C++11 standard are required to compile the project.

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=<Release or Debug> ..

It will produce the dynamic library libOpenNMTTokenizer and tokenization clients in cli/.

  • To compile only the library, use the -DLIB_ONLY=ON flag.
  • To compile with the ICU unicode backend, use the -DWITH_ICU=ON flag.


Tests are using the Google Test framework. Once installed, simply compile the project and run:

test/onmt_tokenizer_test ../test/data
You can’t perform that action at this time.