code: public static void parsePattern(List<NT> ntList, List<Vertex> vertexList, final WordNet wordNetOptimum, final WordNet wordNetAll)
      {
  //        ListIterator<Vertex> listIterator = vertexList.listIterator();
          StringBuilder sbPattern = new StringBuilder(ntList.size());
          for (NT nt : ntList)
          {
              sbPattern.append(nt.toString());
          }
          String pattern = sbPattern.toString();
          final Vertex[] wordArray = vertexList.toArray(new Vertex[0]);
          trie.parseText(pattern, new AhoCorasickDoubleArrayTrie.IHit<String>()
          {
              @Override
              public void hit(int begin, int end, String keyword)
              {
                  StringBuilder sbName = new StringBuilder();
                  for (int i = begin; i < end; ++i)
                  {
                      sbName.append(wordArray[i].realWord);
                  }
                  String name = sbName.toString();
                  // 对一些bad case做出调整
                  if (isBadCase(name)) return;
  
                  // 正式算它是一个名字
                  if (HanLP.Config.DEBUG)
                  {
                      System.out.printf("识别出机构名：%s %s\n", name, keyword);
                  }
                  int offset = 0;
                  for (int i = 0; i < begin; ++i)
                  {
                      offset += wordArray[i].realWord.length();
                  }
                  wordNetOptimum.insert(offset, new Vertex(Predefine.TAG_GROUP, name, ATTRIBUTE, WORD_ID), wordNetAll);
              }
          });
      }
docs: 模式匹配
  
  @param ntList         确定的标注序列
  @param vertexList     原始的未加角色标注的序列
  @param wordNetOptimum 待优化的图
  @param wordNetAll