如何使用内置的mediawiki支持来解析wiki文本?



微弱的维基词典条目位于 https://en.wiktionary.org/wiki/faint

词源部分的维基文本是:

From {{inh|en|enm|

faynt}}, {{m|enm|feynt||弱;弱}},来自 {{etyl|fro|en}}{{m|fro|faint}}, {{m|fro|feint||假装;疏忽; sluggish}}, past participle of {{m|fro|feindre}}, {{m|fro|faindre||自 装;假;Work negligently}}, from {{etyl|la|en}} {{m|la|fingere||触摸,处理,通常是形式,形状,框架,形式 思考,想象,构思,设计,设计,假装}}。

它包含各种形式的模板 {{xyz|...}}

我想解析它们并获得页面上显示的文本输出:

来自中古英语faynt,feynt("弱;弱"(,来自古法语 昏昏欲睡,佯攻("假装;疏忽;迟钝"(,过去分词 Feindre,Faindre("假装;假;疏忽工作"(,来自拉丁语 手指("触摸,处理,通常是形式,形状,框架,形式在 思想,想象,构思,策划,设计,假装"(。

我从这里免费提供的维基词典转储中提取了大约 10000 个条目。

为此,我的想法是提取模板及其扩展(以某种形式(。为了探索各种可能性,我一直在 mediawiki 上摆弄 lua 脚本工具。通过在调试控制台中在模块的编辑页面上尝试各种查询,如下所示:

https://en.wiktionary.org/w/index.php?title=Module:languages/print&action=edit

mw.log(p)
>> table
mw.logObject(p)
>> table#1 {
["code_to_name"] = function#1,
["name_to_code"] = function#2,
}
p.code_to_name("aaa")
>>
p.code_to_name("ab")
>>

但是,我什至无法正确调用函数。 p.code_to_name("aaa"( 不返回任何内容。

大概扩展词源部分模板的代码在这里: https://en.wiktionary.org/w/index.php?title=Module:etymology/templates

如何正确调用此代码? 有没有更简单的方法来实现我解析维基文本模板的目标? mediawiki中是否有一些可用的函数,我可以调用"parse-wikitext("text"(。如果是这样,我该如何调用它?

要扩展wiki文本中的模板(和其他内容(,请使用frame.preprocess,它被称为frame对象上的方法。若要获取frame对象,请使用mw.getCurrentFrame。例如,在控制台中键入= mw.getCurrentFrame():preprocess('{{l|en|word}}')以获取由{{l|en|word}}生成的wiki文本。这目前给了<span class="Latn" lang="en">[[word#English|word]]</span>.

您也可以在MediaWiki API(https://en.wiktionary.org/w/api.php?action=expandtemplates&text={{l|en|word}}(中使用Expandtemplates操作,或Special:ExpandTemplates页面或JavaScript(如果您在浏览维基词典页面时打开浏览器控制台(:

new mw.Api().get({
action: 'parse',
text: '{{l|en|word}}',
title: mw.config.values.wgPageName,
}).done(function (data) {
const wikitext = data.parse.text['*'];
if (wikitext)
console.log(wikitext);
});

如果mw.api库尚未加载,并且您会收到一个类型错误("mw.Api 不是构造函数"(:

mw.loader.using("mediawiki.api", function() {
// Use mw.Api here.
});

因此,这些是扩展模板的一些方法。

最新更新