Как почистить дубли с перестановкой слов?

12
AD
На сайте с 04.08.2010
Offline
46
2438

Как удалить дубли ключевиков типа:

скачать самый новый фотошоп
фотошоп самый новый скачать
самый новый фотошоп скачать
.....

и оставить из них только один? без разницы какой.

P.S. Уже задолбался чистить выборки из пастуха от этого дерьма. Только сейчас понял, почему там так много мульонов ключей.

N0
На сайте с 11.09.2010
Offline
126
#1

Как то давно писал такой скрипт. Делать будет долго! И может понадобится увеличить memory_limit в php.ini

<?php

$keys = file("КЛЮЧИ.txt"); // Исходный файл с ключами

$keys_temp = array();

$ex = 0;

foreach($keys as $key)

{

$temp = $key;

$temp = str_replace(".", " ", $temp);

$temp = str_replace(",", " ", $temp);

$temp = str_replace(":", " ", $temp);

$temp = str_replace(";", " ", $temp);

$temp = str_replace("?", " ", $temp);

$temp = str_replace("!", " ", $temp);

$temp = str_replace("-", " ", $temp);

$temp = str_replace("_", " ", $temp);

$temp = preg_replace('| +|', ' ', $temp);

$temp = explode(" ", trim($temp));

$temp = array_unique($temp);

sort($temp);

$temp2 = implode("", $temp);

if(!in_array($temp2, $keys_temp))

{

$keys_temp[$ex] = $temp2;

$keys_new[$ex] = $key;

$ex++;

}

}

$fh = fopen("New_keys.txt", "w");

$success_t = fwrite($fh, implode("", $keys_new));

fclose($fh);

?>

Dos3
На сайте с 07.01.2011
Offline
363
#2

$temp = str_replace(array(".",",",":",";","?","!","-","_"), " ", $temp);

не умничаю, просто так покороче будет )

AD
На сайте с 04.08.2010
Offline
46
#3

Neo00007, спасибо, попробую!

[Удален]
#4

не очень понял предидущий алгоритм

но сам бы сделал так

берем строчку каждое слово в ячейку массива суем

первая проверка на количество слов в предложении

если первое предложение имеет столько же слов сколько и второе допустим

проверяем кажде слово в первом на совпадение с каждым словом второго

если количество совпадений равно количеству слов то эту строчку в файл не пишем и просмтраивает следующую строчку

и так у нас будет цикл брать строчку и сравнивать ее же со всеми нижележащими

по идее вытянуть должна множество мегабайт файлы:)по крайней мере хуман у меня тянет файл до 128 мб вроде...

;)

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#5

Эм, а если мануальчики почитать и заюзать:

http://php.net/manual/ru/function.similar-text.php

Если степень схожести больше 55% то нафиг выкинуть. Процентовку можно там подобрать в ходе работ.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Dos3
На сайте с 07.01.2011
Offline
363
#6
iam123:
не очень понял предидущий алгоритм
но сам бы сделал так
берем строчку каждое слово в ячейку массива суем
первая проверка на количество слов в предложении
если первое предложение имеет столько же слов сколько и второе допустим
проверяем кажде слово в первом на совпадение с каждым словом второго
если количество совпадений равно количеству слов то эту строчку в файл не пишем и просмтраивает следующую строчку
и так у нас будет цикл брать строчку и сравнивать ее же со всеми нижележащими
по идее вытянуть должна множество мегабайт файлыпо крайней мере хуман у меня тянет файл до 128 мб вроде...

слышь дятел, без тебя уже всё сделали, давай отсюдава :)

---------- Добавлено 12.03.2013 в 11:44 ----------

LEOnidUKG:
Эм, а если мануальчики почитать и заюзать:
http://php.net/manual/ru/function.similar-text.php

Если степень схожести больше 55% то нафиг выкинуть. Процентовку можно там подобрать в ходе работ.

зачем ? если нужно именно 100%

upd всё понял, ты про скорость

N0
На сайте с 11.09.2010
Offline
126
#7
LEOnidUKG:
Эм, а если мануальчики почитать и заюзать:
http://php.net/manual/ru/function.similar-text.php

Если степень схожести больше 55% то нафиг выкинуть. Процентовку можно там подобрать в ходе работ.

Знаем такую -) Использовал для вывода похожих ключей в парседорах.

В этой задаче тоже ее проверял, но что-то не понравилось )

UPD. Проверил что с ней не так:

"скачать программу photoshop"

"скачать программу VirtualBox"

степень схожести будет аж 80 процентов, а ключевики то совсем разные по сути.

W
На сайте с 12.03.2013
Offline
8
#8

если рассматривать строку, как сумму хешей слов, то:

скачать самый новый фотошоп -> 814000000000000524288000

фотошоп самый новый скачать -> 814000000000000524288000

самый новый фотошоп скачать -> 814000000000000524288000

остается взять только одну строку.

но это без морфологии, т.к. все слова в инфинитиве.

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#9
wktoreg:
если рассматривать строку, как сумму хешей слов, то:
скачать самый новый фотошоп -> 814000000000000524288000
фотошоп самый новый скачать -> 814000000000000524288000
самый новый фотошоп скачать -> 814000000000000524288000

остается взять только одну строку.

но это без морфологии, т.к. все слова в инфинитиве.

Не нужно никаких хэшей :)

$str=str_split('скачать самый новый фотошоп');

asort($str);

echo implode($str);

Мы собираем строку в массив

Сортируем буковки

Если буковки в строке одинаковы, значит строки одинаковы 100%

Всё гениально просто 🍿

W
На сайте с 12.03.2013
Offline
8
#10
LEOnidUKG:
Не нужно никаких хэшей :)


$str=str_split('скачать самый новый фотошоп');
asort($str);
echo implode($str);

Мы собираем строку в массив
Сортируем буковки
Если буковки в строке одинаковы, значит строки одинаковы 100%

Всё гениально просто 🍿

точно.

за словами буквы то и не увидели. :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий