code: private String preparePattern(ILabel label) throws PipelineComponentException {
          StringBuilder result = new StringBuilder("");
          List<IToken> nlTokens = label.getTokens();
          for (int i = 0; i < nlTokens.size(); i++) {
              IToken nlToken = nlTokens.get(i);
              String tokenLabel = nlToken.getText();
              String posTag = nlToken.getPOSTag();
              //if there are brackets in the input label (but they should not be there!)
              //we pass them down...
              if ("(".equals(tokenLabel) || ")".equals(tokenLabel)) {
                  result.append(tokenLabel);
              } else {
                  if (null != posTag && (posTag.length() > 0)) {
                      result.append(posTag);
                      final String lowerCasedToken = tokenLabel.toLowerCase();
                      if (NLPToolsConstants.COORDINATING_CON.equals(posTag) && (",".equals(tokenLabel) || "and".equals(lowerCasedToken) || "or".equals(lowerCasedToken))) {//CC
                          result.append("_").append(lowerCasedToken);
                      }
                      result.append("|").append(Integer.toString(i)).append(" ");
                  } else {
                      if (log.isEnabledFor(Level.ERROR)) {
                          log.error("Empty POS tag for token " + tokenLabel);
                      }
                      throw new PipelineComponentException("Empty POS tag for token " + tokenLabel);
                  }
              }
          }
          return result.toString();
      }
docs: ( NN|1 CC_and|2 NN|3 ) NN|4