#mediawiki #configuration #wiki #fetch #generate #magic #parse-wiki-text

app fetch_mediawiki_configuration

生成MediaWiki维基的parse_wiki_text配置代码

2个版本

0.1.1 2021年10月26日
0.1.0 2021年10月26日

#501 in 配置

每月 39 次下载

MIT 许可证

36KB
797

获取MediaWiki网站配置

辅助脚本,用于为不同的维基正确配置parse_wiki_text

最初位于https://github.com/portstrom/fetch_mediawiki_configuration (网络档案馆快照),该仓库已删除,连同所有用户相关的维基仓库。这些库保存在各种GitHub分叉和docs.rs上。但是,没有公开的fetch_mediawiki_configuration副本。

此项目是对原始脚本功能的重构。在实现说明中记录了做出的推断和假设。

用法

该项目使用cargo包管理器。按照常规方式构建和运行。

传递命令行参数--help获取更多信息。例如

cargo run -- --help

实现说明

获取ConfigurationSource所需的所有信息都从给定域的MediaWiki操作API实例中获取。我们使用查询siteinfo元数据端点,将siprop设置为所需的类别。有关响应的更详细文档,请参阅https://www.mediawiki.org/wiki/API:Siteinfo

规范化

parse_wiki_text使用trie存储大多数配置值,这隐式地插入所有可能的折叠大小写变体。对于extension_tags,使用区分大小写的数据结构,但将维基文本中的ASCII字符在比较之前转换为小写。由于预期扩展标记只包含ASCII字符,这实际上使比较变为不区分大小写。对于link_trail,使用HashSet<char>并直接将其中字符与维基文本进行比较。

换句话说,除了 link_trail 之外,所有 ConfigurationSource 字段的值都是不区分大小写的。这种实现将所有配置值(除了链尾字符)都规范化为小写。此外,每个字段中都会移除重复项并按升序排列值;尽管这对正确性并非绝对必要,但它可以去除冗余并提高可重复性。

命名空间

category_namespacesfile_namespacessiprop=namespacessiprop=namespacealiases 中提取。

尽管名称具有误导性且缺少文档,但这些字段必须包含主命名空间和规范命名空间名称,以及别名。

扩展标签和协议

extension_tags 直接从 siprop=extensiontags 提取。

protocols 直接从 siprop=protocols 提取。

link_trailsiprop=general 中的键 linktrail 提取。

这是一个包含两个组的 PHP PCRE 模式

  1. 跟随链接的部分,将成为链接的一部分
  2. 之后的一切

我们使用 regex-syntax crate 对模式进行一些简单的解析。同时也会解析和适用于相关场景的修饰符。如果组 1 为空,链尾没有字符。如果是重复结构,则递归提取重复部分,只允许生成单个字符序列的构造。否则,正则表达式被认为是无效的。

限制

这种方法只接受具有特定结构的正则表达式,并且不考虑 PHP PCRE 和 rust 正则表达式之间的差异。然而,预计模式在结构上不会多样化到引起问题,也不会复杂到使得语法差异变得重要。这些差异大部分是微小的或边缘情况,因为两种语法都直接来源于 Perl 正则表达式。

一个更严重的限制是,link_trail 不能存储比简单的字符集更复杂的内容。如果正则表达式中的重复部分包含连接、前瞻或类似的操作,则无法在字段中表示,并且会导致致命错误。这确实影响了少数实际的维基实例(例如尝试 ca.wiktionary.orgse.wikipedia.org),但这是 parse_wiki_text 的限制,目前没有绕过的方法。

魔法词

magic_wordssiprop=magicwords 提取。

搜索所有魔法词及其别名。我们只接受那些前后都带有 __ 的魔法词,并移除前缀和后缀。

重定向

redirect_magic_words 从同一类别提取。

收集名为 redirect 的魔法词的别名。由于 parse_wiki_text 解析器在这些别名中仅在进行查找之后才会查找起始 #,因此我们移除了任何起始 #。此外,redirect 本身也必须包含在内。

许可

本项目采用 MIT 许可证

依赖项

~8–21MB
~350K SLoC