|
|
@@ -9,13 +9,13 @@ import com.tzld.longarticle.recommend.server.service.recommend.filter.FilterPara
|
|
|
import com.tzld.longarticle.recommend.server.service.recommend.filter.FilterResult;
|
|
|
import com.tzld.longarticle.recommend.server.service.recommend.filter.FilterStrategy;
|
|
|
import com.tzld.longarticle.recommend.server.util.DateUtils;
|
|
|
+import com.tzld.longarticle.recommend.server.util.TitleSimilarCheckUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -50,6 +50,35 @@ public class TodayPublishStrategy implements FilterStrategy {
|
|
|
List<String> todayPublishFailIdList = todayPublishFailList.stream().map(PublishContent::getId).collect(Collectors.toList());
|
|
|
result.removeAll(todayPublishFailIdList);
|
|
|
}
|
|
|
+ // 标题相似度过滤
|
|
|
+ if (CollectionUtils.isNotEmpty(result)) {
|
|
|
+ List<String> todayPublishContentIds = new ArrayList<>();
|
|
|
+ if (CollectionUtils.isNotEmpty(todayPublishContentList)) {
|
|
|
+ todayPublishContentList.stream().map(PublishContent::getId).forEach(todayPublishContentIds::add);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(todayPublishFailList)) {
|
|
|
+ todayPublishFailList.stream().map(PublishContent::getId).forEach(todayPublishContentIds::add);
|
|
|
+ }
|
|
|
+ List<String> todayPublishTitles = aigcBaseMapper.getTodayPublishContentTitles(todayPublishContentIds);
|
|
|
+ if (CollectionUtils.isNotEmpty(todayPublishTitles)) {
|
|
|
+ Map<String, Content> contentMap = param.getContents().stream()
|
|
|
+ .collect(Collectors.toMap(Content::getId, c -> c, (a, b) -> a));
|
|
|
+ List<Set<Character>> todayTitleCache = TitleSimilarCheckUtil.makeCache(todayPublishTitles);
|
|
|
+ List<String> titleFilterResult = new ArrayList<>();
|
|
|
+ List<Content> filteredContents = new ArrayList<>();
|
|
|
+ for (String contentId : result) {
|
|
|
+ Content content = contentMap.get(contentId);
|
|
|
+ if (content != null && content.getTitle() != null
|
|
|
+ && TitleSimilarCheckUtil.isDuplicateContentByCache(content.getTitle(), todayTitleCache, TitleSimilarCheckUtil.SIMILARITY_THRESHOLD)) {
|
|
|
+ filteredContents.add(content);
|
|
|
+ } else {
|
|
|
+ titleFilterResult.add(contentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result = titleFilterResult;
|
|
|
+ filterResult.setFilterContent(filteredContents);
|
|
|
+ }
|
|
|
+ }
|
|
|
filterResult.setContentIds(result);
|
|
|
log.info("TodayPublishStrategy filter cost time:{}", System.currentTimeMillis() - start);
|
|
|
return filterResult;
|