Я работаю над приложением, которое использует OCR для получения текста с изображения и выполняет поиск текста в базе данных MYSQL, содержащей ~ 10000 записей. В большинстве случаев текст, отсканированный с изображения, не является точным (пропущенные или неправильно введенные слова), поэтому я использую Fuse для нечеткого сопоставления ... он хорошо работает с небольшими списками, но работает очень медленно - это занимает 5 минут, чтобы сканировать до 10K записей и не настолько точен (около 50% совпадений).
Кто-нибудь может порекомендовать библиотеку или метод для того, чтобы взять неправильно введенный или неправильно упорядоченный текст из сканирования OCR и сопоставить его с правильной базой данных запись?
Вот код, который я использую:
// Setting variables
private var allBooks = [Book]()
let fuse = Fuse()
var bookNames = [String]()
var OCRArray : [String] = []
// Get all books from database
sqlConfig.configureMySQL()
BooksProvider().loadBooks { books in
self.allBooks = books
}
// Put list of books in string array in order for fuse search to work
for object in allBooks {
let strName = object.name ?? ""
bookNames.append(strName)
}
// Function that iterates thru each line of OCR scan that is stored in OCRArray
// This takes several 5+ to complete
func fuseMatch() {
for x in 0..<OCRArray.count {
var results = fuse.search(OCRArray[x], in: bookNames)
var fuseWine:String
if results.first != nil {
fuseMatch = bookNames[results[0].index]
} else {
fuseMatch = "Not found."
}
print(x, " | ", OCRArray[x], " | ", fuseMatch)
}
}