Pywikipediabot/replace.py/ru
From Meta, a Wikimedia project coordination wiki
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. Текущие доступные стандартные замены:
|
| -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 |
[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] Ссылки
- The Python Standard Library Regular expression operations
- Kodos - The Python Regular Expression Debugger - to test regular expressions specifically for python
- Regular-Expression.Info - introduction and comparison of various regex implementations, including python