GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.2 (3)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: MiLK
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 1:39
Ага, тогда ясно в чем проблема. Просто я для тестирования пробовал
r1: anna
[Proceed]
R2: bella
[Proceed]
Привычка в отношении моих программ....
А можно както обрабатывать и такие запросы?
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 1:46
Да и еще где-то читал у Вас о самоизменяемости кода. Как именно это выглядит?
Насколько я понимаю то пользователь через обычный запрос не может писать правила ($RULE), а есть какаято возможность чтобы через какое-то правило видоизменить код самой программы?
Ну там запрос:
-----
Запомни новое правило:
$RULE Операция «Тактичность»
Привет, $%это слово не подходит$% Clementina!
$RULE–BODY
Привет, Clem. Верни книжку!!!
$RULE–END
Конец правила
-----

А вообще программа супер Наверное сказываеться моя слабость к анализу текста
[Ответ][Цитата]
Плюмаж
Сообщений: 110
На: MiLK
Добавлено: 19 мар 08 1:53
Цитата:
Автор: Corwin

Ага, тогда ясно в чем проблема. Просто я для тестирования пробовал
r1: anna
[Proceed]
R2: bella
[Proceed]
Привычка в отношении моих программ....
А можно както обрабатывать и такие запросы?


Когда Вы работаете в диалоговом режиме, и нажимаете Proceed, происходит следующее:
1. MiLK создает файл milk_in.tmp
2. Добавляет в него строку "INCLUDE" с тем файлом, который сейчас выбран, как файл включения
3. Добавляет тект оставшийся без ответа (см.ниже)
4. Добавляет текст, который Вы ввели
5. Запускает копию самого себя, передавая в качестве:
- входного файла : milk_in.tmp
- выходного файла: milk_out.tmp
- файла ошибок: milk_err.tmp
6. Ждет результатов работы
7. Если был получен milk_err, то ошибка - выдается
8. Если получен пустой milk_out, то считается, пользователь ввел текст, который как-то изменил данные (возможно), но не требует ответа - весь такой "безответный" текст хранится между "proceed-ами" и каждый раз передается заново.

По сути, MiLK в диалоговом режиме - это просто оболочка. Ядро даже не инициируется. Честно говоря, в этой версии сделано промежуточное сохранение только "безответного" текста - т.к. ориентация в основном на работу с файлами.
[Ответ][Цитата]
Плюмаж
Сообщений: 110
На: MiLK
Добавлено: 19 мар 08 2:12
Ужасно. Честно говоря, тут возможны два ответа.
Прежде всего, полагалось, что код - это текст. Нет разделения между результатами и тем, что исполняется. Изменение текст - это изменение кода.

Второй ответ - элемент delimiter в ассоциации sys.parameters
Там хранится символ "$". В опубликованной версии, он просто хранится и никаких опреций с ним не предусмотрено. В наработках, предполагается отслеживание изменения этого символа и "пере-распарсивание" кода. Примерно так:


$RULE MakeNewRule
Запомни новое правило
$%
body of my new rule
$%
Конец
$RULE-BODY
$REM поставим новый разделитель. Когда правило отработает
$REM в текст будет вставлено описание нового правила
$REM MiLK, разбирая текст дальше, найдет его, прочтет

$ASSOCIATE sys.parameters
delimiter
#

$%
body of my new rule
$%

#REM вернем разделитель обратно, т.к. дальше может быть код с "классическим" разделителем
#ASSOCIATE sys.parameters
delimiter
$
$RULE-END



