code: @Override
      protected double scoreImpl(List<Word> words1, List<Word> words2){
          //用词频来标注词的权重
          taggingWeightWithWordFrequency(words1, words2);
          //计算SimHash
          String simHash1 = simHash(words1);
          String simHash2 = simHash(words2);
          //计算SimHash值之间的汉明距离
          int hammingDistance = hammingDistance(simHash1, simHash2);
          if(hammingDistance == -1){
              LOGGER.error("文本1：" + words1.toString());
              LOGGER.error("文本2：" + words2.toString());
              LOGGER.error("文本1SimHash值：" + simHash1);
              LOGGER.error("文本2SimHash值：" + simHash2);
              LOGGER.error("文本1和文本2的SimHash值长度不相等，不能计算汉明距离");
              return 0.0;
          }
          int maxDistance = simHash1.length();
          double score = (1 - hammingDistance / (double)maxDistance);
          if(LOGGER.isDebugEnabled()){
              LOGGER.debug("文本1：" + words1.toString());
              LOGGER.debug("文本2：" + words2.toString());
              LOGGER.debug("文本1SimHash值："+simHash1);
              LOGGER.debug("文本2SimHash值："+simHash2);
              LOGGER.debug("hashBitCount："+hashBitCount);
              LOGGER.debug("SimHash值之间的汉明距离："+hammingDistance);
              LOGGER.debug("文本1和文本2的相似度分值：1 - "+hammingDistance+" / (double)"+maxDistance+"="+score);
          }
          return score;
      }
docs: 计算相似度分值
  @param words1 词列表1
  @param words2 词列表2
  @return 相似度分值