Дубли

Turbina

Client
Регистрация
28.09.2015
Сообщения
67
Благодарностей
12
Баллы
8
Как удалять такие дубли, что бы оставался один первый вариант?

Слово
СЛОВО
слово
 

ovsergeyev

Client
Регистрация
30.06.2015
Сообщения
11
Благодарностей
4
Баллы
3
Как вариант через список. А сначала обработка текста toLower. Если слова нет в списке заносится туда и является первым вариантом. Если слово есть в списке значит это дубль.
 
  • Спасибо
Реакции: Turbina

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
через попу:
добавляем в зено-таблицу в виде [Слово1;слово1 в нижнем регистре]:
Слово;слово
СЛОВО;слово
слово;слово
потом тупо кубиком удаляем дубли по содержанию второго столбца. А первый столбец сохраняем в список.
 
  • Спасибо
Реакции: Turbina

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 099
Благодарностей
648
Баллы
113
Можно так:
2017-12-24_19-24-57.png

Но слова будут в нижнем регистре.
 
  • Спасибо
Реакции: Turbina

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Для переменной
C#:
string text = project.Variables["text"].Value;
var res = text
    .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .AsParallel().AsOrdered()
    .Select(s => s.Substring(0, 1).ToUpper() + s.Remove(0, 1).ToLower())
    .Distinct();
return string.Join(Environment.NewLine, res);
Для списка
C#:
IZennoList list = project.Lists["List"];
var res = list
    .AsParallel().AsOrdered()
    .Select(s => s.Substring(0, 1).ToUpper() + s.Remove(0, 1).ToLower())
    .Distinct().ToList();
list.Clear();
list.AddRange(res);
 

Turbina

Client
Регистрация
28.09.2015
Сообщения
67
Благодарностей
12
Баллы
8
Dimionix - хорошее решение, но код все начальные буквы делает заглавными. В notepad++ есть такая опция, он понимает дубли с разным регистром.
Kare - регистр должен сохраниться, там города, имена и т.д.
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Dimionix - хорошее решение, но код все начальные буквы дерает заглавными. В notepad++ есть такая опция, он понимает дубли с разным регистром.
Kare - регистр должен сохраниться, там города, имена и т.д.
Тогда так:
Для переменой
C#:
string text = project.Variables["text"].Value;
List<string> tmpList = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
for (int i = 0; i < tmpList.Count; i++) {
    for (int j = i + 1; j < tmpList.Count; j++) {
        if (string.Compare(tmpList[i], tmpList[j], StringComparison.InvariantCultureIgnoreCase ) == 0) {
            tmpList.RemoveAt(j); j--;
        }
    }
}
return string.Join(Environment.NewLine, tmpList);
Для списка
C#:
IZennoList list = project.Lists["List"];
lock (SyncObjects.ListSyncer) {
    for (int i = 0; i < list.Count; i++) {
        for (int j = i + 1; j < list.Count; j++) {
            if (string.Compare(list[i], list[j], StringComparison.InvariantCultureIgnoreCase ) == 0) {
                list.RemoveAt(j); j--;
            }
        }
    }
}
 

Turbina

Client
Регистрация
28.09.2015
Сообщения
67
Благодарностей
12
Баллы
8
Dimionix - Спасибо! То что нужно!
 

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
800
Благодарностей
179
Баллы
43
Dimionix
а как можно доработать скрипт что бы он удалял такие неявные дубли

Купить
Купила
Купили
Купим

Принес
принесла
принесли
принесут
принесем

Надо оставить по 1 слову из каждого примера.
Но добавить возможность определять с регистром или без, типа как дополнительная переменная true false


 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
а как можно доработать скрипт что бы он удалял такие неявные дубли
Тут либо брать определённое количество символов с начала строки, либо, как вариант, привязаться к какому-нибудь поисковику и придумывать логику, либо пилить нейронку или как-то ещё, но в любом случае не будет 100%-го результата.
 
  • Спасибо
Реакции: z@jivalo

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
800
Благодарностей
179
Баллы
43
Тут либо брать определённое количество символов с начала строки, либо, как вариант, привязаться к какому-нибудь поисковику и придумывать логику, либо пилить нейронку или как-то ещё, но в любом случае не будет 100%-го результата.
так и думал что не простое это дело, лучше использовать Коллектор купленный.

Спасибо
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
так и думал что не простое это дело, лучше использовать Коллектор купленный.

Спасибо
Если сильно захотеть, можно в космос полететь…
Хз зачем, но в конце прошлого года я задавался подобным вопросом. Так и не смог найти в каком шабе я его применял, остался только тестовый шаблон. Начнем по порядку (регистр я игнорировал, точнее все к нижнему привел, с регистром уже сами думайте, как возится).
Key Collector делает вот так:


Penguin вот так:


Zennoposter шаблон-стеммер на основе StemmersNet.dll (в этом посте уже публиковал пример, там же и обновил шаб с кодом как на скрине) вот так:


Как видим на зенке и на Key Collector одинаковые результаты. Но гибкость зенки в плане доработки алгоритма неограниченная.
Ну и еще теоретически можно посмотреть в сторону склонения через использование шаблона сервисов морфера от @Nord.
 
  • Спасибо
Реакции: z@jivalo

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
800
Благодарностей
179
Баллы
43

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
благодарю, удивили думал КК имеет мощный какой-то алгоритм выявления подобных дублей.
значит ваш пример из зенки был взят от сюда да?

http://zennolab.com/discussion/threads/kak-mne-realizovat-stemming.22494/#post-327883
Да, просто скачайте файл там по ссылке.
В принципе, может на каких-то других словах КК покажет лучший результат, на скринах ведь слишком мало слов использовалось. Это уже сами тестируйте, у меня пока этот шаб пылится без дела.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
800
Благодарностей
179
Баллы
43
А у него и есть мощьный алгоритм для выбора ключей на продвижение.
это да, софт мощный целый комбайн, надо было просто определиться с дублями неявными кто и как лучше справляется
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Для переменной
C#:
string text = project.Variables["text"].Value;
var res = text
    .Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
    .AsParallel().AsOrdered()
    .Select(s => s.Substring(0, 1).ToUpper() + s.Remove(0, 1).ToLower())
    .Distinct();
return string.Join(Environment.NewLine, res);
Для списка
C#:
IZennoList list = project.Lists["List"];
var res = list
    .AsParallel().AsOrdered()
    .Select(s => s.Substring(0, 1).ToUpper() + s.Remove(0, 1).ToLower())
    .Distinct().ToList();
list.Clear();
list.AddRange(res);
Попробовал этот скрип, что-то не выходит избавиться от дублей. У меня переменной, ссылки, которые дублируются. "text" заменил на имя переменной... Подскажите что я делаю не так ?
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 311
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

Dimionix
а как можно доработать скрипт что бы он удалял такие неявные дубли

Купить
Купила
Купили
Купим

Принес
принесла
принесли
принесут
принесем

Надо оставить по 1 слову из каждого примера.
Но добавить возможность определять с регистром или без, типа как дополнительная переменная true false

Расстояние Левенштейна
или другие похожие алго для нечеткого поиска
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)