Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.11.2023
Сообщений: 4

Wikipedia API

09.06.2024, 10:59. Показов 329. Ответов 0

Студворк — интернет-сервис помощи студентам
Приветствую! Решился я сделать чат-бота, который будет отвечать на вопросы пользователя используя данные из Википедии. И возникли некоторые сложности: чат-бот на часть вопросов отвечает правильно ('Вопрос: Кто такой Алексей Михайлович?
Ответ: Алексе́й Миха́йлович Тиша́йший (9 (19) марта 1629, Москва — 29 января (8 февраля) 1676, Москва) — второй русский царь из династии Романовых (14 (24) июля 1645 — 29 января (8 февраля) 1676), сын Михаила Фёдоровича и его второй жены Евдокии.
Алексей Михайлович получил образование у своего воспитателя Бориса Морозова, прежде чем взойти на престол в возрасте 16 лет.'), но на некоторых начинает прям тупить ('Вопрос: Что такое СССР?
Ответ: «Что такое? Кто такой?» — универсальная энциклопедия в двух (позже — в трёх) томах, предназначенная для детей.
). Как это исправить я не знаю, спрашивал у CHAT GPT, он сделал только хуже, еле поправил. Может у кого-нибудь есть идеи что где и как исправить, чтобы все работало?

import spacy
import wikipedia
import wikipediaapi
import random
import string
from transformers import pipeline, GPT2LMHeadModel, GPT2Tokenizer

# Загрузка модели SpaCy для русского языка
nlp = spacy.load('ru_core_news_md')

# Указание идентификатора модели из Hugging Face
model_name_or_path = 'sberbank-ai/rugpt3small_based_on_gpt2'

# Загрузка модели и токенизатора
model = GPT2LMHeadModel.from_pretrained(model_na me_or_path)
tokenizer = GPT2Tokenizer.from_pretrained(model_name _or_path)

# Создание генератора текста
generator = pipeline('text-generation', model=model, tokenizer=tokenizer)


def classify_question(query):
query_lower = query.lower()
if any(keyword in query_lower for keyword in ["кто", "кто такой", "кто такая"]):
return "who"
elif any(keyword in query_lower for keyword in ["что", "что такое"]):
return "what"
elif any(keyword in query_lower for keyword in ["когда"]):
return "when"
elif any(keyword in query_lower for keyword in ["почему", "зачем"]):
return "why"
elif "расшифровывается" in query_lower:
return "abbreviation"
return "general"


import wikipedia


def search_wikipedia(query):
try:
# Установка языка поиска на русский
wikipedia.set_lang("ru")

# Поиск страницы по запросу
page = wikipedia.page(query)

# Получение краткого резюме страницы
summary = wikipedia.summary(query, sentences=2)

return summary
except wikipedia.exceptions.PageError:
return "Страница не найдена."
except wikipedia.exceptions.DisambiguationError :
return "Найдено несколько возможных страниц. Уточните запрос."


def generate_answer(question):
prompt = f"Вопрос: {question}\nОтвет:"
response = generator(prompt, max_new_tokens=100, num_return_sequences=1, truncation=True)
generated_text = response[0]['generated_text']
start_index = generated_text.find("Ответ:") + len("Ответ:")
return generated_text[start_index:].strip()


def get_abbreviation_meaning(query):
# Добавьте здесь логику для расшифровки сокращений
return "Расшифровка сокращения не найдена."



def main():
while True:
user_input = input("Задайте ваш вопрос: ")
if user_input.lower() in ['выход', 'exit']:
break
question_type = classify_question(user_input)
print(f"Тип вопроса: {question_type}")

# Попробуем найти ответ в Wikipedia
wiki_answer = search_wikipedia(user_input)

if wiki_answer:
print(f"Вопрос: {user_input}")
print(f"Ответ: {wiki_answer}")
else:
# Если не удалось найти ответ в Wikipedia, используем генеративную модель
answer = generate_answer(user_input)
print(f"Вопрос: {user_input}")
print(f"Ответ: {answer}")

if __name__ == "__main__":
main()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2024, 10:59
Ответы с готовыми решениями:

Парсинг страницы сайта ru.wikipedia.org/wiki/Россия
Парсинг страницы сайта ru.wikipedia.org/wiki/Россия Осуществите парсинг страницы сайта в блоке статьи...

Wikipedia API
Всем привет! Может кто когда пользовался этой штукой? Буду рад любой инфе (желательно на русском). Может у вас есть свои проекты с...

Работа с wikipedia api
Хотелось бы поинтересоваться, возможно ли адекватно работать с wikipedia api в java? Информация везде поверхностная. Так же интересует...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2024, 10:59
Помогаю со студенческими работами здесь

Wikipedia в Топ 1
А знате ли Вы что если по ННому запросу в ТОП1 стоит Wikipedia то конкуренция по запросу ничтожно мала и в топ запрос можно вывести парой...

Excel + wikipedia
На странице википедия есть несколько таблиц. И таких страниц несколько. Структура всех таблиц одинакова. Я могу и вручную скопировать...

Wikipedia NoFollow
Вот такая вот "информация к размышлению": <i>24.01.2007 12:19 Мэтт Каттс комментирует Wikipedia nofollow Закрытие всех...

Парсинг wikipedia
Добрый день! Не могу приумать, как пропарсить страницы wikipedia с помощью питона. Библиотеку wikipedia-master пробовал,но она русские...

Парсинг страниц ru.wikipedia.org
Добрый день. Пытаюсь взаимодействовать с API русской википедии так: import http.client connection =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru