НЛП - Улучшение времени выполнения и восстановление нечеткого соответствия строк

Я сделал алгоритм работы, но время работы очень ужасно. Да, я знаю с самого начала, что это будет ужасно, но не так сильно. Всего за 200000 записей программа работает более часа.

В основном то, что я делаю, это:

for each searchfield in search fields
    for each sample in samples
        do a q-gram matching
    if there are matches then return it
    else
        split the searchfield into uniwords
        for each sample in samples
            split sample into uniwords
            for each uniword in samples
                if the uniword is a known abbreviation
                    then search the dictionary for its full word or other known abbr
                else do a jaro-winkler matching
            average the distances of all the uniwords
            if the average is above threshold then make it as a match and break
        end for
        if there is a match make a comment that it matched one of the samples partially
    end else
end for

Да, этот код очень удобен для циклов. Я использую грубую силу, потому что отзыв очень важен. Итак, мне интересно, как я могу сделать это быстрее, так как я не только запускаю его для 200000 данных для миллионов данных, а компьютеры клиента не являются высокопроизводительными (1 ГБ-2 ГБ в Ram Pentium 4 или Dual-Core, компьютер, на котором я тестирую эту программу - это Dual Core с 4 ГБ оперативной памяти). Я сталкивался с TF/IDF, но я не знаю, будет ли этого достаточно. И мне интересно, как Google может выполнять поиск в режиме реального времени.

Заранее спасибо!

Изменить: Эта программа является фильтром данных. Из 200 000 фиктивных данных (фактические данные около 12M) я должен отфильтровать данные, которые не имеют отношения к выборкам (500 фиктивных образцов, я до сих пор не знаю, сколько фактического количества образцов).

При данных фиктивных данных и образцах время работы составляет около 1 часа, но, повозившись здесь и там, я успешно уменьшил его до 10-15 минут. Я уменьшил его, сгруппировав поля и образцы, начинающиеся с одного и того же символа (исключая специальные и не имеющие значения слова, например, a, an), и сопоставив поля с образцом с одним и тем же первым символом. Я знаю, что там есть проблема. Что если поле было написано с ошибкой у первого символа? Но я думаю, что число их ничтожно мало. Образцы написаны правильно, так как он всегда поддерживается.

1 ответ

Какой у вас язык программирования? Я думаю, использование q=2 или 3 достаточно. Также я предложил перейти от униформы к более высоким степеням.

Другие вопросы по тегам