在LINQPad中生成n-ary cartaesian产品

时间:2018-01-07 07:09:46

标签: c# string linqpad

void Main(string[] args)
{

    // Load model from file.
    var model = new Model();
    model.LoadVectors("model.bin");
    // Get 10 nearest words to user input
    while (true)
    {
        Console.Write("Input 1 > ");
        String word1 = Console.ReadLine();
        Console.Write(word1);

        String[] splitted = word1.Split(' ');

        List<String> set1 = new List<string>();
        List<String> set2 = new List<string>();

        for (int i = 0; i < splitted.Length; i++)
        {


            foreach (var item in model.NearestWords(splitted[0], 150))
            {
                set1.Add(item.Key);
            }

            foreach (var item in model.NearestWords(splitted[1], 150))
            {
                set2.Add(item.Key);
            }

        }

        List<String> combinations = set1.SelectMany(a => set2.Select(n => String.Concat(a, " ", n))).ToList();

        List<String> str = new List<String>();
        List<String> result = new List<String>();
        str = Alternate_titles.Select(o => o.Alternate_title).ToList();
        str = str.ConvertAll(d => d.ToLower());

        for (Int32 i = 0; i < combinations.Count; ++i){

            if(str.Contains(combinations[i])){

                result.Add(combinations[i]);

            }
        }

        var hash = new HashSet<string>(result);

        hash.Dump();

        Console.WriteLine();
    }
}

我编写的代码使用word2vec库(只是找到与输入词具有语义相似性的词)来匹配具有相似含义的职位。

如果我输入职位名称Software developer,则会在Software中存储前150个类似的set1字词,并在developer中存储set2的相似字词。

然后,List<String> combinations = set1.SelectMany(a => set2.Select(n => String.Concat(a, " ", n))).ToList();

此行在set1set2中生成字符串的二元cartaesian产品。

然后,

    for (Int32 i = 0; i < combinations.Count; ++i){

        if(str.Contains(combinations[i])){

            result.Add(combinations[i]);

        }
    }

此部分仅检查combination(cartaesian产品的结果)是否是我正在使用的数据库中的实际职位(在这种情况下为str)。

最后,它打印结果。

我的问题是,此代码仅限于二元cartaesian产品,但它适用于任何n-ary字符串。例如,它应该为Software developer intern执行相同的操作。

我必须修改哪部分代码才能使其灵活并使其适用于任何n-ary字符串?

0 个答案:

没有答案