(заметьте, что вставка значения body описана с использованием $, а прочие команды в теле - с использованием #. Это приемлемо, т.к. есть разница между начиткой правила и исполнением его тела - правило уже прочитано и разобрано на элементы(в памяти); встака значений перемнных происходит ДО начала исполнения тела (это видно при трассировке) )

А затем:


Запомни новое правило

#RULE xxx
Пока, #%кто-то#%
#RULE-BODY
Прощай, моя ненаглядная и трепетно любимая #%кто-то#%!
#RULE-END

Конец

Input> Пока, кружка чая
MiLK> Прощай, моя ненаглядная и трепетно любимая кружка чая!



Повторюсь, что в показанной версии есть только элемент delimiter, но нет обработчика его изменений.
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 2:16
А какого максимального размера файл, MiLK может обработать?

Также Вы не думали выпускать MiLK в виде DLL чтобы желающие могли подсоединять его к своим программам? На нем можно весьма неплохую программу собеседник (чат бот) написать, а не то что сейчас всякие программисты штампуют, называя это прогрессивными русско-говорящими чат ботами
[Ответ][Цитата]
daner
Сообщений: 4593
На: MiLK
Добавлено: 19 мар 08 2:31
Цитата:
Автор: Corwin

А какого максимального размера файл, MiLK может обработать?

Также Вы не думали выпускать MiLK в виде DLL чтобы желающие могли подсоединять его к своим программам? На нем можно весьма неплохую программу собеседник (чат бот) написать, а не то что сейчас всякие программисты штампуют, называя это прогрессивными русско-говорящими чат ботами


сомневаюсь. в чат-ботах проблема не в обработке текст файлов, так что...
[Ответ][Цитата]
daner
Сообщений: 4593
На: MiLK
Добавлено: 19 мар 08 2:37
>>>>>>>>> Плюмаж
Кстати, а как на счет такого правила:

если строка начинается с повторения "зашел" какое-то количество раз и заканчивается "вышел" точно такое же количество раз, то заменить строку на "Глубина вхождения #", где # количество повторений "зашел".

Ну или в более привычном виде : "проверка скобок в выражении".
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 3:19
>если строка начинается с повторения "зашел" какое-то количество раз и заканчивается "вышел" точно такое же количество раз, то заменить строку на "Глубина вхождения #", где # количество повторений "зашел".

Вообще не ко мне вопрос но в целом удалось написать небольшую программку (прад неполноценную) которая это делает:

$ASSOCIATION-CREATE vrs
$ASSOCIATE vrs
count
0

$RULE t1
$%var1$% $%var1$% $%other$%
$RULE-BODY
$ASSOCIATE vrs
count
$NUMBER +
${vrs$count$}
1
?cntrep? $%var1$% $%var1$% $%other$%
Total Count of $%var1$% : ${vrs$count$}
$RULE-END

$RULE t2
?cntrep? $%var1$% $%var1$% $%other$%
$RULE-BODY
$ASSOCIATE vrs
count
$NUMBER +
${vrs$count$}
1
?cntrep? $%var1$% $%other$%
$RULE-END


В результате:

Input> " " Hello
MiLK> ?cntrep? " Hello
Total Count of " : 2

Input> " " " Hello
MiLK> ?cntrep? " Hello
Total Count of " : 3

Input> вошел вошел вошел вошел студент
MiLK> ?cntrep? вошел студент
Total Count of вошел : 4

Как бы это убрать результаты последней итерации, а именно ?cntrep? вошел студент?
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 3:23
>Прежде всего, полагалось, что код - это текст. Нет разделения между результатами и тем, что исполняется. Изменение текст - это изменение кода.

О... Тогда извиняюсь за глупый вопрос....
Действиетльно, я раньше не обращал на это внимание...

>В опубликованной версии, он просто хранится и никаких опреций с ним не предусмотрено.

Еще один глупый вопрос:
А когда можно будет с этим поэксперементировать?
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 19 мар 08 3:35
>сомневаюсь. в чат-ботах проблема не в обработке текст файлов, так что...

Вообще любой чат бот это и есть обработка текста. MiLK с этим очень хорошо справляется. Конечно такая привязанность к файлам несколько усложняет написание чат бота на этой платформе.

А в целом обработка текстовых файлов это весьма интересная и полезная возможность.
Вот к примеру появилась у меня когда-то идея чтобы диалоги в книге курсивом выделить (что б читать было приятней). Все диалоги имели такой вид:
“Good evening,” I said. (Здесь на форуме не видно, но в строчке две разных кавычки)
соотвественно нужно было преобразовать в
<i>“Good evening,”</i> I said.
В принципе я мог обучить Логос это делать (для этого достаточно всего одного примера, сошел бы даже выше описанный), но он у меня пока не работает с большими текстами. Так что пришлось программу на Делфи писать и убить примерно 40 мин времени. Тогда как на MiLKе такую программу можно написать за пару минут. Прада я не знаю его скорости обработки и рекомендуемые размеры входного файла...
[Ответ][Цитата]
Плюмаж
Сообщений: 110
На: MiLK
Добавлено: 19 мар 08 6:30
Цитата:
Автор: Corwin
... dll ...


Нет, Corwin, пока нет. Пока еще со многим не ясно - как и куда. По крайней мере, на этой неделе перерыв от (изменений) в MiLK - пауза.

Размер файла - не знаю. Теоретически, это зависит от максимального размера списка в Delphi (ну, наверное, точно больше 10 000 элементов), и от угрозы получения "Out of memory".

Цитата:
Автор: Daner
если строка начинается с повторения "зашел" какое-то количество раз и заканчивается "вышел" точно такое же количество раз, то заменить строку на "Глубина вхождения #", где # количество повторений "зашел".

Ну или в более привычном виде : "проверка скобок в выражении".


Если открывающие скобки идут подряд(как Вы описали) то, например, просто посчитаем их количество. (Покажем только т.н. служебное правило - вернет число. Если нужно сообщение, то необходимо, например, вызывающее правило)


$RULE скобки
? ($%rest$%
$RULE-VERSION-VARIABLE Result
$NUMBER +
1
? $%rest$%
$RULE-VERSION
? $%_$%
$RULE-VERSION-VARIABLE Result
0
$RULE-BODY
$%result$%
$RULE-END

Input> ? ((((sin))))
MiLK> 4



Если возможен всякий "мусор" в строке, то посложнее (выглядит массивно, но суть проста):


$REM подсчет уровня вложенности скобок
$REM будем искать и удалять самый внутренний текст, окруженный скобками
$RULE ??скобок??
??скобок?? $%left$%($%center$%)$%right$%
$RULE-VERSION-VARIABLE result
$REM Если центр содержит скобки - неуспех сопоставлнния.
$CHECK 1
$STRING CONTAIN
)
$%center$%
$STRING CONTAIN
(
$%center$%
$CHECK-THEN
$FAILURE
$CHECK-END

$NUMBER +
1
??скобок?? $%left$%$%right$%
$RULE-VERSION пустые скобки преобразуем к "полным" (для превой версии)
??скобок?? $%left$%()$%right$%
$RULE-VERSION-VARIABLE result
??скобок?? $%left$%(0)$%right$%
$RULE-VERSION "голую" левую скобку "прикроем"
??скобок?? ($%right$%
$RULE-VERSION-VARIABLE result
??скобок?? 0($%right$%
$RULE-VERSION "голую" правую скобку "прикроем"
??скобок?? $%left$%)
$RULE-VERSION-VARIABLE result
??скобок?? $%left$%)0
$RULE-VERSION
??скобок?? $%text$%
$RULE-VERSION-VARIABLE result
0
$RULE-BODY
$%result$%
$RULE-END

Input> ??скобок?? 2+(2*3+(5/2+(-1+sin(2*pi))))
MiLK> 4



Цитата:
Автор: Corwin
Как бы это убрать результаты последней итерации, а именно ?cntrep? вошел студент?


У меня примерно так получилось:


$RULE ?повторов в начале?
?повторов в начале? $%x$% $%x$% $%others$%
$RULE-VERSION-VARIABLE result
$NUMBER +
1
?повторов в начале? $%x$% $%others$%
$RULE-VERSION
?повторов в начале? $%x$% $%x$%
$RULE-VERSION-VARIABLE result
2
$RULE-VERSION
?повторов в начале? $%others$%
$RULE-VERSION-VARIABLE result
1
$RULE-BODY
$%result$%
$RULE-END

Input> ?повторов в начале? 15 15 15 остальное
MiLK> 3

Input> ?повторов в начале? hello hello good bye
MiLK> 2


[Ответ][Цитата]
daner
Сообщений: 4593
На: MiLK
Добавлено: 20 мар 08 12:27
$STRING CONTAIN
это встроенный оператор?
[Ответ][Цитата]
Corwin
Сообщений: 1324
На: MiLK
Добавлено: 20 мар 08 16:44
Это, кажеться, проверка на вхождение подстроки в строку.
[Ответ][Цитата]
daner
Сообщений: 4593
На: MiLK
Добавлено: 20 мар 08 16:46
Цитата:
Автор: Corwin

Это, кажеться, проверка на вхождение подстроки в строку.

Не, ну это я догадался. я спросил именно то, что спросил.
[Ответ][Цитата]
Плюмаж
Сообщений: 110
На: MiLK
Добавлено: 21 мар 08 1:41
Цитата:
Автор: daner

$STRING CONTAIN
это встроенный оператор?


Вы правы. Прежде всего, спасибо Вам за этот вопрос - благодаря ему удалось обнаружить один досадный пропуск в механизме сопоставления. Пропуск исправлен (версия стала 2/3), и адрес для скачаивания прежний.

Да, STRING CONTAIN - это встроенный оператор, но его можно легко сделать самостоятельно. (Фокус в том, что, отвечая на Ваш вопрос и обнаружился пропуск - правило(ниже), которое должно было срабоать, не сработало - я пропустил в механизме сопоставления один из винтиков).


$REM будем здесь хранить то, что надо найти
$ASSOCIATION-CREATE what

$REM вернет 1, если строка содержит значение элемента need ассоциации what
$RULE ?служ.правило для "My own contain"?
?служ.правило для "My own contain"?
$%_$%$%bingo$%$%_$%
$RULE-VERSION
?служ.правило для "My own contain"?
$%_$%$%bingo$%
$RULE-VERSION
?служ.правило для "My own contain"?
$%bingo$%$%_$%
$RULE-VERSION
?служ.правило для "My own contain"?
$%bingo$%
$RULE-BODY
$CHECK $%bingo$%
${what$need$}
$CHECK-THEN
1
$CHECK-ELSE
$FAILURE
$CHECK-END
$RULE-END

$REM вернет 0,
$RULE ?служ.правило #2 для "My own contain"?
?служ.правило для "My own contain"?
$%_$%
$RULE-BODY
0
$RULE-END

$REM вызывающее правило
$RULE My own contain
строка содержит
$%что$%
$%где$%
$RULE-BODY
$ASSOCIATE what
need
$%что$%
?служ.правило для "My own contain"?
$%где$%
$RULE-END

Input>строка содержит
XYZ
abcdefgh
MiLK> 0

Input>строка содержит
XYZ
abcdXYZefgh
MiLK> 1


Еще раз, спасибо ... и.... мне очень неловко за этот пропуск.
[Ответ][Цитата]
 Стр.2 (3)1  [2]  3<< < Пред. | След. > >>