Ну что ж нужно постепенно решать насущные задачи.Первым делом я хотел бы провести эксперимент с сетью «если».На вход системы Юли я собираюсь подать 1,5-гигабайтную библиотеку классических книг,на выходе хочу получить совмещённую систему «если».
Например в книге Пушкина написано — «если купить старого вола то к нему нужно купить хорошое седло»,а в книге Ги ДЕ Мопассана «если хочешь купить хорошое седло для своего вола то смотри на качества кожи».Соответственно система уже будет знать при проектиовании программы действий возделки поля в сельских условиях алгоритм действий.И ей нужно будет меньше реусрсов для экпермментирования и поиска закономерностей для решения этой задачи.
Я уверен что найдётся всего лишь несколько десятков связей,из которых 98 процентов будут не нужны,возможно что даже не одна не будет нужна однако уже появиться остов-скелет мышления,на котором можно будет строить мысли и их направления,постепенно усложняя более сложными механимзмами,такими как синононимы,метафоры,привязка мечтоимений к предметам,слоистая структура конструкций словесных,синонимиченые конструкции.Таким же способом можно составлять сети из технических книг и книг других тематик.Естественно потом появиться вопрос о доверии к книге которую читаешь,но это потом.
Сам скрипт поочерёдной обработки текстов функцией text1 готов и сами тексты тоже готовы,однако придётся всё-таки переписать модуль поиска шаблонов и конструкций в тексте.Нам нужен скрипт которые сможет фильтровать текст в зависмости от:
для слов-
-числа слова
-падежа слова
-времени слова
-части речи
-рода слова
...
для связей между словами-
-учитывать поочерёдный порядок слов ,например «белый»+«снег» чтобы был найден в предложении «На нашей улице нет белого снега»
-при этом как в предыдущем примере к какое-то слово могло стоять в любом месте ограниченном какими-то условиями но чтобы оно было
-также нужно разграничить слова в конструкции на обязательные и необязательные.Обязательные это те которые должны совпасть,необязательные это которые могут быть а могут не быть,но желательно чтобы они были и в случае чего парсер запомнил их характеристики.
При этом нужен удобный интерфейс составления шаблонов,в котором удобно их будет создавать (однако опять же его не нужно делать,пока не будет готов остов).
Пока в каком-то смысле у меня парсер есть,просто я его сам написал и не понимаю как он работает из-за его сложности.
Правильно было бы создать отдельное подокно вывода для каждого модуля системы чтобы удобнее было работать,чтобы у каждого окна был большой заголовок с обозначением вывода,это можно сделать с помощью специальной функции которая выводит обратные пути фукнций.Первым делом начну с этого.
Если же я конструирую программу которая создаёт программу я должен точно записывать алгоритм своих действий и его анализировать:
1)Первым делом создам тестовый файл на php чтобы вспомнить как работает debug_backtrace ,а то если я встрою её сразу то будет много мороки.
//а то будет много мороки.
а)Конструкция «чтобы» разделяет действие на два предложения,оно определяет последовательность выполнения операции и
условие выполнения операции то которое стоит в if(создам текстовый файл){вспомню как работает debug_backtrace}
Однако тут перепуталось причина,не совсем верный вывод получился,правильнее
if(автор предложения создаст текстовый файл){автор предложения вспомнит как работает debug_backtrace}
То есть важно ещё к констукции «чтобы» присоединять личность автора строк
б)впереди обезличенное сказуемое мысленнно дополняемое «я создам» ,то есть в шаблоне наличие подлежащего не обязательно
пока у меня всё строиться в парсере на связке «подлежащее»+«сказуемое»,значит нужно исправлять
в)«Первым делом» — фразеологичное словосочетание обозначающее последовательность действий,может быть в связке с «затем»
или «за тем» или «потом» или «после этого».В случае второго предложения может опускаться.Второе предложение автоматически
становиться вторым действием(?)
г)«тестовый файл»-связка дополнения и зависящего от него определения ,а само словосочетание зависит от «создам» .Можно «создать лампу»,»создать кувшин»,»создать файл»,»создать кувшин»,то есть речь может идти о разных функциях и совмещённых,
в случае же дополнительного оперделения зависящего от дополнения «создать тестовый файл»,»создать большой файл»,»создать пустой файл»,уже больше совмещённых функций,то есть определения зависящие от дополнений уже ближе к аргументам функций а не к названию самой функции.
д)«на php» — я мог добавить и до «тестовый файл» и после этого словосочетания и смысл фразы был бы также понятен,я вообще
мог изменить местоположение этой фразы кроме фразеологичного словосочетания «Первым на php делом...» . или если я перейду дальше слова «чтобы»,иначе меняется смысл предложения.Однако ещё стоит запомнить правило предлог стоит впереди своего
дополнения.
е)«вспомнить»-следствие создания текстового файла,обезличенное сказуемое,может находиться только на своём месте или
в неправильном варианте «как работает вcпомнить»,опять же нет чёткого подлежащего у этого сказуемого однако с помощью «чтобы» создаёт алгоритм действий.»Вспомнить» обозначает — получить результаты выполнения кода в браузере при задании
разных аргументов для функции debug_backtrace.То есть чтобы понять смыл дейстивя нам нужно привязать «вспомнить» к
«как работает+(функция php)" то есть обезличенное сказуемое привязать к констркции «как» и к второму сказуемому «работает» и добавить ко всему этому функцию CURL для вызова страниц localhost и обработки ответов.
ж)в данном случае «как» используется в виде желания получить ответ на вопрос «Как работает debug_backtrace?»,
то есть в данном дейвтий она призывает найти ответ на вопрос,
и создавать сам и редактировать шаблоны (но это уже совсем пока сложно и пока не нужно)
Нужно что-то вроде понятного словесного API.
Разработка
Итак за основу я решил взять такой формат шаблонов,
нужно чтобы учитывались интервалы,чтобы учитывалось несколько интервалов
чтобы можно было делать необязательные слова
правда пока не будет прямых связей
Строение шаблонов:
$шаблон['если'][0]=array //Шаблонов для одного слова может быть много ,поэтому введён дополнительный массив [0]
(
0=>array(
'kor'=>'если'//Корень слова 'если'
),
1=>array(//Звёздочка обозначает что элемент не обязательный ,чёрточка то что порядок этого элемента от 0 до 3
'chr'=>'1'//То есть часть речи = существительное (1)
'pad'=>'14'//Падеж либо первый либо четвёртый — либо именительный (1),либо винительный (4)
'int1'=>0
'int2'=>3
'*'=>''
),
2=>array(
'chr'=>'2'//То есть часть речи = глагол (2)
'int1'=>0
'int2'=>3
'*'=>''
),
3=>array(
'kor'=>'если'
)
4=>array(//Звёздочка обозначает что элемент не обязательный,чёрточка то что порядок этого элемента от 0 до 3
'chr'=>'1'//То есть часть речи = существительное (1)
'pad'=>'14'//Падеж либо первый либо четвёртый — либо именительный (1),либо винительный (4)
'int1'=>3
'*'=>''
),
5=>array(
'chr'=>'2'//То есть часть речи = галгол (2)
'int1'=>3
'*'=>''
),
'typ'=>'k';//Тип шаблона конструкционный
);
В каком-то смысле шаблоны нужны чтобы группировать по связям слова и адевкатно,правильно связывать их с исполняемыми функциями.
Пока эту попробуем ,а то пока это для меня слишком сложная задача на ходу создать эффектинвный словсеный API.
теперь нужно создать код обрабатывабщий эти шаблоны.
$корень=$kor[$g][$r];
$чречи=$chr[$g][$r];//
$io=0;//Счётчик массивов внитри массива связи
if($шаблон[$корень.$чречи])
{
$условия=$шаблон[$корень.$чречи];
foreach($условия as $k=>$v)
{
//Обязательное ли слово
//if($v[*]){}else{}
}
//Поиск в прямую сторону
for($i=$r;$kor[$g][$i];$i++)
{
foreach($условия as $k=>$v)
{
$flag=true;
//Совпадения по свойствам слов
if($v[kor]){if($kor[$g][$i]==$v[kor]){$flag=false;}}//Корень
if($v[chr]){if($chr[$g][$i]==$v[chr]){$flag=false;}}//Часть речи
if($v[pad]){if($pad[$g][$i]==$v[pad]){$flag=false;}}//Падеж
if($v[chi]){if($chi[$g][$i]==$v[chi]){$flag=false;}}//Число
if($v[vre]){if($vre[$g][$i]==$v[vre]){$flag=false;}}//Время
//Совпадение по интервалам
if($v[int1]){if($io>=$v[int1]){}else{$flag=false;};}
if($v[int2]){if($io<=$v[int2]){}else{$flag=false;};}
//Если нужно добавить множественные интервалы можно сделать foreach
if($flag===true)
{
//Тут for дополняет счётчик дополняет до следующего не интервального значения
for($z=$io;$условия[$z];$z++;)
{
if(!$условия[$z][int1] or !$условия[$z][int2] or !$условия[$z][*]){$io=$z;break;};
}
if(!$exit[$k])
{
$exit[$k]=array('pr'=>$g,'no'=>$r);
}
}
else
{
}
}
}
//Поиск в обратную сторону
//for($i=$r-1;$kor[$g][$r];$i--)
//{
//
//}
//}
если $io входит в интервал,то выкидывем $k
//
API-набор правил для взаимодействия между разными программами или модулями программ
Парсер-программа филтрующее в тексте какое-то шаблонное содержимое и сохраняющее его
Вообщем код готов ,завтра нужно будет встроить в движок