Самый быстрый способ нечеткого сопоставления двух CSV-файлов - PullRequest
0 голосов
/ 07 марта 2020

Я написал очень простую программу, использующую пакет nuget в c# для чтения в 2 CSV-файлах и нечеткого сопоставления их и вывода нового CSV-файла со всеми совпадениями. Проблема в том, что мне нужно, чтобы программа могла читать и сравнивать файлы размером до 700 КБ и сравнивать их до 100 КБ. Я не смог найти способ ускорить процесс. Есть ли способ, которым я могу сделать это? Я даже буду использовать другой язык, если это будет необходимо.

Вы можете игнорировать весь закомментированный код, который он только что использовал, когда я использовал его в целях тестирования. Извините, я более новый программист.

Функция чтения CSV предназначена для чтения в CSV. остальное - код внутри другой функции, где я передаю строковые массивы, чтобы передать их через fuzzymatch

static string[] ReadCSV(string path)
{
    List<string> name = new List<string>();
    List<string> address = new List<string>();
    List<string> city = new List<string>();
    List<string> state = new List<string>();
    List<string> zip = new List<string>();

    using (var reader = new StreamReader(path))
    {
        reader.ReadLine();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(',');

            name.Add(values[0] +", "+ values[1]);
            //address.Add(values[1]);
            //city.Add(values[2]);
            //state.Add(values[3]);
            //zip.Add(values[4]);

        }
    }

    string[] name1 = name.ToArray();

    return name1;
    //foreach (var item in name)
    //{
    //    Console.WriteLine(item.ToString());
    //}
}


 StringBuilder csvcontent = new StringBuilder();
    string csvpath = @"C:\Users\bigel\Documents\outputtest.csv";
    csvcontent.AppendLine("Name,Address,Match");

    //Console.WriteLine("Levenshtein Edit Distance:");
    int x = 1;
    foreach (var name in string1)
    {
        for (int i = 0; i < length; i++)
        {
            int leven = match[i].LevenshteinDistance(name);
            //Console.WriteLine(match[i] + "\t{0} against {1}", leven, name);
            if (leven <= 7)
            {
                output[i] = input[i] + ",match";
                csvcontent.AppendLine(output[i]);

                //Console.WriteLine(match[i] + " " + leven + " against " + name + " is a Match");
                //Console.WriteLine(output[i]);
            }
            else
            {
                if (i == 500)
                {

                    Console.WriteLine(x);
                    x++;

                }
            }
        }

    }
    File.AppendAllText(csvpath, csvcontent.ToString());
...