gpt4 book ai didi

java - 阅读维基百科管道链接

转载 作者:行者123 更新时间:2023-12-02 05:13:18 25 4
gpt4 key购买 nike

我正在使用java,我想阅读来自维基百科的具有特定表面形式的管道链接。第一个这种形式的例子[美国|美国]表面形式是“美国”,内部链接是“美国”。

最简单的解决方案是读取 Wikipedia 的 xml 转储并查找与管道链接的正则表达式匹配的字符串。然而,我担心我不会涵盖管道链接的所有可能的正则表达式。我进行了搜索,但找不到任何专门为我提供管道链接的库。

有什么建议吗?

最佳答案

编辑

现在我明白了这个问题:我认为没有办法获得所有内部链接及其打印输出值。这根本不存储在 database 中(仅 links ),因为实际输出仅在渲染页面时创建。

你必须parse the pages您自己一定要获取所有链接。当然,如果您可以接受仅获取每个页面的 wiki 文本中可用的链接子集,那么按照您的建议解析 xml 转储就可以了。请注意,单个正则表达式很可能无法区分管道内部链接和 piped interwiki links 。还要注意使用管道进行变量分隔的图像链接(例如 [[Image:MyImage.jpeg|thumb|left|A title!]])。

这是 MediaWiki parser 使用的正则表达式:

$tc = Title::legalChars() . '#%';
# Match a link having the form [[namespace:link|alternate]]trail
$e1 = "/^([{$tc}]+)(?:\\|(.+?))?]](.*)\$/sD";
# Match cases where there is no "]]", which might still be images
$e1_img = "/^([{$tc}]+)\\|(.*)\$/sD";

但是,此代码是在进行大量预处理后应用的。

旧答案

使用 xml 转储不会为您提供所有链接,因为许多链接是由 templates 生成的,或者在某些情况下甚至 parser functions 。更简单的方法是使用 API :

https://en.wikipedia.org/w/api.php?action=query&titles=Stack_Overflow&prop=links&redirects

我假设这里是英语维基百科,但它可以在任何地方使用,只需将 URL 中的 en. 替换为您的语言代码即可。很明显,redirects 指令将确保遵循重定向。同理,使用prop=extlinks获取外部链接:

https://en.wikipedia.org/w/api.php?action=query&titles=Stack_Overflow&prop=extlinks&redirects

您可以一次获取多个页面的链接,方法是用竖线字符分隔页面名称,如下所示:Stack_Overflow|Chicago,或者使用生成器,例如allpages (对 wiki 中的每个页面运行查询),如下所示:

https://en.wikipedia.org/w/api.php?action=query&generator=allpages&prop=links

可以通过设置gaplimit参数来提高allpages生成器返回的结果数量,例如&gaplimit=50 获取 all external links for the first 50 pages 。如果您要求bot status在您正在查看的维基百科版本中,每个请求最多可以获得 5000 个结果,否则大多数(可能是所有)维基百科的最大值为 500。

关于java - 阅读维基百科管道链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com