Pywikipediabot/replace.py/ru

From Meta, a Wikimedia project coordination wiki

Jump to: navigation, search
Bug blank.svg
Subversion repository of Wikimedia has this file:

Replace.py — это часть системы википедиа-ботов, написанных на языке программирования Питон.

Этот бот служит для замены текста. Он получает информацию о страницах, в которых требуется замена, из дампа XML или из текстового файла, либо же изменяет одну страницу, явно указанную в параметрах командной строки -page (см. ниже). Чтобы получить дополнительную информацию, используйте синтаксис

python replace.py -help

Contents

[edit] Файлы

Этот бот использует три особых файла:

replace.py 
главный модуль
fixes.py 
список некоторых стандартных замен
user-fixes.py 
файл со списокм пользовательских замен. Этот файл можно создать (с примером замены) при помощи скрипта generate_user_files.py.

Файлы которые можно использовать для ввода и/или вывода:

filename.txt 
файл со списком статей, подлежащих обработке, название этого файла передаётся скрипту при помощи параметра «-file»
filename.xml 
локальный XML дамп, который можно использовать при помощи параметра «-xml»
replacelog 
файл отчёта (лог), имя этого файла передаётся скрипту при помощи параметра «-log»

[edit] Параметры

Вы можете запускать скрипт replace.py со следующими параметрами (например, python replace.py -file:articles_list.txt "errror" "error").


Источники (страницы для замены)
-xml Получает информацию из локального XML дампа (pages_current, см. http://download.wikimedia.org). Аргумент может быть передан скрипту в формате «-xml:filename».
-file Работает со списком страниц из сохранённого локально текстового файла. Будет читать все [[wiki link|вики-ссылки]] и использовать эти страницы для замены. Аргумент может быть передан скрипту в формате «-file:filename».
-cat Работает со всеми страницами в определённой категории. Аргумент может быть передан скрипту в формате «-cat:categoryname».
-subcat Работает со всеми страницами в определённой категории, отличие от предыдущего параметра в том, что в этом случается обрабатываются и подкатегории. Аргумент может быть передан скрипту в формате «-subcat:categoryname».
-transcludes Работает со всеми страницами, которые включают определённый шаблон. Аргумент может быть передан скрипту в формате «-transcludes:referredtemplate».
-page Редактирует только определённую страницу. Аргумент может быть передан скрипту в формате «-page:pagetitle». Чтобы редактировать несколько страниц, используйте параметр несколько раз.
-ref Работает со всеми страницами, которые ссылаются на определённую страницу. Аргумент может быть передан скрипту в формате «-ref:referredpagetitle».
-filelinks Работает со всеми страницами, которые ссылаются на определённый файл (изображение). Аргумент может быть передан скрипту в формате «-filelinks:ImageName».
-links Работает со всеми страницами, на которые есть ссылки с определённой страницы. Аргумент может быть передан скрипту в формате «-links:linkingpagetitle».
-start Работает со всеми страницами данной вики, начиная с определённой страницы. Чтобы начать с первой из страниц данной вики, используйте «-start:!». Внимание: Лучше использовать -xml вместо этого параметра; он применяется когда нет локального XML дампа.
Параметры замены
-except:XYZ (только старые версии) Игнорирует страницы, содержащие XYZ. Если указан аргумент -regex, то XYZ будет считаться регулярным выражением.
-excepttitle:XYZ (только новые версии) Игнорирует страницы, название которых содержит XYZ. Если указан аргумент -regex, то XYZ будет считаться регулярным выражением.
-requiretitle:XYZ (только новые версии) Производит замены только на страницах, название которых содержит XYZ. Если указан аргумент -regex, то XYZ будет считаться регулярным выражением.
-excepttext:XYZ (только новые версии) Игнорирует страницы, содержащие текст XYZ. Если указан аргумент -regex, то XYZ будет считаться регулярным выражением.
-exceptinside:XYZ (только новые версии) Skip occurences of the to-be-replaced text which lie within XYZ. Если указан аргумент -regex, то XYZ будет считаться регулярным выражением.
-exceptinsidetag:XYZ (newer versions only) Skip occurences of the to-be-replaced text which lie within an XYZ tag.
-summary:XYZ Устанавливает текст для описания совершаемых ботом изменений, этот параметр означает, что текст по усмолчанию для описания изменений не будет использоваться.
-fix:XYZ Выполняет одну из стандартных или пользовательских замен (файлы fixes.py и user-fixes.py). Аргумент -regex и установленные командной строкой замены будут игнорироваться при использованиии этого параметра -fix. Текущие доступные стандартные замены:
  • HTML - преобразует тэги HTML в вики-синтакс и исправляет XHTML.
  • syntax - пытается исправить неправильную вики-разметку.
  • case-de - исправляет ошибки в падежах в страницах на немецком языке.
  • grammar-de - исправляет грамматику и типографию в страницах на немецком языке.
-namespace:n Номер пространства страниц, которое нужно обрабатывать. Этот параметр можно использовать несколько раз. Он работает в сочетании со всеми остальными параметрами, за исключением параметра -start. (Если вы хотите обработать все страницы внутри какого-то пространства страниц, используйте префикс страницы, например, -start:Участник:!.)
-sleep:123 При использовании параметра -fix и нескольких регулярных выражений, загрузка ЦПУ может быть очень большой из-за того, что скрипт проверяет все регулярные выражения, потребляя доступные системные ресурсы. Использование параметра -sleep заставляет скрипт ждать между проверками разных регулярных выражений и снимает нагрузку на систему
неименованные параметры Первый неименованный параметр — текст который нужно заменять, второй — на что его нужно заменить. Если указан параметр -regex, первый аргумент будет рассматриваться как регулярное выражение и во втором аргументе можно использовать выражения типа \\1 или \g<name> (номера групп).
Специальные параметры
-always Не запрашивает разрешения для каждой замены
-recursive Рекурсивные замены, если это возможно. Будьте осторожны, использование параметра может привести к возникновению бесконечного зацикливания.
-nocase Не обращать внимания на регистр при использовании регулярных выражений.
-allowoverlap Если образцы для замены пересекаются, заменять их все. Будьте осторожны, использование параметра может привести к возникновению бесконечного зацикливания.
-regex Использовать при замене регулярные выражения. Без использования этого параметра будет происходить простая замена текста.

Глобальные параметры

arg Description Default
-family:xyz Set the family of the wiki you want to work on, e.g. wikipedia, wiktionary, commons, wikitravel, …. This will override the configuration in user-config.py settings. user-config.py parameter: family
-lang:xx Set the language of the wiki you want to work on, overriding the configuration in user-config.py where xx should be the language code[1]. user-config.py parameter: mylang
-log Enable the logfile. Logs will be stored in the logs subdirectory. user-config.py parameter: log ?
-log:xyz Enable the logfile, using xyz as the filename.
-nolog Disable the logfile (if it's enabled by default).
-putthrottle:nn
-pt:nn
Set the minimum time (in seconds) the bot will wait between saving pages. user-config.py parameter: putthrottle ?
-verbose
-v
Make the program output more detailed messages than usual to the standard output about its current work, or progress, while it is proceeding. This may be helpful when debugging or dealing with unusual situations. not selected
  1. Commons uses 'commons' for lang and family; Meta uses 'meta' for both.


[edit] Примеры

Если вы хотите поменять синтаксис шаблона, например ссо старого {{msg:Stub}} на новый ({{Шаблон}}), загрузите XML дамп (таблицу страниц) с http://download.wikimedia.org и используйте команду:

   python replace.py -xml -regex "{{msg:(.*?)}}" "{{\1}}"

Обратите внимание что можно использовать парметры и из нескольких строк:

   python replace.py -regex -start:! "Первая строка\nВторая строка" ""

Replace.py можно использовать для вставки или добавления текста на страницу (обратите внимание, что добавляемый текст содержит добавляемую новую строку)):

   python replace.py -regex '(?ms)^(.*)$' "\1
    > [[Category:NewCat]]"

Если у вас есть дамп foobar.xml и вы хотите исправите ошибку, например Ошипка → Ошибка, используйте такой формат:

   python replace.py -xml:foobar.xml "Ошипка" "Ошибка"

Если у вас есть страниц под названием «John Doe» и вы хотите преобразовать в ней тэги HTML в вики-разметку, используйте такой вызов скрипта: syntax, use:

   python replace.py -page:John_Doe -fix:HTML

Если вы запускаете скрипт без аргументов, вам будет предложено их ввести:

   python replace.py -file:blah.txt

Скрипт запрашивает у пользователя разрешения на модификацию страниц. Рекомендуем вам дважды проверять текст чтобы не внести ошибки на страницы (особенно проверяйте текст на отсутствие опечаток). Можно создать файл со списком страниц для замены:

 [[plane]]
 [[vehicle]]
 [[train]]
 [[car]]

Затем вызвать скрипт для этих страниц примерно в таком виде:

 python replace.py [global-arguments] -file:articles_list.txt "Ошипка" "Ошибка" 

Предпочтительнее задавать регулярные выражения не в командной строке, а в файле user-fixes.py

 python replace.py -file:articles_list.txt -fix:example2

[edit] Пример: Замена нескольких абзацев

Исходный текст на Meta:Sandbox:

This page is for any tests.

Welcome to the sandbox!

Если вы хотите изменить порядок этих абзацев (второй сделать первым), используйте такой синтаксис:

replace.py -page:Meta:Sandbox -regex "This page is for any tests.\r\n\r\nWelcome to the sandbox!" "Welcome to the sandbox!\n\nThis page is for any tests."

Чтобы добавить новую строку, используйте \n.

[edit] Ссылки