Викиданные: Создание бота

This page is a translated version of the page Wikidata:Creating a bot and the translation is 82% complete.
Outdated translations are marked like this.

Эта страница объясняет, как создать бота для Викиданных. По возможности делитесь своим кодом, добавляйте новые примеры и улучшайте проект.

Требования

Для создания бота требуется:

  • некоторое знание программирования (Python, Perl, PHP...);
  • фреймворк (один из нижеперечисленных) и код, который будет запущен для решения вашей задачи;
  • учётная запись бота (и утверждённая);
  • редактор исходного кода (Notepad++, Geany, vi, emacs…).

Рекомендации

Pywikibot

Ниже описан процесс установки, конфигурирования и логина с использованием pywikibot. Эти три шага нужно будет сделать один раз. Также ниже имеется базовая информация о программировании бота.

Установка

Для получения дополнительной информации об установке pywikibot см.mw:Manual:Pywikibot/Installation.
Чтобы использовать pywikibot без установики, см. mw:Manual:Pywikibot/PAWS

Чтобы установить pywikibot:

Настройка

:Для получения дополнительной информации о настройке pywikibot см. mw:Manual:Pywikibot/user-config.py.

Вы должны настроить user-config.py, указав имя бота, название домашнего проекта и язык. Для Викиданных значения последних двух параметра совпадают, это wikidata.

Задержку между правками можно сократить, добавив: put_throttle = 1

Представление системе

После того как вы настроили файл user-config.py, представьтесь системе следующим образом:

$ python login.py

Введите пароль бота и нажмите «enter». Если всё сделано корректно, после этого бот войдёт в систему.

Пример № 1: получение данных

В этом примере мы получаем данные со страницы о Дугласе Адамсе. Сохраните этот код и выполните его с помощью python example1.py

item.get() соединяется с Викиданными и получает данные. Вывод (переформатирован для большей ясности):

{
    'claims': {
        'P646': [<pywikibot.page.Claim instance at 0x7f1880188b48>],
        'P800': [<pywikibot.page.Claim instance at 0x7f1880188488>, <pywikibot.page.Claim instance at 0x7f1880188368>]
        ...
    }
    'labels': {
        'gu': '\u0aa1\u0a97\u0acd\u0ab2\u0abe\u0ab8 \u0a8f\u0aa1\u0aae\u0acd\u0ab8',
        'scn': 'Douglas Adams',
        ...
    }
    'sitelinks': {
        'fiwiki': 'Douglas Adams',
        'fawiki': '\u062f\u0627\u06af\u0644\u0627\u0633 \u0622\u062f\u0627\u0645\u0632',
        'elwikiquote': '\u039d\u03c4\u03ac\u03b3\u03ba\u03bb\u03b1\u03c2 \u0386\u03bd\u03c4\u03b1\u03bc\u03c2',
        ...
    }
    'descriptions': {
        'eo': 'angla a\u016dtoro de sciencfikcio-romanoj kaj humoristo',
        'en': 'English writer and humorist',
    },
    'aliases': {
        'ru': ['\u0410\u0434\u0430\u043c\u0441, \u0414\u0443\u0433\u043b\u0430\u0441'],
        'fr': ['Douglas Noel Adams', 'Douglas No\xebl Adams'],
        ...
    }
}
['claims', 'labels', 'sitelinks', 'descriptions', 'aliases']
[[wikidata:Q42]]

Бот выводит весь словарь с ключами для:

  • набор заявлений на странице: Property:P646 - Freebase-идентификатор, Property:P800 - "выдающаяся работа", и т.д.
  • метка элемента на нескольких языках
  • интервики-ссылки для элемента, не только с Википедии на разных языках, но также и с Викицитатника
  • описание элемента на нескольких языках
  • псевдонимы элемента на нескольких языках

После этого — список со всеми ключами для пар «ключ-значение». И наконец можно увидеть, что элемент о Дугласе Адамсе имеет идентификатор Q42.

Альтернативы

Пример выше получает ItemPage, используя английскую Википедию. ItemPage можно получить и напрямую:

Пример № 2: получение интервики-ссылок

После item.get() можно получить доступ ко всем интервики. Это ссылки ко всем Википедиям, что имеют статьи.

Вывод:

{'fiwiki': 'Douglas Adams', 'eowiki': 'Douglas Adams', 'dewiki': 'Douglas Adams', ...}

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

Пример № 4: установка описания

В этом примере устанавливается английское и немецкое описание для элемента о Дугласе Адамсе.

