Open demidovakatya opened 7 years ago
в общем, как я себе это представляю, логика должна такая:
— приходит сообщение:Здравствуйте Мартин Алексеевич! Я на вас всю общественность подниму чтобы просветили вас гадов гадских! Вы срал а я тебе говорил мы дом общественность ебал тебя гадов и мы же и будем а не вы чтоб мы пахали. Мы пахали а ты я ебал.
— мы его сплитим на предложения (по endsen
):
'я на вас всю общественность подниму чтобы просветили вас гадов гадских',
'вы срал а я тебе говорил мы дом общественность ебал тебя гадов и мы же и будем а не вы чтоб мы пахали',
'мы пахали а ты я ебал']
— предложения сплитим на токены
[['здравствуйте', 'мартин', 'алексеевич'],
['я', 'на', 'вас', 'всю', 'общественность', 'подниму', 'чтобы', 'просветили', 'вас', 'гадов', 'гадских'],
['вы', 'срал', 'а', 'я', 'тебе', 'говорил', 'мы', 'дом', 'общественность', 'ебал', 'тебя', 'гадов', 'и', 'мы', 'же', 'и', 'будем', 'а', 'не', 'вы', 'чтоб', 'мы', 'пахали'],
['мы', 'пахали', 'а', 'ты', 'я', 'ебал']]
— всё разбиваем на пары слов:
мартин - алексеевич
алексеевич - (ENDSEN)
я - на
на - вас
вас - всю
всю - общественность
общественность - подниму
подниму - чтобы
чтобы - просветили
просветили - вас
вас - гадов
гадов - гадских
гадских - (ENDSEN)
вы - срал
срал - а
а - я
я - тебе
тебе - говорил
говорил - мы
мы - дом
дом - общественность
...
мы - же
же - и
и - будем
будем - а
...
пахали - (ENDSEN)
мы - пахали
пахали - а
а - ты
ты - я
я - ебал
ебал - (ENDSEN)
— когда нам на вход поступает сообщение, мы его опять бьём до токенов и берём случайный токен. с этого токена будет начинаться новое предложение.
⚠️ тут нужно ещё производить проверку, а окей ли вообще сообщению начинаться с этого слова (например,
мы, вы, здравствуйте
— более вероятные начала предложения, чемже
). т.е. нужно отдельную статистику вести.
— затем для каждого j
-го токена ищем двойки вида (j, k)
и из всех k
выбираем наиболее часто встречающийся (или случайный из топ-3/5/N наиболее часто встречающихся
⚠️ аналогично и с окончаниями предложений. хранить
?
/.
как части слов нельзя, это ну пиздец диковато. я бы хранила это как какую-то условную строку(ENDSEN)
, и для слов, которые попадают в двойку с(ENDSEN)
, тоже вела бы статистику.
в общем, выбираем стартовый токен — random select из всех токенов сообщения, но плюс с домножением на частоту встречаемости данного слова в начале (т. е. если нам написали вы же пидор
, мы как бы можем начать одинаково с вы
, же
или пидор
, но учитывая историю встречаемости слов — будет примерно так: (1/3) * (1+1) * вы + (1/3) * 1 * же + 1/3 * 1 * пидор
)
не описала:
@REDNBLACK спасибо за доку! :+1:
я подумаю ещё по поводу того, каким должен быть ботик, а пока предлагаю тебе тоже поприкидывать, как его лучше реализовать.
не исключено, что всё написанное выше я потом назову буллшитом, потому что это прям первые пришедшие в голову мысли
https://github.com/telegram-bots/imaginaryfriend/blob/737375bf28d9fb12666b19374c152b1e212c10ed/src/service/reply_generator.py#L5
please, document this class's methods and the logic. I believe ReplyGenerator is the core part of the code
😸