Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сравнение двух и более текстов

9.9K
21 октября 2008 года
De_Montale
80 / / 23.08.2007
Добрый день, коллеги. Что-то я не могу придумать решение для задачи...К примеру есть два текста. В идеале их будет много. Собственно, вопрос - по какому принципу я могу узнать процент "схожести" одного текста с другим...В идеале это БД и....так сказать, нужно будет узнать кто у кого списывал. Язык программирования не важен. Интересует сам алгоритм...Или идея...Или уже готовое решение, дабы не изобретать квадроцикл...

Заранее спасибо.
4.3K
21 октября 2008 года
flat
142 / / 27.12.2005
В PHP, например, есть такая функция levenshtein.
288
21 октября 2008 года
nikitozz
1.2K / / 09.03.2007
Насчет сравнения текстов попробуйте покопать в сторону LCS (Longest Common Sequence).
2.3K
21 октября 2008 года
ART-CODE
134 / / 15.11.2004
Монстр сравнения
http://winmerge.org/
с исходными кодами и меню на русском.

Еще может тебе пригодиться
http://msdn.microsoft.com/ru-ru/magazine/cc163473.aspx
Регулярные выражения в SQL

Я использую для сравнения и модификации файлов - исходников проектов (когда их несколько сотен , а строк кода около сотни тысяч)
такой прием - создаю на SQL сервере табличку
 
Код:
CREATE TABLE [dbo].[T_SOURCE](
    [id_rec] [int] IDENTITY(1,1) NOT NULL,
    [filename] [varchar](50) NULL,
    [line] [int] NULL,
    [line_text] [varchar](max) NULL,
 CONSTRAINT [PK_T_SOURCE] PRIMARY KEY CLUSTERED
(
    [id_rec] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


Далее скриптом загоняю туда все файлы из каталога проекта (с разбивкой на строки).
Выполняю массовую модификацию средствами SQL.
Другим скриптом выгружаю обратно в файлы.

Ваша задача скорее всего потребует разбивки строк на слова и введение дополнительного поля в таблицу - номер слова в строке...
а дальше - выборки часто используемых слов, номеров строк в которых они чаще встречаются, номеров позиций в строке ну и придумать еще алгоритмов :)
341
21 октября 2008 года
Der Meister
874 / / 21.12.2007
В школе была пульная задача. Там мы сравнивали дисперсии и матожидания, вычисленные для двух текстов, и такой алгоритм даёт очень большую вероятность определения того, что текст был списан в принципе (сравнение дисперсий вообще широко используется, в том числе в криминалистике). Но вот кто у кого списывал... Тут надо домыслить алгоритм.
1.9K
22 октября 2008 года
andriano
474 / / 10.01.2008
А дисперсия и матожидание чего?
5
23 октября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: andriano
А дисперсия и матожидание чего?


Слов видимо. Но Der Meister'у, действительно, не мешало бы уточнить, что он считал.

341
23 октября 2008 года
Der Meister
874 / / 21.12.2007
Цитата: andriano
А дисперсия и матожидание чего?


Мы сравнивали дисперсии текстов, как последовательностей двоичных чисел, без пробелов, табуляции и завершающих строку символов. При достаточно большом объёме (хотя бы полторы странички) "исходников", результат сравнения дисперсий можно считать весьма достоверным. И формула там простая: что-то типа отношения корня квадратного из произведения дисперсий к сумме матожиданий... Точную формулу не помню, но помню точно, что когда это выражение меньше 0,6 (критерий Фишера, кажется), то можно говорить о близости исходных выборок. Например, сравнением дисперсий можно определить, что два mp3 файла содержат однин и тот же саундтрек (точнее, что саундтреки "очень похожи"), или, например, принадлежат ли следы на земле конкретному человеку. Всё это работает, причём очень эффективно: собсна, идентификация и прогнозирование - главные задачи матстатистики. Э-э-х, формулу б вспомнить - самому уже интересно :)

9.9K
23 октября 2008 года
De_Montale
80 / / 23.08.2007
Ух...Спасибо за ответы)) Очень помогли...Есть где копать)) А по поводу критерия Фишера...Эм...Вроде насколько помню из мат. мода он для оценки адекватности модели заданной уравнением регрессии. Хотя, может я ошибаюсь...
341
23 октября 2008 года
Der Meister
874 / / 21.12.2007
Ну, может и я ошибаюсь - давно это было :)
1.9K
25 октября 2008 года
andriano
474 / / 10.01.2008
Цитата: Der Meister
Мы сравнивали дисперсии текстов, как последовательностей двоичных чисел, без пробелов, табуляции и завершающих строку символов. При достаточно большом объёме (хотя бы полторы странички) "исходников", результат сравнения дисперсий можно считать весьма достоверным. И формула там простая: что-то типа отношения корня квадратного из произведения дисперсий к сумме матожиданий... Точную формулу не помню, но помню точно, что когда это выражение меньше 0,6 (критерий Фишера, кажется), то можно говорить о близости исходных выборок. Например, сравнением дисперсий можно определить, что два mp3 файла содержат однин и тот же саундтрек (точнее, что саундтреки "очень похожи"), или, например, принадлежат ли следы на земле конкретному человеку. Всё это работает, причём очень эффективно: собсна, идентификация и прогнозирование - главные задачи матстатистики. Э-э-х, формулу б вспомнить - самому уже интересно :)


Здесь самое непонятное как раз состоит в том, как представить текст в виде последовательности чисел. На мой взгляд, результат любого алгоритма сравнения не должен зависеть от кодировки текста. Если же рассматривать вместо символов их коды, то представляется, что это условие не выполняется.
Опять же, частота встречаемости различных букв в пределах одного языка достаточно устойчивая характеристика, слабо зависящая от конкретного текста, т.е. для разных текстов мы будем получать очень близкие величины, а вот для одного и того же текста в различных кодировках - существенно различающиеся.
Отсюда делаю вывод, либо до меня так и не дошел алгоритм сравнения, либо он несостоятелен.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог