public String printVector() {
    if (string == null) return null;
    if (string.length() == 0) return null;
    StringBuilder res = new StringBuilder();

    // token string (1)
    res.append(string);

    // lowercase string (1)
    res.append(" ").append(string.toLowerCase());

    // prefix (4)
    res.append(" " + TextUtilities.prefix(string, 1));
    res.append(" " + TextUtilities.prefix(string, 2));
    res.append(" " + TextUtilities.prefix(string, 3));
    res.append(" " + TextUtilities.prefix(string, 4));

    // suffix (4)
    res.append(" " + TextUtilities.suffix(string, 1));
    res.append(" " + TextUtilities.suffix(string, 2));
    res.append(" " + TextUtilities.suffix(string, 3));
    res.append(" " + TextUtilities.suffix(string, 4));

    // line information (1)
    res.append(" ").append(lineStatus);

    // capitalisation (1)
    if (digit.equals("ALLDIGIT")) res.append(" NOCAPS");
    else res.append(" ").append(capitalisation);

    // digit information (1)
    res.append(" ").append(digit);

    // character information (1)
    if (singleChar) res.append(" 1");
    else res.append(" 0");

    // lexical information (8)
    if (properName) res.append(" 1");
    else res.append(" 0");

    if (commonName) res.append(" 1");
    else res.append(" 0");

    if (firstName) res.append(" 1");
    else res.append(" 0");

    if (locationName) res.append(" 1");
    else res.append(" 0");

    if (year) res.append(" 1");
    else res.append(" 0");

    if (month) res.append(" 1");
    else res.append(" 0");

    if (email) res.append(" 1");
    else res.append(" 0");

    if (http) res.append(" 1");
    else res.append(" 0");

    // bibliographical information(4)
    if (isKnownJournalTitle || isKnownAbbrevJournalTitle) res.append(" 1");
    else res.append(" 0");

    if (isKnownConferenceTitle) res.append(" 1");
    else res.append(" 0");

    if (isKnownPublisher) res.append(" 1");
    else res.append(" 0");

    // punctuation information (1)
    res.append(" ").append(punctType); // in case the token is a punctuation (NO otherwise)

    // relative position in the sequence (1)
    res.append(" ").append(relativePosition);

    // label - for training data (1)
    if (label != null) res.append(" ").append(label).append("\n");
    else res.append(" 0\n");

    return res.toString();
  }