Комментарии: Python: Алгоритм Шинглов — поиск нечетких дубликатов текста http://www.codeisart.ru/python-shingles-algorithm/ Статьи по SEO, дизайну и программированию. Переводы на веб-тематику. Исследования и наработки в области интернет-технологий. Tue, 08 Jul 2014 14:54:49 +0000 hourly 1 http://wordpress.org/?v=3.5.1 Автор: Костя http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-149359 Костя Tue, 11 Dec 2012 22:13:17 +0000 http://www.codeisart.ru/?p=1106#comment-149359 Хотелось бы кое-что добавить. Чувствительность алгоритма сравнения зависит от длины шингла, чем более длинный шингл тем хуже точность сравнения, но и больше скорость и наоборот. Наиболее точное сравнение при длине шингла в одно слово, но это такое же сравнение как и попарно всех слов, плюс еще вычисление контрольных сум. Кроме того, простое изменение слов (использование синонимов — синомайз), даст отличный результат для веб спаммеров при таком алгоритме. Так что здесь нет каких-либо радужных перспектив, без возможности определения синомайза. Кроме того, в статье Сегаловича на которую вы ссылаетесь вообще используется другой метод самим Сегаловичем — .. для каждого документа формируется множество U различных слов, входящих в него, и определяется пересечение U и словаря L (был раньше сформирован из всей коллекции со слов со средним IDF) и т.д.

]]>
Автор: Иван http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-138790 Иван Tue, 11 Sep 2012 11:37:05 +0000 http://www.codeisart.ru/?p=1106#comment-138790 Я думаю что фрагмент


for i in range(len(source1)):
if source1[i] in source2:

следует заменить на


for i in range(len(source1)):
if source1[i] == source2[i]:

Потому что позиция шингла должна учитываться (если все предложения текста перемешать, то этот текст должен считаться уникальным, т.к. его смысл абсолютно меняется (теряется))

Если же позиция шингла не учитывается, то разницу списков проще было посчитать через сеты.

]]>
Автор: Антон http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-21208 Антон Sat, 17 Jul 2010 21:57:11 +0000 http://www.codeisart.ru/?p=1106#comment-21208 Такой момент.. если имеем два совершенно непохожих текста (или запускаем алгоритм с большой длиной шинглов/малыми текстами), то получаем ексепшн ZeroDivisionError.
Собственно неплохо было бы его ловить.
Ну и еще момент производительности.. мне кажется выражения-генераторы будут предпочтительнее генераторов списков.

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-18840 Skaizer Thu, 08 Apr 2010 18:56:18 +0000 http://www.codeisart.ru/?p=1106#comment-18840 Запускайте в ветке 2.* : 2.5 или 2.6. ну и на ранних тоже должна работать. В ветке 3.* не будет, под нее нужно специально переписывать.

]]>
Автор: Дмитрий http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-18836 Дмитрий Thu, 08 Apr 2010 15:01:42 +0000 http://www.codeisart.ru/?p=1106#comment-18836 А какой версией Python можно запустить эту программку? у меня на данный момент последняя и выдаёт синтаксические ошибки.

]]>
Автор: dron http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-17892 dron Sun, 28 Feb 2010 10:18:23 +0000 http://www.codeisart.ru/?p=1106#comment-17892 Клиника! Зачем так сильно уникалить? Смысл? 80 процентов отличается от возможных дубликатов, уже нормально! Никто ничего не склит из ПС.

]]>
Автор: Евгений http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-16174 Евгений Sat, 26 Dec 2009 11:05:53 +0000 http://www.codeisart.ru/?p=1106#comment-16174 Цитата 1:
Обратите внимание, задачей не стоит определить абсолютное значение схожести объектов, а так же выделения в каждом из объектов схожих частей. Нам необходимо только предположить, являются ли объекты почти дубликатами или нет.

Цитата 2:
Вот и все, функция нам вернет процент схожести двух текстов.

Вопрос: а как ответить на вопрос являются ли объекты почти дубликатами или нет? Если % схожести больше некоторого заданного m, то тексты считать почти одинаковыми, иначе — разными? Или есть более изощренные методы?)

]]>
Автор: Проект 110 кв http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-15620 Проект 110 кв Mon, 07 Dec 2009 21:54:35 +0000 http://www.codeisart.ru/?p=1106#comment-15620 Это что получается, что теперь не возможно написать уникальную статью и попробовать размножить её?

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-11108 Skaizer Thu, 06 Aug 2009 08:38:57 +0000 http://www.codeisart.ru/?p=1106#comment-11108 Да, в данном варианте семантика не применяется.

]]>
Автор: Dennis http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-11001 Dennis Sun, 02 Aug 2009 10:04:28 +0000 http://www.codeisart.ru/?p=1106#comment-11001 Т.е. как я понял здесь не применяется семантика. Думаю посиковики должны стремиться к оценке дубликатов в которых была сделана подмена слов синонимами.

]]>
Автор: Дмитрий http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-7892 Дмитрий Sat, 16 May 2009 07:12:08 +0000 http://www.codeisart.ru/?p=1106#comment-7892 Очень интересуют возможные алгоритмы цитирования заимствованных участков текста. К сожалению не нашел ни одного примера реализации.

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-5715 Skaizer Tue, 31 Mar 2009 08:18:07 +0000 http://www.codeisart.ru/?p=1106#comment-5715 Да, к сожалению времени сейчас нет абсолютно, посты в блог пишу реже. Как загружен буду поменьше, обязательно напишу про него. А пока почитать про него можно по ссылкам: http://www.spamtest.ru/document.html?context=15932&pubid=32 и http://rcdl2007.pereslavl.ru/papers/paper_65_v1.pdf .
В статье постараюсь поподробнее расписать метод реализации этого алгоритма.

]]>
Автор: Владимир http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-5712 Владимир Tue, 31 Mar 2009 07:00:52 +0000 http://www.codeisart.ru/?p=1106#comment-5712 Skaizer вы обещали рассказать об алгоритме супершинглов, когда от вас можно ждать его? Или хотя бы скажите где можно посмотреть? Спасибо.

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-4394 Skaizer Wed, 25 Feb 2009 20:34:20 +0000 http://www.codeisart.ru/?p=1106#comment-4394 Для сравнения коротких текстов алгоритмом шинглов можно разбивать текст не по словно, как в моей реализации, а посимвольно, например по 10 символов, остальную часть алгоритма можно оставить как есть.
Так же на хабре предложен несколько иной способ нахождения почти дублей для коротких текстов.

]]>
Автор: Jack http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-4393 Jack Wed, 25 Feb 2009 20:11:13 +0000 http://www.codeisart.ru/?p=1106#comment-4393 Друзья, а если тексты достаточно короткие?
Ну скажем от 5 до 50 слов :) Анекдоты, цитаты, афоризмы и пр.
Можно ли как-нибудь выявить схожесть двух таких текстов между собой?

]]>
Автор: Андрей http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-3296 Андрей Thu, 29 Jan 2009 08:06:44 +0000 http://www.codeisart.ru/?p=1106#comment-3296 2 Андрей:

Делаем дор, наполняем его распространёнными модифицированными текстами с разной «глубиной» шинглирования, смотрим на результат его работы, на основе статистики определяем оптимальный алгоритм модификации текста :)

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-3152 Skaizer Sat, 24 Jan 2009 21:37:21 +0000 http://www.codeisart.ru/?p=1106#comment-3152 PPS: можете постучать в аську 86пять883 или в GTalk simskaiz[at]gmail.com, расскажу поподробнее.

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-3150 Skaizer Sat, 24 Jan 2009 21:31:45 +0000 http://www.codeisart.ru/?p=1106#comment-3150 Здравствуйте, Максим. В качестве аргументов функции compaire поступают 2 списка с хэшами выделенных ранее подпоследовательностей для двух текстов. Далее мы находим пересечение этих списков, т.е. количество вхождений одного списка в другой. В переменной same хранится это количество.
А строкой:

return same*2/float(len(source1) + len(source2))*100

мы считаем в процентах отношение найденных одинаковых хэшей к общему количеству хэшей для двух текстов. И так как одинаковые хэши у нас встречаются как в первом, так и во втором текстах, то удваиваем переменную same:

same*2

PS: список в python чем-то похож на массив в C++ :-)

]]>
Автор: Max Stoun http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-3147 Max Stoun Sat, 24 Jan 2009 20:27:26 +0000 http://www.codeisart.ru/?p=1106#comment-3147 Здравствуйте.

Подскажите пожалуйста. Я пытаюсь написать аналогичный код на c#(для саморазвития — я начинающий программист). Объясните строки:

def compaire (source1,source2):
  same = 0
  for i in range(len(source1)):
    if source1[i] in source2:
    same = same + 1

  return same*2/float(len(source1) + len(source2))*100

Я так понимаю — на вход получаем, к примеру

source1 = 10204
soruce2 = 54321

потом получим цикл i=0…4, и будем сравнивать
если source1[0] in source2 // то есть 1 in 54321 = true
если source1[1] in source2 //то есть 0 in 54321 = false
и тд ?

С уважением Максим
P.S. Просто python я не особо понимаю, а попытка поюзать гугл у меня провалилась..

]]>
Автор: Skaizer http://www.codeisart.ru/python-shingles-algorithm/comment-page-1/#comment-3070 Skaizer Thu, 22 Jan 2009 14:36:35 +0000 http://www.codeisart.ru/?p=1106#comment-3070 lightcaster, спасибо, полезные советы! Я реализовал крайне простую канонизацию текста, чтобы показать ее смысл.

]]>