Настройка меток и псевдонимов работает соответствующим образом.

Пример № 6: установка интервики

Для установки интервики нужно либо создать словарь, как в примере № 4, либо использовать объекты типа Page:

Пример № 7: установка утверждения

Утверждения добавляются с помощью класса Claim. В примере Дугласу Адамсу устанавливается place of birth (P19): Cambridge (Q350).

Другие типы данных работают аналогично. В этом примере добавляются заявления строкового типа (P387 (P387)) и координаты (coordinate location (P625)):

Пример № 8: добавление квалификатора

Квалификаторы также принадлежат классу Claim. В примере к «claim» добавлен квалификатор incertae sedis (P678): family (Q35409).

Пример № 9: добавление источника

Источники тоже принадлежат классу Claim. В отличие от квалификатора, источник может содержать несколько заявлений. В примере добавляется stated in (P248) Integrated Taxonomic Information System (Q82575) с retrieved (P813) «20 марта 2014» в качестве источника к утверждению «claim».

Пример № 10: генераторы страниц

TODO

Пример № 11: Получение значений подсвойств

Здесь мы получаем значения подсвойств из ветки described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> свойства reference URL (P854) и title (P1476).

Дополнительные примеры

Некоторые пользователи делятся своими исходными кодами. См. следующие ссылки:

  • User:RobotMichiel1972/wikidata lowercase.py — пример того, как можно исправлять первую букву метки на строчную, используя в качестве «источника» английскую метку (работает только в нидерландской Википедии).
  • Презентация на хакатоне File:Bots hackathon 2013.pdf ботов "claimit.py" и "template_harvest.py", включённых в базовую версию (последний был переписан).

Wikidata Integrator

WikidataIntegrator - это библиотека для чтения и записи на Викиданных/Wikibase. We создал её для популяризации Викиданных с контентом из авторских источников на Genes, Proteins, Diseases, Drugs и другие. Детали по разным задачам могут быть найдены на странице бота на Викиданных.

Pywikibot - фреймворк для взаимодействия с API MediaWiki. Причина почему мы придумали наше собственное решение - нам нужна была высокая интеграция с SPARQL на Викиданных в качестве конечной точки для обеспечения согласованности данных (проверки дубликатов, проверки согласованности, правильный выбор элемента и т.д.). По сравнению с Pywikibot, в настоящее время WikidataIntegrator не является полной оболочкой Python для MediaWiki API, но он сосредоточен исключительно на предоставлении простых средств по созданию ботов Викиданных, основанных на Python.

Для получения большей информации, документации, инструкций по скачиванию и установке, см. здесь: https://github.com/SuLab/WikidataIntegrator/

Пример в качестве записной книжки

Пример записной книжки, демонстрирующий на примере бота добавление терапевтических областей лекарственным средствам-элементам, включая использование fastrun-мода, проверку ссылок, и удаление старых значений:

http://public-paws.wmcloud.org/46883698/example%20ema%20bot.ipynb

WikibaseIntegrator

Forked from Wikidata Integrator by User:Myst in 2020 and has seen several improvements to the API that makes it even easier to create bots using the library.

For more information, documentation, download & installation instructions, see here: https://github.com/LeMyst/WikibaseIntegrator

Пример полуавтоматического сценария

LexUse semi-automatic tool for finding and adding usage examples to lexemes. It's free software written using Python 3 in 2020 Wikidata:LexUse.

Wikibase.NET (Не рекомендуется)

Wikibase.NET — это API, заменяющее устаревший DotNetDataBot. Они не совместимы, так как Wikibase.NET больше не нужен фреймворк DotNetWikiBot.

Скачать и установить

Фреймворк можно скачать с GitHub по ссылке. Просто следуйте инструкциям на этой странице.

Известные проблемы

Примеры

Скоро.

DotNetDataBot (устарел)

Установка

Настройка

В распакованном архиве находятся файлы DotNetDataBot.dll и DotNetDataBot.xml. Второй содержит только документацию. Для того, чтобы использовать DotNetDataBot, нужно создать новый refer в проекте. Затем, написав using DotNetDataBot;, можно импортировать фреймворк.

Представление системе

Чтобы представиться системе (залогиниться) нужно создать новый объект-Site с URL вики-проекта, именем бота и паролем.

Пример № 1: получение ID с вики-страницы

ID элемента можно получить путём поиска названия связанной страницы по сайту.

Пример № 2: получение интервики-ссылок

Получить интервики элемента можно, если, загрузив содержимое, обратиться к полю links у объекта.

Пример № 3: установка описания

Для установки описания нужно вызвать функцию setDescription.

Пример № 4: установка метки

Работает аналогично — нужно вызвать setLabel.

Пример № 5: получение интервики для 100 страниц

Не поддерживается. Требуется цикл по всему списку.

API Wikibase для PHP

API-клиент для Wikibase, написанный на PHP можно скачать здесь.

Пример № 1: простой пример

Посмотрите на комментарии исходного кода чтобы понять, как это работает.


Пример № 2: создание заявлений

Посмотрите на комментарии исходного кода чтобы понять, как это работает.

VBot (не обновляется с 2017 года)

Фреймворк для Викиданных и Википедии. Читает и пишет на Викиданных и других проектах на Wikimedia, а также имеет полезный генератор списков для генерации списка страниц на Википедии и объектов в Викиданных. Также может читать дампы JSON с Викиданных.

Обзор

Бот для чтения и изменения Викиданных и Википедии.

  • Лицензия: CC0 1.0
  • Язык C#
  • Может читать и писать объекты со всеми типами данных на Викиданных
  • Может читать и писать страницы на всех Wiki-проектах
  • Может читать параметр шаблона на Wiki-страницах
  • Может читать дамп JSON
  • Может создавать списки используя:
  • Протестировано на Visual Studio Express 2013 для настольного Windows.
    • Необходимо иметь Newtonsoft.Json. Вы можете установить его с помощью NuGet внутри Visual Studio
    • Необходимо добавить вручную ссылку на System.Web для "HttpUtility.UrlEncode"

Скачать

Фреймворк может быть скачан с GitHub здесь.

Инструкция

Пример 1

Обновите английскую метку для всех элементов с instance of (P31): short film (Q24862) которые имеют director (P57) и которые имеют publication date (P577) в 1908. (Используйте Wikidata query)

LexData (Python; for Lexicographical data)

LexData is an easy to use python libary to create and edit Lexemes, Senses and Forms.

Советы

The documentation of LexData is still a bit lacking so look at existing implementations in MachtSinn or Wikdata Lexeme Forms for ideas how to use it.

If you only want to add statements to Lexemes (not forms or senses) WikibaseIntegrator might be a better choice, as it is more versatile and support a lot of data types.

Установка

You can install LexData via pip:

$ pip install LexData

Login

For all operations you need a WikidataSession. You can create it with your credentials, a bot password or an Edit Token (for example to edit via OAUTH):


Retrieve a Lexeme

You can open existing Lexemes and read their content.

Searching and creating Lexemes

If you don't know the L-Id of a lexeme you can search for it. And if it doesn't exist you can create it.

Adding information

You can easily create forms or senses, with or without additional claims:

Использование API Викиданных напрямую

Другие секции описывают, как использовать фреймворки ботов для доступа и обновления информации на Викиданных. Вы также можете взаимодействовать непосредственно с API Wikibase которое предоставляют Викиданные. Вам надо делать это в том случае, если вы разрабатываете свой собственный фреймворк или если вам надо сделать что-то, что не поддерживает сам фреймворк. Документацию для API Wikibase можно найти на mediawiki.org. Вы также можете побаловаться с этим всем в Special:ApiSandbox, используйте action=wbgetentities.

Wikibase предоставляет своё API как набор модулей для MediaWiki's "action" API. Вы можете получить доступ к нему, используя HTTP запросы на /w/api.php. Обычный формат ответа - JSON. Так что используйте язык на выбор, всё, что вам нужно - библиотека для выполнения HTTP-запросов и библиотека JSON или XML для парсинга ответов.

Пример № 1: получение Q-номера

Этот пример получает Q-номер элемента для статьи на английской Википедии о туманности Андромеды. Главный модуль-"рабочая лошадка" у API Wikibase - это action=wbgetentities, который и предоставляет эту информацию. HTTP-запрос (используя формат jsonfm для читаемого вывода от JSON) довольно простой

https://www.wikidata.org/w/api.php?action=wbgetentities&titles=Andromeda%20Galaxy&sites=enwiki&props=&format=jsonfm&formatversion=2

Попробуйте пройти по ссылке. Это не требует дополнительной информации об объекте; удалите &props= из URL, чтобы увидеть больше информации об этом. Посмотрите generated help для wbgetentities для большего количества параметров, которые вы можете указать.

Python

Вывод:

Q2469

Example 2: Get list of items without particular interwiki

...please contribute if you know how...

См. также

Внешние ссылки