|
@@ -2,6 +2,7 @@ package examples.extractor.v20250218;
|
|
|
|
|
|
import examples.extractor.ExtractorUtils;
|
|
|
import examples.extractor.RankExtractorFeature_20240530;
|
|
|
+import examples.utils.SimilarityUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import java.util.Arrays;
|
|
@@ -133,7 +134,100 @@ public class ExtractItemFeature {
|
|
|
|
|
|
}
|
|
|
|
|
|
- public static void handleC6ToC7(Map<String, Object> c6Feature, Map<String, Object> c7Feature, Map<String, Object> featureMap) {
|
|
|
+ public static Map<String, Map<String, String[]>> handleC6ToC7(Map<String, Object> c6Feature, Map<String, Object> c7Feature) {
|
|
|
+ Map<String, Map<String, String[]>> resultMap = new HashMap<>();
|
|
|
|
|
|
+ Map<String, Map<String, Object>> featureMaps = new HashMap<>();
|
|
|
+ featureMaps.put("c6", c6Feature);
|
|
|
+ featureMaps.put("c7", c7Feature);
|
|
|
+ List<String> indexList = Arrays.asList("share", "return");
|
|
|
+ for (Map.Entry<String, Map<String, Object>> entry : featureMaps.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ Map<String, Object> feature = entry.getValue();
|
|
|
+ for (String index : indexList) {
|
|
|
+ if (feature.containsKey(index)) {
|
|
|
+ Map<String, String[]> cfMap = new HashMap<>();
|
|
|
+ String[] entries = feature.get(index).toString().split(",");
|
|
|
+ for (String e : entries) {
|
|
|
+ String[] rList = e.split(":");
|
|
|
+ if (rList.length >= 4) {
|
|
|
+ String vid = rList[0];
|
|
|
+ String value1 = rList[1];
|
|
|
+ String value2 = rList[2];
|
|
|
+ String value3 = rList[3];
|
|
|
+ String[] strs = {value1, value2, value3};
|
|
|
+ cfMap.put(vid, strs);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultMap.put(key, cfMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void handleD3(Map<String, Object> d3Feature, Map<String, Object> featureMap) {
|
|
|
+ for (String index : Arrays.asList("exp", "return_n", "rovn")) {
|
|
|
+ double value = Double.parseDouble(d3Feature.getOrDefault(index, "0").toString());
|
|
|
+ featureMap.put("d3_" + index, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void handleD1(Map<String, Object> d4Feature, Map<String, Object> featureMap) {
|
|
|
+ double rosCfScores = Double.parseDouble(d4Feature.getOrDefault("ros_cf_score", "0").toString());
|
|
|
+ featureMap.put("d1_ros_cf_score", rosCfScores);
|
|
|
+ double rovCfScores = Double.parseDouble(d4Feature.getOrDefault("rov_cf_score", "0").toString());
|
|
|
+ featureMap.put("d1_rov_cf_score", rovCfScores);
|
|
|
+
|
|
|
+ double rosCfRank = Double.parseDouble(d4Feature.getOrDefault("ros_cf_rank", "0").toString());
|
|
|
+ featureMap.put("d1_ros_cf_rank", 1 / rosCfRank);
|
|
|
+ double rovCfRank = Double.parseDouble(d4Feature.getOrDefault("rov_cf_rank", "0").toString());
|
|
|
+ featureMap.put("d1_rov_cf_rank", 1 / rovCfRank);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void handleD2(Map<String, Object> d5Feature, Map<String, Object> featureMap) {
|
|
|
+ double score = Double.parseDouble(d5Feature.getOrDefault("score", "0").toString());
|
|
|
+ featureMap.put("d2_score", score);
|
|
|
+
|
|
|
+ double rank = Double.parseDouble(d5Feature.getOrDefault("rank", "0").toString());
|
|
|
+ featureMap.put("d2_rank", 1 / rank);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void handleVideoSimilarity(Map<String, Object> videoFeature, Map<String, Object> headVideoFeature, Map<String, Object> featureMap) {
|
|
|
+ String headVideoTitle = headVideoFeature.getOrDefault("title", "").toString();
|
|
|
+ String headVideoMergeCate2 = headVideoFeature.getOrDefault("merge_second_level_cate", "").toString();
|
|
|
+ String headVideoMergeCate1 = headVideoFeature.getOrDefault("merge_first_level_cate", "").toString();
|
|
|
+ String headVideoFestiveLabel2 = headVideoFeature.getOrDefault("festive_label2", "").toString();
|
|
|
+
|
|
|
+
|
|
|
+ String videoTitle = videoFeature.getOrDefault("title", "").toString();
|
|
|
+ String videoMergeCate2 = videoFeature.getOrDefault("merge_second_level_cate", "").toString();
|
|
|
+ String videoMergeCate1 = videoFeature.getOrDefault("merge_first_level_cate", "").toString();
|
|
|
+ String videoFestiveLabel2 = videoFeature.getOrDefault("festive_label2", "").toString();
|
|
|
+
|
|
|
+ double titleSimilarity = ExtractItemFeature.calcTxtSimilarity(headVideoTitle, videoTitle);
|
|
|
+ double headTitleAndMerge1Similarity = ExtractItemFeature.calcTxtSimilarity(headVideoTitle, videoMergeCate1);
|
|
|
+ double headTitleAndMerge2Similarity = ExtractItemFeature.calcTxtSimilarity(headVideoTitle, videoMergeCate2);
|
|
|
+ double headTitleAndFestiveSimilarity = ExtractItemFeature.calcTxtSimilarity(headVideoTitle, videoFestiveLabel2);
|
|
|
+ double merge1Similarity = ExtractItemFeature.calcTxtSimilarity(headVideoMergeCate1, videoMergeCate1);
|
|
|
+ double merge2Similarity = ExtractItemFeature.calcTxtSimilarity(headVideoMergeCate2, videoMergeCate2);
|
|
|
+ double festiveSimilarity = ExtractItemFeature.calcTxtSimilarity(headVideoFestiveLabel2, videoFestiveLabel2);
|
|
|
+
|
|
|
+ featureMap.put("title_sim", titleSimilarity);
|
|
|
+ featureMap.put("head_title_merge1_sim", headTitleAndMerge1Similarity);
|
|
|
+ featureMap.put("head_title_merge2_sim", headTitleAndMerge2Similarity);
|
|
|
+ featureMap.put("head_title_festive_sim", headTitleAndFestiveSimilarity);
|
|
|
+ featureMap.put("merge1_sim", merge1Similarity);
|
|
|
+ featureMap.put("merge2_sim", merge2Similarity);
|
|
|
+ featureMap.put("festive_sim", festiveSimilarity);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static double calcTxtSimilarity(String txt1, String txt2) {
|
|
|
+ if (StringUtils.isBlank(txt1) || StringUtils.isBlank(txt2)) {
|
|
|
+ return 0d;
|
|
|
+ }
|
|
|
+ return SimilarityUtils.word2VecSimilarity(txt1, txt2);
|
|
|
}
|
|
|
}
|