![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| knyshow |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: нет Всего: 2 |
Имеется большая база текстов (чуть больше 11000 текстов, средний размер текста 50Кб).
Часть текстов идентичны и отличаются только переносами строк, регистром символов, отступами от начала строки (может быть, а может не быть отступ в виде символа табуляции или пробела или нескольких табуляций/пробелов). Часть текстов совпадают за исключением некоторой части (один текст идет полностью, а второй может быть без нескольких абзацев). Вопрос: есть ли способ максимально автоматически найти совпадения? Есть ли алгоритм неточного сравнения строк, при котором на результат сравнения (скорее всего выраженный в %) не будут влиять знаки препинания, пробелы, табуляция? Результаты такого поиска будут перепроверяться вручную. дубликаты будут удаляться тоже ручками, но искать совпадения вручную по всей базе - жестоко :( Спасибо. Это сообщение отредактировал(а) knyshow - 30.7.2010, 17:54 |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: нет Всего: 28 |
||||
|
||||
| knyshow |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: нет Всего: 2 |
прочитал. причем тут замена?
|
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: нет Всего: 28 |
Вот к примеру, как будет работать поиск без учета пробелов и запятых:
Ну это общая схема, можно и регулярками. Это сообщение отредактировал(а) CruorVult - 30.7.2010, 20:17 |
|||
|
||||
| VictorTsaregorodtsev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: нет Всего: 8 |
По частотному словарю, например. Ну и 11000 текстов желательно будет дополнительно кластеризовать каким-нибудь алгоритмом автоматической классификации - чтобы искать тексты, ближайшие к обрабатываемому тексту, не среди всей большой кучи, а только среди кластера, к которому принадлежит этот искомый текст (ну и еще среди второго по близости к этому тексту кластера - вдруг текст окажется на "границе" и реально ближайший к нему другой текст будет в соседнем кластере) Да - в тему не вернусь, я её случайно увидел среди новых тем, и отметился чисто ради саморекламы. |
|||
|
||||
| knyshow |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: нет Всего: 2 |
CruorVult, тут есть еще и такая проблема. |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: нет Всего: 28 |
1 текст(фильтрованый): одинтекстидетполностьюавторойможетбытьбезнесколькихабзацев
2 текст(фильтрованый): полностьюавторойможетбытьбезнесколькихабзацев совпадение: одинтекстидетполностьюавторойможетбытьбезнесколькихабзацев В общем нужно разбить текст, по которому будут искатся совпадения, на куски по абзацам или предложениям(в зависимости от нужной точности), отфильтровать и по каждому куску искать совпадения(использовав фильтрацию). Не знаю какие там есть алгоритмы, но я бы делал так. Я так понял нужно один раз отсеять тексты? тогда скорость выполнения не играет большой роли. |
|||
|
||||
| knyshow |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: нет Всего: 2 |
Не то все :(
Пасип, буду искать дальше, о результатах доложу. ЗЫ: время на самом деле роли не играет. |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: нет Всего: 28 |
Что именно не то? 1) вытягиваешь все тексты. 2) разбиваешь текст по предложениям( по "\r\n", ".", если надо то "\t" ) и сравниваешь каждое предложение данного теста с каждым предложением всех остальных.(предварительно отфильтровав ненужные знаки) 3) подситываешь количество совпавших предложений( вот тебе и процент от общего количества предложений в тексте). 4) формируешь массив данных, что-то типа:
Главное немного включить мозги и не надо никуда бегать за какими-то алгоритмами |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
сам с аппаратом сравнения не знаком. просто поискал в google за тебя:
алгоритм шинглов: раз и два алгоритм Рабина-Карпа |
|||
|
||||
| knyshow |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: нет Всего: 2 |
Сорри что пропал.
Задачу решил следующим образом: - из базы в массив выгребаются все тексты; - из текстов удаляются все символы, не отвечающие шаблону [A-Za-zА-Яа-я0-9]; - ну, а дальше самое смешное:
Дальше совпадения, обнаруженные скриптом, анализировались редакторами. По их отзывам, нет ни одного ложного дубля. CruorVult, спасибо за идею!
skyboy, поверь, я там был) данные алгоритмы конфузятся при сравнении текстов, идентичных изначально, но в случае, когда один текст представляет собой мАлую часть второго. Это сообщение отредактировал(а) knyshow - 12.8.2010, 20:00 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |