[Скрипт] Алиса и Википедия

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

abc
Сообщения: 34
Зарегистрирован: Ср ноя 07, 2018 3:28 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение abc » Вт дек 11, 2018 10:59 pm

Svetлая писал(а):
Пн май 07, 2018 12:54 am
СпойлерПоказать

Код: Выделить всё

$keywords = preg_split("/[\s,]+/",$original);  // помещаем запрос в массив
$totalz=count($keywords);
for($i=2;$i<$totalz;$i++) {  // i=2 отсекаем голосовую команду (шаблон). в моем случае "что такое" или "кто такой". Значение i= равна кол-ву слов в голосовой комманде.
$message_textz=$message_textz." ".$keywords[$i];
}

say("$message_textz,ожидайте,ищу по вики ",2); 

// Установка свойства объекта на основании полученной переменной
sg("Объект.Свойство",$message_textz);
context_getuser();
context_clear();
context_activate(ID);

$zap="$message_textz";
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);

$data_xml = simplexml_load_string($answ); //загружаем ответ от вики в массив
$otvet=$data_xml->Section[0]->Item[0]->Description[0]; //получаем первый найденный вариант
$description = $data_xml->Section[0]->Item[0]->Description[0]; //получаем определение слова 
if (empty($description)) { //если ничего не нашлось
    say ("по прямому запросу ничего нет. уточните запрос",2);
	 
 	for ($i=1; $i<50;) { // максимальное количество выводимых найденых вариантов запросов. можно сократить.
		$description = $data_xml->Section[0]->Item[$i]->Description[0]; //получаем определение слова 
		if (!empty($description)) { //если  определение есть, продолжаем
			$otvet2=$data_xml->Section[0]->Item[$i]->Text[0]; // записываем следующий вариант запроса
//удаление спецсимволов
			$otvet2=iconv("UTF-8","CP1251//IGNORE",$otvet2);
			$otvet2=iconv("CP1251","UTF-8",$otvet2);
			$otvet2="Вариант ".$i.":".$otvet2." "; // подготавливаем для озвучивания/ вывода на экран
			say($otvet2,2);
			$i++;
		} else { 
         	say("Больше вариантов нет.",2);
         	$i=100;
        }
	}
} else {
//удаление спецсимволов
	$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
	$otvet=iconv("CP1251","UTF-8",$otvet);
	say($otvet,2);
//Сохраняем запросы в файл. это лог. на работу скрипта не влияет. можно удалить
	$data = fopen('wiki.xml', 'a'); //открываем файл для до записи 'a' для перезаписи 'w'
	$message_textz = "\n#######\n".$message_textz." = ".$otvet."\n\n";
	fwrite($data, $message_textz); //записываем результат выполнения
	fclose($data); //закрываем
 }

Почти во всех ответах с вики есть часть ответа в скобках. Алиса не всегда читает ее так как прочитал бы человек. Например, по запросу что такое китай:
Кита́й (Кита́йская Наро́дная Респу́блика, КНР; кит. трад. 中華人民共和國, упр. 中华人民共和国, пиньинь: Zhōnghuá Rénmín Gònghéguó, палл.: Чжунхуа Жэньминь Гунхэго) — государство в Восточной Азии.

Можно обрезать часть ответа в скобках. Для этого после 46 строчки перед say($otvet,2); надо вписать $otvet = preg_replace("/\(.*\)/i", "", $otvet);
и все что идет в скобках будет обрезано и останется: Китай — государство в Восточной Азии.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Скрипт] Алиса и Википедия

Сообщение xor » Вт дек 11, 2018 11:15 pm

abc писал(а):
Вт дек 11, 2018 10:59 pm


Почти во всех ответах с вики есть часть ответа в скобках. Алиса не всегда читает ее так как прочитал бы человек. Например, по запросу что такое китай:
Кита́й (Кита́йская Наро́дная Респу́блика, КНР; кит. трад. 中華人民共和國, упр. 中华人民共和国, пиньинь: Zhōnghuá Rénmín Gònghéguó, палл.: Чжунхуа Жэньминь Гунхэго) — государство в Восточной Азии.

Можно обрезать часть ответа в скобках. Для этого после 46 строчки перед say($otvet,2); надо вписать $otvet = preg_replace("/\(.*\)/i", "", $otvet);
и все что идет в скобках будет обрезано и останется: Китай — государство в Восточной Азии.
всё уже решено
viewtopic.php?f=23&t=2392&start=30#p82270 без доработок 12 строк кода
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: [Скрипт] Алиса и Википедия

Сообщение directman66 » Ср дек 12, 2018 7:45 am

xor писал(а):
Вт дек 11, 2018 11:15 pm
всё уже решено
viewtopic.php?f=23&t=2392&start=30#p82270 без доработок 12 строк кода
какой код знакомый )))

по моему мой пример работает только на одно слово, а дед мороз как раз не отвечает. Хотя уже не помню.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Скрипт] Алиса и Википедия

Сообщение xor » Ср дек 12, 2018 7:53 am

directman66 писал(а):
xor писал(а):
Вт дек 11, 2018 11:15 pm
всё уже решено
viewtopic.php?f=23&t=2392&start=30#p82270 без доработок 12 строк кода
какой код знакомый )))

по моему мой пример работает только на одно слово, а дед мороз как раз не отвечает. Хотя уже не помню.
Да, это из Вашего примера с моим избавлением от ударений и умляутов.
(Ссылка на автора присутствует))).
Работает и Дед мороз. Больно смотреть, как люди мучаются с давным-давно готовым решением

