3

假设,我有一个使用一种语言的观光列表,并且想用来自 Wikipedia 的一些数据来丰富这个列表。

所以,我有以下数据——城市是慕尼黑,它有以下景点:

  • 圣母教堂
  • 玛利亚广场
  • 卡尔广场

我需要执行以下操作:

  1. 以给定的语言向维基百科发送查询(本例是德语,因为德语维基更有可能有相应的文章)。
  2. 找到文章后,我想获取其页面标题和前 2-3 段。
  3. 我想剥离任何 Wiki 标记并仅获取文本。
  4. 将这篇文章的文本连同原文(“de”)和其他一些语言的标题一起写出来会很好。

我从 NuGet Repository 尝试了 Linq-to-Wiki,但我无法让这个场景运行......这是我的代码,只是超时:

var enwiki = new Wiki("LinqToWiki.Samples", "en.wikipedia.org", "/w/api.php");
var result = enwiki.Query.allpages()
              .Pages
              .Select (
              page =>
              new
              {
                Title = page.info.title,
                Text = page.revisions()
                        .Where( r => r.section == "0")
                        .Select( r => r.value)

              );
4

1 回答 1

2

如果您知道相关文章的标题,则可以执行以下操作:

var titles = wiki.CreateTitlesSource(
    "Munich Frauenkirche", "Marienplatz", "Karlsplatz (Stachus)");
var pages =
    titles.Select(
        page => new
        {
            Title = page.info.title,
            Text = page.revisions()
                       .Where(r => r.section == "0" && r.parse)
                       .Select(r => r.value)
                       .FirstOrDefault(),
            LangLinks = page.langlinks().ToEnumerable()
        }).ToEnumerable();

LangLinks将包含不同语言的文章标题。

Text将包含第一部分的 HTML。如果您认为 wikitext 会更好,您可以通过删除&& r.parse.

还有一个extracts模块似乎支持获取实际的纯文本,但 LinqToWiki 目前不支持该模块。

于 2013-06-12T00:32:00.417 回答