Участник:Carn/код
JS скрипты, которые я использую:
- User:Jack who built the house/convenientDiscussions.js
- User:Dibot/pat.js
- User:Dhārmikatva/hate.js
- User:Carn/toolbar.js
- User:Jack who built the house/canonicalPageName.js
- User:Carn/case numbering.js
- User:Jack who built the house/findAddition.js
- User:Jack who built the house/alignTemplateParameters.js
Data
[править | править код]<svg width="40" height="45" viewBox="0 0 40 45" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M24.904 0.799999C24.904 0.799999 29.2987 0.991999 38.088 1.376L38.472 13.024H36.424L34.248 4.64C31.944 3.65867 29.2133 3.168 26.056 3.168C20.8933 3.168 16.6053 4.87467 13.192 8.288C9.82133 11.6587 8.136 16.5867 8.136 23.072C8.136 29.5573 9.77867 34.3573 13.064 37.472C16.392 40.544 20.6373 42.08 25.8 42.08C29.256 42.08 32.3493 41.568 35.08 40.544L37.448 33.184L39.24 33.248L38.856 42.848C33.9493 43.872 29.7253 44.384 26.184 44.384C22.6853 44.384 19.784 44.192 17.48 43.808C15.2187 43.424 13 42.7413 10.824 41.76C8.648 40.7787 6.792 39.52 5.256 37.984C3.76267 36.448 2.54667 34.464 1.608 32.032C0.712 29.5573 0.264 26.5493 0.264 23.008C0.264 19.4667 0.946667 16.2027 2.312 13.216C3.72 10.1867 5.61867 7.79733 8.008 6.048C12.744 2.54933 18.376 0.799999 24.904 0.799999Z" fill="black"/> </svg>
mw:Manual:$wgAllowImageTag:<img src="data:image/jpeg;base64,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"></img>
{{#scite:Byrne 2008 |type=journal |author=Byrne, A |year=2008 |title=Web 2.0 strategies in libraries and information services |journal=The Australian Library Journal |volume=57 |number=4 |pages=365-376 }}
- Модуль для составления списков статей, когда регулярное выражение слишком сложное, чтобы делать это поиском insource:/regexp/ (может пропускать некоторые значения почему-то):
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip) { Skip = false; Summary = " "; Regex Findthis = new Regex(@"(.)+"); string old = ArticleText; ArticleText = Findthis.Replace(ArticleText, "$1" ); if(old.Equals(ArticleText)) Skip = true; else { Skip = true; System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt"); sw.WriteLine(ArticleTitle); sw.Close(); } return ArticleText; }
- Модуль для извлечения из шаблона строки с параметром (не оптимизирован, возвращает всю строку), есть решения лучше
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{ Skip = true;
Summary = "test";
String outStr = ArticleTitle + ";";
if (ArticleText.Length < 10) {
outStr = outStr + " " + "none" + ";";
}
else {}
Match m = Regex.Match(ArticleText, @"(\|\s*?alias\s*?=\s*?(.*?)\n)");
while (m.Success) {
outStr = outStr + " " + m.Result("$1") + ";";
m = m.NextMatch();
}
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
- Модуль для составления списка статей с встречающимися внутри модулями и категориями (потом файл множно переименовать в .csv и работать как с таблицей)
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{ Summary = "test";
String outStr = ArticleTitle + ";";
if (ArticleText.Length < 10) {
outStr = outStr + " " + "none" + ";";
}
else {}
Match m = Regex.Match(ArticleText, @"(?:\{\{#invoke:)([^|]+)");
while (m.Success) {
outStr = outStr + " " + m.Value + ";";
m = m.NextMatch();
}
m = Regex.Match(ArticleText, @"(?:\{\{#invoke:[^|]+\|)([^|]+)");
while (m.Success) {
outStr = outStr + " " + m.Value + ";";
m = m.NextMatch();
}
m = Regex.Match(ArticleText, @"(?:\{\{#invoke:[^|]+\|[^|]+)([^}]+)");
while (m.Success) {
outStr = outStr + " " + m.Value + ";";
m = m.NextMatch();
}
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
sw.WriteLine(outStr);
sw.Close();
Skip = true;
return ArticleText;
}
private static readonly Regex TemplateString = Tools.NestedTemplateRegex(new List<string>("СС,OldStyleDate,СС2,OldStyleDate2,СС4,cc4,OldStyleDate4".Split(',')));
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = true;
Summary = "";
String outStr = ArticleTitle + ";";
string arg1="", arg2="", arg3="", arg4="", arg5="", arg6="", year="";
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
foreach(Match m in TemplateString.Matches(ArticleText))
{
string ParameterCall = m.Value;
arg1 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 1);
arg2 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 2);
arg3 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 3);
arg4 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 4);
arg5 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 5);
arg6 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 6);
year = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"Год");
}
outStr = outStr + arg1 + "; " + arg2 + "; " + arg3 + "; " + arg4 + "; " + arg5 + "; " + arg6 + "; " + year;
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
private static readonly Regex TemplateString = Tools.NestedTemplateRegex(new List<string>("НП,НП-Австралия,НП-Армения,НП-Белоруссия,НП-Великобритания,НП-Грузия,НП-Израиль,НП-Ирландия,НП-Казахстан,НП-Канада,НП-Киргизия,НП-Мексика,НП-Молдавия,НП-Нидерланды,НП-ОАЭ,НП-Польша,НП-Россия,НП+Россия,НП-США,НП-Северная Ирландия,НП-Таиланд,НП-Турция,НП-Украина,НП-Франция,НП-Южная Корея,НП-Япония,НП-Крым,НП-Донбасс,НП-Майотта,НП-ПНА,НП-ПМР,НП-НКР,НП-Абхазия,НП-Тайвань,НП-Южная Осетия".Split(',')));
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = true;
Summary = "";
String outStr = ArticleTitle + ";";
string utc="", dts="";
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
foreach(Match m in TemplateString.Matches(ArticleText))
{
string ParameterCall = m.Value;
// nonameprmtr = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 1); нумерованный безымянный параметр
utc = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"часовой пояс");
dts = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"DST");
}
outStr = outStr + utc + "; " + dts;
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
В помощь шпаргалка, песочница, поиск регулярок по Википедии при помощи insource необходимо сочетать с поискам по ключевым словам, причём многие функции в рамках регулярок в поиске не работают, внутри стандартного AWB тоже не всё работает, поэтому зачастую необходимо задействование модулей на C#
[\.\(\)\,\:\{\}\|\-\+\←\→\«\»\…\!\#\=\\\/\=\[\]\'\"]
→▄
;[\w]
→█
;[^█\s]
→▄
(?<!\<nowiki\>)\<ref\>[\s<br\/>]*?\<\/ref\>(?!.*\<\/nowiki\>)
— нахождение пустых (с пробелами и тегами<br/>
и похожим мусором, не отлажено) сносок, не внутри теговnowiki
(\[\[([Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):[^\]]*?)\|(ссылка|link)=https:\/\/([a-z]{2,3})\.wikipedia\.org\/wiki\/[^\]\|]+[\|\]]
→$1|
- AWB
(\[\[(:?[Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):.+?)\|(:?ссылка|link)=(:?https:\/\/(:?[a-z]{2,3})\.wikipedia\.org\/wiki\/|(:?[Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):)([^\]\|]+?(\||\]\]))
→$1$8
- Тут нужна более сложная логика - если сам файл и ссылка на него отличаются см. en:Norwich City F.C. и en:Wave function
- AWB
\[\[:(aa|ab|ace|ady|af|ak|als|am|an|ang|ar|arc|ary|arz|as|ast|atj|av|avk|awa|ay|az|azb|ba|ban|bar|bat-smg|bcl|be|be-tarask|be-x-old|bg|bh|bi|bjn|bm|bn|bo|bpy|br|bs|bug|bxr|ca|cbk-zam|cdo|ce|ceb|ch|cho|chr|chy|ckb|co|cr|crh|cs|csb|cu|cv|cy|da|de|din|diq|dsb|dty|dv|dz|ee|el|eml|en|eo|es|et|eu|ext|fa|ff|fi|fiu-vro|fj|fo|fr|frp|frr|fur|fy|ga|gag|gan|gcr|gd|gl|glk|gn|gom|gor|got|gu|gv|ha|hak|haw|he|hi|hif|ho|hr|hsb|ht|hu|hy|hyw|hz|ia|id|ie|ig|ii|ik|ilo|inh|io|is|it|iu|ja|jam|jbo|jv|ka|kaa|kab|kbd|kbp|kg|ki|kj|kk|kl|km|kn|ko|koi|kr|krc|ks|ksh|ku|kv|kw|ky|la|lad|lb|lbe|lez|lfn|lg|li|lij|lmo|ln|lo|lrc|lt|ltg|lv|mai|map-bms|mdf|mg|mh|mhr|mi|min|mk|ml|mn|mnw|mo|mr|mrj|ms|mt|mus|mwl|my|myv|mzn|na|nah|nap|nds|nds-nl|ne|new|ng|nl|nn|no|nov|nqo|nrm|nso|nv|ny|oc|olo|om|or|os|pa|pag|pam|pap|pcd|pdc|pfl|pi|pih|pl|pms|pnb|pnt|ps|pt|qu|rm|rmy|rn|ro|roa-rup|roa-tara|ru|rue|rw|sa|sah|sat|sc|scn|sco|sd|se|sg|sh|shn|si|simple|sk|sl|sm|sn|so|sq|sr|srn|ss|st|stq|su|sv|sw|szl|szy|ta|tcy|te|tet|tg|th|ti|tk|tl|tn|to|tpi|tr|ts|tt|tum|tw|ty|tyv|udm|ug|uk|ur|uz|ve|vec|vep|vi|vls|vo|wa|war|wo|wuu|xal|xh|xmf|yi|yo|yue|za|zea|zh|zh-classical|zh-min-nan|zh-yue|zu|nb|zh-cn|zh-tw|nan|vro|lzh|rup|gsw|sgs|egl):([\w\s_\(\)]+?)\|([\w\s_]+?)\]]
→{{iw|$3||$1|$2}}
((?:(?:\{\{[Мм]узыкант(?:.|\n)*?)\|(?:\s|)[Сc]трана(?:\s*?|)=(?:\s*|))(?:|(?:\{\{флагификация\|(?:[a-zа-яА-Я0-9\s\-]{3,60})\}\}|,|\<br\>|\s)+))(Социалистическая Республика Босния и Герцеговина|Народная Социалистическая Республика Албания|Объединённое княжество Валахии и Молдавии|Демократическая Республика Афганистан|Социалистическая Республика Румыния|Хорватская республика Герцег-Босна|Ломбардо-Венецианское королевство|Демократическая Республика Конго|Центральноафриканская Республика|Белорусская Народная Республика|Венгерская Народная Республика|Федеративные Штаты Микронезии|Народная Республика Болгария|Великое княжество Литовское|Французская Верхняя Вольта|Республика Сербская Краина|Соединённые Штаты Америки|Священная Римская империя|Республика Верхняя Вольта|Королевство Обеих Сицилий|Третье Болгарское царство|Доминиканская Республика|Сент-Винсент и Гренадины|Австрийская республика|Экваториальная Гвинея|Веймарская республика|Босния и Герцеговина|Папуа — Новая Гвинея|Босния и Герцеговина|Сан-Томе и Принсипи|Британский Гондурас|Австрийская империя|Бразильская империя|Азербайджанская ССР|Республика Сербская|Королевство Румыния|Республика Беларусь|Королевство Бавария|Королевство Франция|Российская империя|Маршалловы острова|Соломоновы острова|Британская империя|Западная Австралия|Республика Дагомея|Германская империя|Карело-Финская ССР|Антигуа и Барбуда|Багамские Острова|Коморские Острова|Саудовская Аравия|Сент-Китс и Невис|Тринидад и Тобаго|Новый Южный Уэльс|Республика Косово|Северная Ирландия|Республика Корея|Республика Конго|Германский союз|Восточный Тимор|Южная Австралия|Белорусская ССР|Туркменская ССР|Папская область|Республика Кипр|Великобритания|Новая Зеландия|Австро-Венгрия|Грузинская ССР|Киргизская ССР|Латвийская ССР|Молдавская ССР|Таджикская ССР|Украинская ССР|Рейнский союз|Армянская ССР|Казахская ССР|Литовская ССР|Узбекская ССР|Эстонская ССР|Страна Басков|Буркина-Фасо|Гвинея-Бисау|Сьерра-Леоне|Чехословакия|Азербайджан|Южная Корея|Кот-д’Ивуар|Лихтенштейн|Таджикистан|Южный Судан|Третий рейх|Пуэрто-Рико|Афганистан|Белоруссия|Кабо-Верде|Коста-Рика|Люксембург|Мавритания|Мадагаскар|Нидерланды|Португалия|Сан-Марино|Сент-Люсия|Узбекистан|Черногория|Австралия|Аргентина|Бангладеш|Венесуэла|Гватемала|Индонезия|Казахстан|Никарагуа|Сальвадор|Македония|Туркмения|Филиппины|Финляндия|Швейцария|Шри-Ланка|Квинсленд|Шотландия|Голландия|Барбадос|Болгария|Ботсвана|Бразилия|Беларусь|Германия|Гондурас|Доминика|Зимбабве|Иордания|Ирландия|Исландия|Камбоджа|Киргизия|Кирибати|Колумбия|Маврикий|Малайзия|Мальдивы|Мозамбик|Молдавия|Монголия|Норвегия|Пакистан|Парагвай|Сингапур|Словакия|Словения|Танзания|Хорватия|Эсватини|Виктория|Тасмания|Австрия|Албания|Андорра|Армения|Бахрейн|Бельгия|Боливия|Бурунди|Вануату|Венгрия|Вьетнам|Гренада|Джибути|Израиль|Испания|Камерун|Либерия|Марокко|Мексика|Намибия|Нигерия|Румыния|Сейшелы|Сенегал|Суринам|Таиланд|Украина|Уругвай|Франция|Эквадор|Эритрея|Эстония|Эфиопия|Тайвань|Ангола|Бруней|Гайана|Гамбия|Гвинея|Греция|Грузия|Египет|Замбия|Италия|Канада|Кувейт|Латвия|Лесото|Малави|Мальта|Монако|Мьянма|Панама|Польша|Россия|Руанда|Сербия|Сомали|Тувалу|Турция|Уганда|Швеция|Ямайка|Япония|Англия|Алжир|Белиз|Бенин|Бутан|Габон|Гаити|Дания|Индия|Йемен|Катар|Кения|Китай|Ливан|Ливия|Литва|Науру|Непал|Нигер|Палау|Самоа|Сирия|Судан|Тонга|Тунис|Фиджи|Чехия|РСФСР|Гана|Ирак|Иран|Кипр|КНДР|Куба|Лаос|Мали|Оман|Перу|Того|Чили|СССР|ГСХС|СФРЮ|ОАЭ|США|Чад|ЮАР|ФРГ|ГДР|ВНР|НРБ|ПНР|(?:[a-zа-яЁёА-Я]{1,15}[\s\-]{0,1}[a-zа-яЁёА-Я]{1,15}[\s\-]{0,1}[a-zа-яЁёА-Я]{1,15}))
→$1{{флагификация|$2}}
\[https://ru.wikipedia.org/ruwiki/w/index.php\?title=(.+?)&type=revision&diff=([0-9]+?)&oldid=([0-9]+?)(:?\s)(.+?)\]
→[[Special:Diff/$3/$2|$5]]<!--$1-->
Lua
[править | править код]Свалка того, что может оказаться полезным
mw.ustring.isutf8( s )
mw.text.split( 'a b\tc\nd', '%s' )
mw.text.tag{ name = string, attrs = table, content = string|false }
mw.text.trim( s, charset )
mw.allToString( ... )
local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- value is now 'Привет!'
-- {{#tag:nowiki|some text}}
frame:callParserFunction( '#tag:nowiki', 'some text' )
frame:expandTemplate{ title = title, args = table }
mw.logObject( object, prefix )
mw.clearLogBuffer()
mw.getLogBuffer()
mw.addWarning( text )
Election data
[править | править код]io.input("votings_full.txt")
-- \A\d{4}.+?\n .*?\n .*?$
local vote_data = {}
while true do
local vote_name, list_pro, list_con = io.read("*line", "*line", "*line")
if not vote_name then break end
local vote_year=tonumber(string.match(vote_name,"(%d+)"))
table.insert(vote_data,{vote_name,vote_year,list_pro,list_con})
end
-- перевод формата данных
local voters = {}
local elections = {}
local default = {__index = function() return 0 end}
local sep = " "
for _,portion in ipairs(vote_data) do
local vote_name, vote_year = portion[1], portion[2]
local list_pro, list_con = portion[3], portion[4]
if vote_year > 2016 then
elections[vote_name] = elections[vote_name] or {}
setmetatable(elections[vote_name], default)
for voter_nick in string.gmatch(list_pro, "([^"..sep.."]+)") do
voters[voter_nick] = voters[voter_nick] or {}
voters[voter_nick][vote_name] = 1
elections[vote_name][voter_nick] = 1
end
for voter_nick in string.gmatch(list_con, "([^"..sep.."]+)") do
voters[voter_nick] = voters[voter_nick] or {}
voters[voter_nick][vote_name] = -1
elections[vote_name][voter_nick] = -1
end
end
end
-- упрощение структуры
-- voters [voter_nick][vote_name]
-- elections[vote_name] [voter_nick]
local vote_names = {}
for k,v in pairs(elections) do
table.insert(vote_names,k)
end
local ivot = {}
local evot = {}
for voter_nick,nick_votes in pairs(voters) do
ivot[voter_nick] = ivot[voter_nick] or {}
evot[voter_nick] = evot[voter_nick] or 0
for i, name_vote in ipairs(vote_names) do
local value = nick_votes[name_vote]
if value then
evot[voter_nick] = 1 + evot[voter_nick]
end
ivot[voter_nick][i] = value or 0
end
end
for k,v in pairs(evot) do
if v < 10 then
ivot[k] = nil
end
end
local file = assert(io.open("output2017.txt", "w"))
io.output(file)
for voter_nick, values in pairs(ivot) do
io.write(voter_nick .. ", " .. table.concat(values,", "), "\n")
end