You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改LINQPad代码以支持n元笛卡尔积实现多词职位匹配

解决方案:支持任意n元职位标题的笛卡尔积匹配

你的核心需求是把原来仅支持二元输入的逻辑扩展到任意n元,主要需要修改两个关键部分:动态收集每个输入词的相似词集合,以及实现通用的多集合笛卡尔积生成逻辑。下面是具体的修改方案和完整代码:

关键修改点

  • 移除硬编码的splitted[0]、splitted[1]处理逻辑,改为循环遍历所有输入分词
  • 实现一个通用的笛卡尔积扩展方法,支持任意数量的集合组合
  • 调整相似词集合的存储结构,从单独的set1/set2改为集合列表,适配多词场景

修改后的完整代码

using System;
using System.Collections.Generic;
using System.Linq;

void Main(string[] args) { 
    // Load model from file. 
    var model = new Model(); 
    model.LoadVectors("model.bin"); 
    // Get nearest words combinations matching database titles
    while (true) { 
        Console.Write("Input > "); 
        string input = Console.ReadLine(); 
        if (string.IsNullOrWhiteSpace(input)) break; // 增加退出逻辑,提升交互体验
        
        string[] splitted = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
        if (splitted.Length == 0) continue;

        // 动态收集每个输入词的前150个相似词集合
        var similarWordSets = new List<List<string>>();
        foreach (var word in splitted) {
            var similarWords = model.NearestWords(word, 150)
                                   .Select(item => item.Key)
                                   .ToList();
            similarWordSets.Add(similarWords);
        }

        // 生成所有集合的笛卡尔积,转成空格分隔的字符串
        var combinations = similarWordSets.CartesianProduct()
                                         .Select(words => string.Join(" ", words))
                                         .ToList();

        // 匹配数据库中的职位标题(简化原有逻辑)
        var dbTitles = Alternate_titles.Select(o => o.Alternate_title.ToLower())
                                       .ToList();
        var result = combinations.Intersect(dbTitles)
                                 .Distinct()
                                 .ToList();

        result.Dump(); 
        Console.WriteLine(); 
    } 
}

// 扩展方法:实现任意数量集合的笛卡尔积计算
public static class EnumerableExtensions {
    public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) {
        IEnumerable<IEnumerable<T>> result = new[] { Enumerable.Empty<T>() };
        foreach (var sequence in sequences) {
            result = from seq in result
                     from item in sequence
                     select seq.Concat(new[] { item });
        }
        return result;
    }
}

代码说明

  1. 动态相似词收集:循环处理输入的每个分词,把每个词的相似词集合存入similarWordSets列表,不管输入是1个、2个还是N个词都能适配。
  2. 通用笛卡尔积方法:通过扩展方法CartesianProduct实现了任意数量集合的笛卡尔积计算,这是实现n元支持的核心。它通过迭代每个输入集合,逐步构建所有可能的组合。
  3. 简化匹配逻辑:用Intersect替代了原来的循环判断,代码更简洁高效,同时天然保留了去重效果。
  4. 交互优化:增加了输入为空时的退出逻辑,避免无限空循环。

这样修改后,不管你输入“Software developer”还是“Software developer intern”甚至更长的职位短语,代码都能正确生成所有可能的相似词组合并匹配数据库中的标题。

内容的提问来源于stack exchange,提问作者Dawn17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:38:37