Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите написать скрипт проверки текста на уникальность)

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: gfddrg   (11.06.2013 в 04:54)   письмо автору
 
   для: confirm   (10.06.2013 в 20:02)
 

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

  Ответить  
 
 автор: confirm   (10.06.2013 в 20:02)   письмо автору
 
   для: gfddrg   (10.06.2013 в 19:30)
 

Думаете вы или нет, но процентное сравнение все равно будет давать ошибку.

У вас есть текст А1, который нужно сравнить с новым текстом А2.

Вышепоказанным способом вы получаете массивы этих текстов M1 и M2, ключами которых являются слова в них, а значениями процент вхождения в текст.

M3 = array_intersect_key(M1, M2) - получаете массив пересечения этих слов. Если число элементов полученного массива равно числу элементов массива M1, то в обеих этих текстах имеются одни и те же слова. То есть совпадение самих слов 100%. Естественно можно просчитать и процент схожести вхождения слов между M1 и M3 (count(M1)/count(M3)*100), и уже опираясь на эту величину решаете, производить ли сравнение процентов вхождения каждого из совпадающих слов этих текстов (ключей M3) в текстах (значениях M1 и M2). А уже на их сравнении (доли) решаете.

Но русский язык таков, что слова переставь и смысл иной, или просто знак препинания - казнить, нельзя помиловать и казнить нельзя, помиловать. То есть ошибки все равно неизбежны.

  Ответить  
 
 автор: Deed   (10.06.2013 в 19:38)   письмо автору
 
   для: gfddrg   (10.06.2013 в 19:33)
 

Там ошибка была:
Не $check=$cnt1/$cnt_intersect*100;
А $check=$cnt_intersect/$cnt1*100;
http://phpfiddle.org/main/code/0py-bvh

  Ответить  
 
 автор: gfddrg   (10.06.2013 в 19:33)   письмо автору
 
   для: Deed   (10.06.2013 в 19:24)
 

Я пока увольняюсь, более подробно надо узнать как работает кое-что из написанного вами, так как я не всё знаю)

  Ответить  
 
 автор: gfddrg   (10.06.2013 в 19:30)   письмо автору
 
   для: confirm   (10.06.2013 в 19:07)
 

Нельзя физически получить результат чтоб у двух текстов было совпадений в словах 50% и чтоб они по значению были разными, такого не бывает в природе, по крайней мере я так думаю)

  Ответить  
 
 автор: Deed   (10.06.2013 в 19:24)   письмо автору
 
   для: gfddrg   (10.06.2013 в 19:06)
 

Та ну.
Можно упростить lazy(), (http://phpfiddle.org/main/code/9uz-2u0) если не жалко места, или, что лучше, увеличить порог $check>30 до 60%-70%
$check>70.

  Ответить  
 
 автор: confirm   (10.06.2013 в 19:07)   письмо автору
 
   для: gfddrg   (10.06.2013 в 18:58)
 

Ну а что вы делаете для этого? Разбиваете на слова, а затем высчитываете проценты вхождения. А я вам что пишу? Тоже самое, если вы не догадываетесь как потом из массива числа вхождений найти их проценты в тексте, то какие проблемы:
<?
$wrd 
array_map(function($v) use($wrd) {
    return 
round($v/array_sum($wrd)*1001); 
}, 
$wrd);
Сравнивайте. Некая схожесть, это уже иное, но ведь и тут подводные камни. Почему нельзя допустить, что слова в двух текстах могут иметь близкие проценты, а по сути тексты разные будут?

  Ответить  
 
 автор: gfddrg   (10.06.2013 в 19:06)   письмо автору
 
   для: Deed   (10.06.2013 в 18:43)
 

Вот тут я нашёл что то новое для себя и не совсем понимаю как это работает, чисто так на интуиции понимаю, попытался изменить один из анекдотов, сделал их полностью разными, но всё равно пишет что очень много совпадений, где-то, кто-то сильно перемудрил :) Но я всё очень рад что вы мне помогаете) Все помогаете) Возможно я возьму другие функции и по другому напишу скрипт, но пока мне надо просто узнать как циклично выводить данные из базы данных. Пример:
первый текст -> все тексты что есть в базе
второй текст -> все тексты что есть в базе
третий текст -> все тексты что есть в базе
и так далее.

  Ответить  
 
 автор: Deed   (10.06.2013 в 19:01)   письмо автору
 
   для: Deed   (10.06.2013 в 18:43)
 

То есть, чтобы уменьшить количество хранимой информации, мы каждое слово анекдота (если в нем более одной буквы) преобразовываем к виду: первая буква и количество символов, типа "Офигеть" -> "o7".
Затем мы сравниваем два анекдота и получаем массив со всеми совпадениями из первого.
Подсчитываем количество совпадений и, если их более 30% сообщаем, что анекдот "с бородой".

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

  Ответить  
 
 автор: gfddrg   (10.06.2013 в 18:58)   письмо автору
 
   для: confirm   (10.06.2013 в 18:51)
 

Сори, я чёт не правильно пишу вроде, мне нужно найти совпадающие анекдоты, для того чтоб не пропустить их базу данных, уникальность текстов мне не нужна. Я делаю сайт для людей, нужно просто много не повторяющихся анекдотов и всё.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования