Синонимайзер. как?

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Шаблон ZP собирает статьи по списку запросов, обрезает теги и тд.

Хочу уникализировать полученный текст. Предположим, у меня есть база синонимов на 200+ тыс слов В виде текстового файла.

1. Можно ли это как-то реализовать способом типа спинтакса?? (и как)

П.с. На особую художественность полученного текста не рассчитываю, просто хочу чтобы текст был плюс-минус уникальный, ну и чтобы авторы текста не могли найти копипаст одним запросом в гугле.
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 404
Благодарностей
1 469
Баллы
113
Можно. Делал. Выходит бредово, уникальность 70-90%
Просто перебираетм каждое слово и ищем строку в списке с синонимами. Находим такую строку и берем из нее рандомное слово.
Советую заменять не каждое, а одно из 3-4 слов
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Можно. Делал. Выходит бредово, уникальность 70-90%
Просто перебираетм каждое слово и ищем строку в списке с синонимами. Находим такую строку и берем из нее рандомное слово.
Советую заменять не каждое, а одно из 3-4 слов
Спасибо за дельный совет.
А как дела со скоростью обработки обстояли? Просто, на 200 тыс строк список немалый, и если слов прогонять хотя бы по 100 из статьи... :bw: Этож серьезная вычислительная задача выходит как мне кажется.
(я по правде говоря, побаиваюсь больших чисел, после того как как-то раз загрузил 10 тыс сниппетов из гугл-выдачи в зенку и не смог дальше ничего поделать. толи ошибка какая-то вылезала, толи тормоза жуткие. Не помню уже)


перебираетм каждое слово и ищем строку в списке с синонимами
Такой С# сниппет попадался на форуме, думаю найду.
а
берем из нее рандомное слово
Подскажите как сделать наиболее оптимально? (на ум приходит взять строку с синонимами - в список - взять случайную... Есть способ покороче?)
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 404
Благодарностей
1 469
Баллы
113
У меня был словарь синонимов на 1 200 000 строк. Текст примерно на 1к слов с заменой каждого 3-4го выполнялось минуты полторы.
Но лучше использовать более мелкие словари, так как в том что был у меня такие редкие слова были, что текст иногда терял даже общее признаки начальной темы.
Я изначально расставил в каждой строке "|" между словами, потом просто брал строку и рандомное значение из нее. (spintax)
Сразу говорю, не претендую и на долю правильности в этом шаблоне=)
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
У меня был словарь синонимов на 1 200 000 строк. Текст примерно на 1к слов с заменой каждого 3-4го выполнялось минуты полторы.
Но лучше использовать более мелкие словари, так как в том что был у меня такие редкие слова были, что текст иногда терял даже общее признаки начальной темы.
Я изначально расставил в каждой строке "|" между словами, потом просто брал строку и рандомное значение из нее. (spintax)
Сразу говорю, не претендую и на долю правильности в этом шаблоне=)
Так потому что реализация спинтакса хромает, если так медленно текст собирает. Надо вручную писать с определенными принципами:
1) Не использовать рандом, так как он привязан ко времени и в краткие промежутки генерирует похожие однотипные комбинации, поэтому уникальность страдает. Лучше либо каждый раз генерировать новый экземпляр рандома или использовать ThreadLocal<Random>
2) Использовать массивы вместо листов
3) Использовать StringBuilder с указанием capacity
4) Лучше для каждой рандомной комбинации уже знать количество вариантов, а не вычислять длину массива на лету.
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Не могли бы вы пояснить что это означает )
StringBuilder с указанием capacity
и это
Лучше либо каждый раз генерировать новый экземпляр рандома или использовать ThreadLocal<Random>
это
Использовать массивы вместо листов
Это все я так понимаю, делается в "блоке свой код С#"?
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Не будет ли быстрее, загнать весь список синонимов в такую переменную:
{слово|синоним1|синоним2|синонимN}{слово2|синоним1|синоним2|синонимN}
Регуляркой найти нужное слово и выбрать один из синонимов случайным образом?
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Не могли бы вы пояснить что это означает )
Это все я так понимаю, делается в "блоке свой код С#"?
Все равно без знания C# кода использовать не получится, а тот, кто знает что такое c#, уже понял намек как повысить производительность и уникальность текста.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
берешь первое слово статьи. Ищешь его
Не могли бы вы пояснить что это означает )

и это

это


Это все я так понимаю, делается в "блоке свой код С#"?
не мог бы)
Не обращай внимания, цель таких сообщений не помочь, а сумничать)
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
берешь первое слово статьи. Ищешь его

не мог бы)
Не обращай внимания, цель таких сообщений не помочь, а сумничать)
Если ты не понимаешь, что там написано, то это не значит, что те, кто знают c# не смогут воспользоваться советом. А если тебе хочется, можешь даже полностью расписать правильный универсальный код, который будет генерировать уникальные комбинации.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
Если ты не понимаешь, что там написано, то это не значит, что те, кто знают c# не смогут воспользоваться советом. А если тебе хочется, можешь даже полностью расписать правильный универсальный код, который будет генерировать уникальные комбинации.
Мы уже гвоорили на эту тему. Точнее я её расписывал. Описывал твою любовь к псевдоумным, но слабополезным вбросам)
Начинать по новой не буду. Главное что ты смог раскатать умную смску на много слов, которая абсолютно бесполезна автору)
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Мы уже гвоорили на эту тему. Точнее я её расписывал. Описывал твою любовь к псевдоумным, но слабополезным вбросам)
Начинать по новой не буду. Главное что ты смог раскатать умную смску на много слов, которая абсолютно бесполезна автору)
Так и скажи, что я, по твоему мнению, должен каждый раз вместо советов по написанию кода писать готовый код.
Нет уж, оставлю это тебе, так как я за то, чтобы люди думали что делают, а не искали всё готовенькое.
 
  • Спасибо
Реакции: Lexicon

deopl

Client
Регистрация
06.12.2011
Сообщения
659
Благодарностей
126
Баллы
43
Вот тут не согласен
Либо
писать готовый код.
Либо вообще не писать. Ведь не зря за советом просят.

Это надо
чтобы люди думали что делают
но что думать, когда даже примера нету? Лучше смотреть на непонятный код и разбирать, чем догадыватсья, что там в совете.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
но что думать, когда даже примера нету? Лучше смотреть на непонятный код и разбирать, чем догадыватсья, что там в совете.
Я написал для тех, кто знает C#, а те, кто уже решили пользоваться кубиками или годами пользуются зенкой и не смогли выучить основы основ C#, сами решили каким способом они будут себе писать шаблоны.
Если ты хочешь сказать, что массивы или стрингбилдер в c# самое сложное, то поясни почему.
P.S. если тебе советы не помогли, то это не значит, что другим они не пригодятся. Я бы месяца 4 назад назад был бы рад услышать такую инфу на форуме от кого-то другого, так как сам многое не понимал.
 
Последнее редактирование:
  • Спасибо
Реакции: sydoow и deopl

deopl

Client
Регистрация
06.12.2011
Сообщения
659
Благодарностей
126
Баллы
43
Если ты хочешь сказать, что массивы или стрингбилдер в c# самое сложное, то поясни почему.
Как кому. Прошел данную главу, понятие осталось
P.S. если тебе советы не помогли, то это не значит, что другим они не пригодятся. Я бы месяца 4 назад назад был бы рад услышать такую инфу на форуме от кого-то другого, так как сам многое не понимал.
Мы тут все собрались для помощи друг другу. Кто-то быстро вникает, кто-то ждет пинка, а кто-то флуд гонит.
В любом случае, кроме советов, хотелось бы видеть код. В моем случае это будет огромный совет.
Не с нуля до конца, а хотябы часть (неконкретно вв этом случае, а вообще по вопросам)
8-)
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Код:
ThreadLocal<Random> rnd = new ThreadLocal<Random>(() => new Random(Guid.NewGuid().GetHashCode()));
string[] mass_spin_1 = File.ReadAllLines("path1").Where(x => x.Length > 1).ToArray();
string[] mass_spin_2 = File.ReadAllLines("path2").Where(x => x.Length > 1).ToArray();
string[] mass_spin_3 = File.ReadAllLines("path3").Where(x => x.Length > 1).ToArray();

string str = new StringBuilder(128)
                .Append(mass_spin_1[rnd.Value.Next(0, mass_spin_1.Length)])
                .Append(" ")
                .Append(mass_spin_2[rnd.Value.Next(0, mass_spin_2.Length)])
                .Append(new string[] { " ", " or ", " and " }[rnd.Value.Next(0, 3)])
                .Append(mass_spin_3[rnd.Value.Next(0, mass_spin_3.Length)])
                .ToString();
Как я и говорил, код не представляет ничего особенного.
 
  • Спасибо
Реакции: deopl

deopl

Client
Регистрация
06.12.2011
Сообщения
659
Благодарностей
126
Баллы
43
Огромный спс
Будем разбирать
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Я написал для тех, кто знает C#, а те, кто уже решили пользоваться кубиками или годами пользуются зенкой и не смогли выучить основы основ C#, сами решили каким способом они будут себе писать шаблоны.
Вряд ли те кто годами пользуется зенкой пишут вопросы в теме "Вопросы новичков".

Как я и говорил, код не представляет ничего особенного.
Это код подбора одного синонима к одному слову я так понимаю? (с С# не знаком и не понимаю что на входе должно быть и что имеем на выходе. В каком формате должен быть список синонимов?).
Очень хочу понять, т.к. сделал пока все кубиками на регулярках и списках... Действительно получается очень не быстро :(
не больше слова в секунду. Правда пока тестирую в PM, может когда запущу в ZP будет побыстрее.
 

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