using System; using System.Collections.Generic; using System.Linq; namespace BoreholeExtract { public class KeywordMatcher { // 缓存字典:Key是枚举,Value是用户配置的关键词列表 private readonly Dictionary> _keywordMap; // 构造函数:传入 ViewModel 中的数据 public KeywordMatcher(IEnumerable dashboardItems) { _keywordMap = new Dictionary>(); foreach (var item in dashboardItems) { // 过滤掉空字符串,防止 txt.Contains("") 永远为 true var validKeywords = item.Items .Where(k => !string.IsNullOrWhiteSpace(k)) .ToList(); if (validKeywords.Count > 0) { _keywordMap[item.Id] = validKeywords; } } } /// /// 判断文本是否包含该 ID 下的任意一个关键词 /// public bool IsMatch(Identify id, string text) { if (string.IsNullOrEmpty(text)) return false; // 如果配置里没有这个 ID,直接返回 false if (!_keywordMap.TryGetValue(id, out var keywords)) return false; // 核心逻辑:只要包含任意一个关键词,就返回 true // StringComparison.OrdinalIgnoreCase 可以忽略大小写(可选) return keywords.Any(k => text.Contains(k, StringComparison.OrdinalIgnoreCase)); } } }