大量更新
This commit is contained in:
46
BoreholeExtract/KeywordMatcher.cs
Normal file
46
BoreholeExtract/KeywordMatcher.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace BoreholeExtract
|
||||
{
|
||||
public class KeywordMatcher
|
||||
{
|
||||
// 缓存字典:Key是枚举,Value是用户配置的关键词列表
|
||||
private readonly Dictionary<Identify, List<string>> _keywordMap;
|
||||
|
||||
// 构造函数:传入 ViewModel 中的数据
|
||||
public KeywordMatcher(IEnumerable<CategoryWrapper> dashboardItems)
|
||||
{
|
||||
_keywordMap = new Dictionary<Identify, List<string>>();
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断文本是否包含该 ID 下的任意一个关键词
|
||||
/// </summary>
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user