Я использовал sklearn NearestNeighbors для сопоставления имен, и в определенный момент результаты становятся не выровненными. Мой стандартизированный список имен составляет сотни миллионов. Мой список имен, которые будут сопоставлены, значительно меньше, но все еще может быть в диапазоне от 250 до 500 тысяч. Кажется, что после определенной точки индекс начинает сдвигаться на 1 или более.
nbrs = NearestNeighbors(n_neighbors=1, n_jobs=-1).fit(tfidf)
unique_org = set(names['VariationName'].values) # set used for increased performance
#matching query:
def getNearestN(query):
queryTFIDF_ = vectorizer.transform(query)
distances, indices = nbrs.kneighbors(queryTFIDF_)
return distances, indices
print('Getting nearest n...')
distances, indices = getNearestN(unique_org)
unique_org = list(unique_org) #need to convert back to a list
print('Finding matches...')
matches = []
for i,j in enumerate(indices):
temp = [round(distances[i][0],2), clean_org_names.values[j][0][0],unique_org[i]]
matches.append(temp)
print('Building data frame...')
matches = pd.DataFrame(matches, columns=['Match confidence (lower is better)','Matched name','Original name'])
print('Data frame built')
Похоже, что когда мой стандартизированный список превышает 80 тыс., Он начинает сдвигать результаты вниз.
«грязное имя» VITALI, ANGELO (содержит запятую)
VITALI, ANGELO
Стандартизированный список имен может включать эти (без запятой)
VITALI ANGELO
SENSABLE TECHNOLOGIES INC
После запуска через вышеуказанное соответствие приведенный ниже результат показывает, что VITALI, ANGELO почти идеально подходит для SENSABLE TECNOLOGIES IN C, потому что индекс сместился на одну единицу ... Я думаю.
0.00 SENSABLE TECHNOLOGIES INC VITALI, ANGELO
Возможно ли, что размер или количество записей превышает пределы этой матрицы, и это как-то портит индексы?