|
|
|
|
|
для: 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). А уже на их сравнении (доли) решаете.
Но русский язык таков, что слова переставь и смысл иной, или просто знак препинания - казнить, нельзя помиловать и казнить нельзя, помиловать. То есть ошибки все равно неизбежны. | |
|
|
|
|
|
|
|
для: gfddrg
(10.06.2013 в 19:33)
| | Там ошибка была:
Не $check=$cnt1/$cnt_intersect*100;
А $check=$cnt_intersect/$cnt1*100;
http://phpfiddle.org/main/code/0py-bvh | |
|
|
|
|
|
|
|
для: Deed
(10.06.2013 в 19:24)
| | Я пока увольняюсь, более подробно надо узнать как работает кое-что из написанного вами, так как я не всё знаю) | |
|
|
|
|
|
|
|
для: confirm
(10.06.2013 в 19:07)
| | Нельзя физически получить результат чтоб у двух текстов было совпадений в словах 50% и чтоб они по значению были разными, такого не бывает в природе, по крайней мере я так думаю) | |
|
|
|
|
|
|
|
для: gfddrg
(10.06.2013 в 19:06)
| | Та ну.
Можно упростить lazy(), (http://phpfiddle.org/main/code/9uz-2u0) если не жалко места, или, что лучше, увеличить порог $check>30 до 60%-70%
$check>70. | |
|
|
|
|
|
|
|
для: gfddrg
(10.06.2013 в 18:58)
| | Ну а что вы делаете для этого? Разбиваете на слова, а затем высчитываете проценты вхождения. А я вам что пишу? Тоже самое, если вы не догадываетесь как потом из массива числа вхождений найти их проценты в тексте, то какие проблемы:
<?
$wrd = array_map(function($v) use($wrd) {
return round($v/array_sum($wrd)*100, 1);
}, $wrd);
| Сравнивайте. Некая схожесть, это уже иное, но ведь и тут подводные камни. Почему нельзя допустить, что слова в двух текстах могут иметь близкие проценты, а по сути тексты разные будут? | |
|
|
|
|
|
|
|
для: Deed
(10.06.2013 в 18:43)
| | Вот тут я нашёл что то новое для себя и не совсем понимаю как это работает, чисто так на интуиции понимаю, попытался изменить один из анекдотов, сделал их полностью разными, но всё равно пишет что очень много совпадений, где-то, кто-то сильно перемудрил :) Но я всё очень рад что вы мне помогаете) Все помогаете) Возможно я возьму другие функции и по другому напишу скрипт, но пока мне надо просто узнать как циклично выводить данные из базы данных. Пример:
первый текст -> все тексты что есть в базе
второй текст -> все тексты что есть в базе
третий текст -> все тексты что есть в базе
и так далее. | |
|
|
|
|
|
|
|
для: Deed
(10.06.2013 в 18:43)
| | То есть, чтобы уменьшить количество хранимой информации, мы каждое слово анекдота (если в нем более одной буквы) преобразовываем к виду: первая буква и количество символов, типа "Офигеть" -> "o7".
Затем мы сравниваем два анекдота и получаем массив со всеми совпадениями из первого.
Подсчитываем количество совпадений и, если их более 30% сообщаем, что анекдот "с бородой".
После прогона анекдота через rich(), можно преобразовать массив в строку (она не будет большой) с каким-то разделителем и хранить ее в базе вместе с текстом.
При поступлении нового анекдота мы делаем explode () с ней по нашему разделителю и проверяем этот новый текст, предварительно прогнав его через всю ту же ф-цию rich(). | |
|
|
|
|
|
|
|
для: confirm
(10.06.2013 в 18:51)
| | Сори, я чёт не правильно пишу вроде, мне нужно найти совпадающие анекдоты, для того чтоб не пропустить их базу данных, уникальность текстов мне не нужна. Я делаю сайт для людей, нужно просто много не повторяющихся анекдотов и всё. | |
|
|
|
|