如果词可能有缩写、近义词或拼写差异,可以使用 字符串相似度算法
在C#中,如果不调用外部AI服务,可以通过以下几种本地方式来判断两个词是否属于同一类别或列表:
1. 字符串精确匹配(完全匹配)
如果只是简单的固定列表匹配,可以直接使用 Contains 或 Equals 方法:
List<string> category1 = new List<string> { "班级排名", "年级排名" };
string input = "年排";
bool isMatch = category1.Any(x => x.Contains(input) || input.Contains(x));
// 或者更严格的匹配
bool isExactMatch = category2.Contains(input);
2. 模糊匹配(相似度计算)
如果词可能有缩写、近义词或拼写差异,可以使用 字符串相似度算法,如:
- Levenshtein Distance(编辑距离)
- Jaro-Winkler Distance
- Cosine Similarity(词向量方式,但需要本地词库)
示例(使用 FuzzySharp 库,需安装 FuzzySharp NuGet 包):
using FuzzySharp;
List<string> category = new List<string> { "班级排名", "年级排名" };
string input = "年排";
// 返回相似度最高的词
var bestMatch = Process.ExtractOne(input, category, scorer: ScorerCache.Get<PreparedRatioScorer>());
if (bestMatch.Score > 80) // 设定阈值,如80%
{
Console.WriteLine($"匹配到: {bestMatch.Value}");
}
3. 正则表达式(模式匹配)
如果词有固定模式(如“XX排名”),可以用正则表达式:
string input = "年排";
bool isMatch = Regex.IsMatch(input, @"(班|年)级?排名?");
4. 本地词向量(Word Embeddings)
如果有本地词向量库(如 Word2Vec、FastText 的预训练模型),可以计算词相似度:
// 示例:使用 TensorFlow.NET 或 ML.NET 加载本地词向量模型(较复杂)
// 需要提前训练或下载词向量文件
推荐方案
- 如果词表固定且简单 → 方法1(精确匹配)
- 如果有缩写或相似词 → 方法2(FuzzySharp)
- 如果涉及复杂语义 → 方法4(本地词向量,但实现较复杂)
最简单的方式是 FuzzySharp,安装命令:
Install-Package FuzzySharp
这样可以避免调用AI,完全在本地运行。

浙公网安备 33010602011771号