Я разрабатываю систему документов, которая каждый раз, когда создается новый, она должна обнаруживать и отбрасывать дубликаты в базе данных, содержащей около 500 000 записей.Как проверить, содержится ли текст в другом?
В настоящее время я использую поисковую систему для извлечения 20 наиболее похожих документов и сравниваю их с новой, которую мы пытаемся создать. Проблема в том, что я должен проверить, похож ли новый документ (это легко с аналогичным_текстом), или даже если он содержится внутри другого текста, все эти операции, учитывая, что пользователь мог частично изменить текст (здесь проблема). Как я могу это сделать?
Например:
<?php
$new = "the wild lion";
$candidates = array(
'the dangerous lion lives in Africa',//$new is contained into this one, but has changed 'wild' to 'dangerous', it has to be detected as duplicate
'rhinoceros are native to Africa and three to southern Asia.'
);
foreach ($candidates as $candidate) {
if($candidate is similar or $new is contained in it) {
//Duplicated!!
}
}
Конечно, в моей системе документы больше чем 3 слов :)
Моя проблема заключается не в поиске похожих документов (я уже использую индекс для их поиска), это проверить, если текст содержится в другой. Эти алгоритмы работают только при сравнении одного текста с другим, но не обнаруживают, какой текстовый раздел наиболее похож на другой текст. –