НЛП - Улучшение времени выполнения и восстановление нечеткого соответствия строк
Я сделал алгоритм работы, но время работы очень ужасно. Да, я знаю с самого начала, что это будет ужасно, но не так сильно. Всего за 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 достаточно. Также я предложил перейти от униформы к более высоким степеням.