Там плохо только то, что возвращается только первое определение, если ответ многозначен.
Отправлено с моего Redmi 4X через Tapatalk



abc
Сообщения: 34
Зарегистрирован: Ср ноя 07, 2018 3:28 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение abc » Ср дек 12, 2018 8:47 am

xor писал(а):
Вт дек 11, 2018 11:15 pm
всё уже решено
viewtopic.php?f=23&t=2392&start=30#p82270 без доработок 12 строк кода
Этот вариант у меня почему-то не заработал

Код: Выделить всё

08:45 Алиса: 
08:45 Алиса: Запрашиваю у Wikipedia информацию о 
08:45 Admin: вики Дед Мороз
Поэтому взял вариант, о котором писал выше
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Скрипт] Алиса и Википедия

Сообщение xor » Ср дек 12, 2018 12:23 pm

abc писал(а):
xor писал(а):
Вт дек 11, 2018 11:15 pm
всё уже решено
viewtopic.php?f=23&t=2392&start=30#p82270 без доработок 12 строк кода
Этот вариант у меня почему-то не заработал

Код: Выделить всё

08:45 Алиса: 
08:45 Алиса: Запрашиваю у Wikipedia информацию о 
08:45 Admin: вики Дед Мороз
Поэтому взял вариант, о котором писал выше
Ну, не знаю, у меня ок.Изображение

Отправлено с моего Redmi 4X через Tapatalk

abc
Сообщения: 34
Зарегистрирован: Ср ноя 07, 2018 3:28 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение abc » Ср дек 12, 2018 2:30 pm

xor писал(а):
Ср дек 12, 2018 12:23 pm
Ну, не знаю, у меня ок.
Да, заработал, у меня была ошибка

В общем, и в вашем, и в моем варианте скобки режутся неправильно, когда в ответе они в нескольких местах. Например, в запросе США скобки встречаются 5-6 раз. В итоге Алиса получает такой сильно урезанный текст:

Код: Выделить всё

Соединённые Штаты Америки, часто кратко именуемые США или Соединёнными Штатами (англ.
Моих знаний в регулярках недостаточно, чтобы сделать все правильно.

И еще оба варианта по запросу США или сша возвращают разные ответы.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Скрипт] Алиса и Википедия

Сообщение xor » Ср дек 12, 2018 4:34 pm

Ну, мы все знаем, что такое США)
Наворачивать искусственный разум, если в 90% случаев 12 строк дают верный результат, я считаю излишним. А если уж приспичит что-то важное узнать, можно и ручками поискать.

Отправлено с моего Redmi 4X через Tapatalk

newz20
Сообщения: 172
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 93 раза
Поблагодарили: 93 раза

Re: [Скрипт] Алиса и Википедия

Сообщение newz20 » Ср дек 12, 2018 5:06 pm

abc писал(а):
Ср дек 12, 2018 2:30 pm
xor писал(а):
Ср дек 12, 2018 12:23 pm
Ну, не знаю, у меня ок.
Да, заработал, у меня была ошибка

В общем, и в вашем, и в моем варианте скобки режутся неправильно, когда в ответе они в нескольких местах. Например, в запросе США скобки встречаются 5-6 раз. В итоге Алиса получает такой сильно урезанный текст:

Код: Выделить всё

Соединённые Штаты Америки, часто кратко именуемые США или Соединёнными Штатами (англ.
Моих знаний в регулярках недостаточно, чтобы сделать все правильно.

И еще оба варианта по запросу США или сша возвращают разные ответы.
Судя по коду берется раздел дескрипшн из xml, а он содержит
Соединённые Шта́ты Аме́рики (англ. United States of America), часто кратко именуемые США (англ. USA) или Соединёнными Штатами (англ.
Учитывая что последняя скобка не закрыта, то все отработало правильно.
Сам запрос тут https://ru.wikipedia.org/w/api.php?acti ... inprop=url
А полная версия https://ru.wikipedia.org/wiki/США превращается в https://ru.wikipedia.org/wiki/%D0%A1%D0 ... 0%BA%D0%B8
Так что тут либо писать ВИКИ о неверном описании, либо смириться. Описание полностью должно содержать Соединённые Шта́ты Аме́рики (англ. United States of America), часто кратко именуемые США (англ. USA) или Соединёнными Штатами (англ. United States, U.S., в просторечии — Америкой) как минимум
Проверьте на слове РЕКА там тоже есть 2 скобки и правильное описание идет.
Аватара пользователя
Svetлая
Сообщения: 238
Зарегистрирован: Вс май 06, 2018 11:36 pm
Благодарил (а): 80 раз
Поблагодарили: 75 раз
Контактная информация:

Re: [Скрипт] Алиса и Википедия

Сообщение Svetлая » Пн дек 17, 2018 8:01 pm

abc писал(а):
Вт дек 11, 2018 10:59 pm
Почти во всех ответах с вики есть часть ответа в скобках. Алиса не всегда читает ее так как прочитал бы человек.
xor писал(а):
Ср дек 12, 2018 12:23 pm
Ну, не знаю, у меня ок.
У меня голосовой движок от яндекса. "Деда Мороза" знает и уважает))
Из всего выложенного ранее у меня не заработало.

Думаю в формировании отказов участвует всё. Голосовой движок (именно он отвечает за распознание, интонацию, ударение), сборка сервера (изначальная! месяц назад поставила на новом железе свежую. простой перенос бакапом не помог) и ... ))

Так что, пробуем несколько предложенных вариантов и допиливаем если что ;)
Ответить