Как мне разобрать викитекст, используя встроенную поддержку mediawiki для сценариев lua? - PullRequest
0 голосов
/ 15 октября 2018

Запись википедии для слабых находится в https://en.wiktionary.org/wiki/faint

Викитекст для раздела этимологии:

From {{inh | en | enm | faynt}}, {{т | ENM | feynt || слабо;feeble}}, из {{etyl | fro | en}} {{m | fro | faint}}, {{m | fro | feint || притворно;небрежное;вяло}}, прошедшее причастие {{m | fro | feindre}}, {{m | fro | faindre || притворяться;фиктивный;работать небрежно}}, из {{etyl | la | en}} {{m | la | fingere || касаться, обрабатывать, обычно формировать, формировать, обрамлять, формировать в мысли, воображать, задумывать, придумывать, придумывать, симулировать}}.

Содержит различные шаблоны вида {{xyz | ...}}

Я хотел бы проанализировать их и получить текстовый вывод, который отображается на странице.:

От среднеанглийского faynt, feynt («слабый; слабый»), от старофранцузского faint, feint («притворный; небрежный; вялый»), причастие прошлого feindre, faindre («притворяться»); притворство; работать небрежно ”), от латинского fingere (« дотрагиваться, обрабатывать, обычно формировать, формировать, обрамлять, формировать в мысли, воображать, задумывать, придумывать, придумывать, притворяться »).

У меня есть около 10000 записей, извлеченных из свободно доступных дампов викисловаря здесь .

Чтобы сделать это, я думаю, чтобы извлечь шаблоны и их расширения (в некоторой форме).Чтобы исследовать возможности, я возился со сценарием lua на mediawiki.Пытаясь выполнить различные запросы в консоли отладки на страницах редактирования модулей, как здесь:

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 "). Если да, то как мне ее вызвать?

1 Ответ

0 голосов
/ 15 октября 2018

Чтобы развернуть шаблоны (и другие элементы) в викитексте, используйте frame.preprocess, который вызывается как метод для объекта frame.Чтобы получить объект frame, используйте mw.getCurrentFrame.Например, введите = mw.getCurrentFrame():preprocess('{{l|en|word}}') в консоли, чтобы получить вики-текст, полученный из {{l|en|word}}.Это в настоящее время дает <span class="Latn" lang="en">[[word#English|word]]</span>.

Вы также можете использовать действие Expandtemplates в MediaWiki API (https://en.wiktionary.org/w/api.php?action=expandtemplates&text={{l|en|word}}) или 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 еще не загружена и выполучить TypeError («mw.Api не является конструктором»):

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

Так вот некоторые из способов расширения шаблонов.

...