public void categoricalVariablesSimilarity()

in core/src/main/java/org/apache/sdap/mudrod/recommendation/structure/PODAACMetadataFeature.java [288:325]


  public void categoricalVariablesSimilarity(Map<String, Object> metadataA, Map<String, Object> metadataB, XContentBuilder contentBuilder) {
    // TODO Auto-generated method stub
    for (String variable : featureTypes.keySet()) {
      Integer type = featureTypes.get(variable);
      if (!type.equals(VAR_CATEGORICAL)) {
        continue;
      }

      double similarity = 0.0;
      Object valueA = metadataA.get(variable);
      Object valueB = metadataB.get(variable);
      if (valueA instanceof ArrayList) {
        ArrayList<String> aList = (ArrayList<String>) valueA;
        ArrayList<String> bList = (ArrayList<String>) valueB;
        if (aList != null && bList != null) {

          int lengthA = aList.size();
          int lengthB = bList.size();
          List<String> newAList = new ArrayList<>(aList);
          List<String> newBList = new ArrayList<>(bList);
          newAList.retainAll(newBList);
          similarity = (double)newAList.size() / lengthA;
        }

      } else if (valueA instanceof String) {
        if (valueA.equals(valueB)) {
          similarity = 1.0;
        }
      }

      try {
        contentBuilder.field(variable + "_Sim", similarity);
      } catch (IOException e) {
        // TODO Auto-generated catch block
        LOG.error("Categorical variables similarity calculation failed : ", e);
      }
    }
  }