WikiPedia text/x-wiki 形式のテキストを Java で SWC Sweble Wikitext Parser を使って読む




# Input

以下のような text/x-wiki 形式のテキストを入力例とします。

```
{{otheruses}}
{{Infobox Continent
|image               = [[File:Europe (orthographic projection).svg|200px]]
|area                = 1018万 km{{sup|2}}
|population          = 7億3100万人 (2009, [[大陸#面積と人口|3位]])
|density             = 70人/km{{sup|2}}
|demonym             = [[ヨーロッパ人]]
|countries           = 50
|list_countries      = 
|languages           = 
|time                = [[協定世界時|UTC]] ~ [[UTC+5]]
|internet            = [[.eu]] ([[欧州連合|EU]])
|cities              = {{flagicon|RUS}}[[モスクワ]]
}}
'''ヨーロッパ'''{{efn|日本語の「ヨーロッパ」の直接の原語は、『[[広辞苑]]』第5版「ヨーロッパ」によると[[ポルトガル語]]・[[オランダ語]]、『[[デジタル大辞泉]]』[[goo辞書]]版「[http://dictionary.goo.ne.jp/leaf/jn2/226957/m0u/ ヨーロッパ]」によるとポルトガル語。}}（[[ポルトガル語]]・{{Lang-nl|Europa}} {{IPA-pt|ew.ˈɾɔ.pɐ|lang}} {{IPA-nl|øːˈroːpaː, ʏˑˈroːpaˑ|lang}}）又は'''欧州'''（おうしゅう）は、[[地球]]上の七つの[[大州]]の一つ。[[漢字]]表記は'''欧羅巴'''。

==概要==
地理的には、[[ユーラシア#ユーラシア大陸|ユーラシア大陸]]北西の[[半島]]部を包括し、[[ウラル山脈]]および[[コーカサス山脈]]の[[分水嶺]]と[[ウラル川]]・[[カスピ海]]・[[黒海]]、そして黒海と[[エーゲ海]]を繋ぐ[[ボスポラス海峡]]-[[マルマラ海]]-[[ダーダネルス海峡]]が、[[アジア]]と区分される[[東]]の境界となる<ref name=masuda38>[[#増田1967|増田 (1967)、pp.38–39、Ⅲ.地理的にみたヨーロッパの構造 ヨーロッパの地理的範囲]]</ref><ref name="NatlGeoAtlas">{{Cite book|title=National Geographic Atlas of the World|edition=7th|year=1999|location=Washington, DC|publisher=[[ナショナルジオグラフィック協会]]|isbn=0-7922-7528-4}} "Europe" (pp. 68-9); "Asia" (pp. 90-1): "A commonly accepted division between Asia and Europe ... is formed by the Ural Mountains, Ural River, Caspian Sea, Caucasus Mountains, and the Black Sea with its outlets, the Bosporus and Dardanelles."（一般的に受け入れられているアジアとヨーロッパの境界は、（中略）ウラル山脈、ウラル川、カスピ海、コーカサス山脈、黒海の河口、ボスポラスそしてダーダネスルである。）</ref>。

【略】

== 関連項目 ==
{{ウィキポータルリンク|ヨーロッパ}}
{{Sisterlinks|ヨーロッパ
 |commons=Europe - Europa
 |commonscat=Europe
 |wiktionary=ヨーロッパ
 |voy=ja:ヨーロッパ
}}
* [[欧州連合]] (EU)
* [[欧州評議会]]
* [[欧州統合]]
*[[欧州連合の経済通貨統合]]
* [[北大西洋条約機構]] (NATO)
* [[欧州安全保障協力機構]] (OSCE)
* [[欧州自由貿易連合]] (EFTA)
* [[西欧同盟]] (weu)
* [[欧州・大西洋パートナーシップ理事会]] (EAPC)
* {{仮リンク|欧州民族的少数者保護枠組条約|en|Framework Convention for the Protection of National Minorities}}（FCPNM）
* [[北欧理事会]]
* [[ヨーロッパ史]]
* [[ヨーロッパ料理の一覧]]

{{大州横}}
{{世界の地理}}
{{ヨーロッパ}}

{{Normdaten}}
{{デフォルトソート:よおろつは}}
[[カテゴリ:ヨーロッパ|*]]

```

# Output

以下のような文字列が出力されます。自然言語処理にも使いやすいですね！

```
**ヨーロッパ**（ポルトガル語・ ）又は**欧州**（おうしゅう）は、地球上の七つの大州の一つ。漢字表記は**欧羅巴**。

1. 概要
-----

地理的には、ユーラシア大陸北西の半島部を包括し、ウラル山脈およびコーカサス山脈の分水嶺とウラル川・カスピ海・黒海、そして黒海とエーゲ海を繋ぐボスポラス海峡-マルマラ海-ダーダネルス海峡が、アジアと区分される東の境界となる。

面積から見るとヨーロッパ州は世界で2番目に小さな大州であり、1018万kmは地球表面積の2%、陸地に限れば6.8%を占める。アジアに跨る領土を持つロシアは、ヨーロッパ50か国の中で面積および人口第1位の国家である。対照的に最も小さな国家はバチカン市国である。総人口はアジア・アフリカに次ぐ7億3300万。これは地球総人口の11%である。

ヨーロッパ、特に古代ギリシアは西洋文明発祥の地である。これは、16世紀以降の植民地主義の始まりとともに世界中に拡散し、支配的な役割を果たした。16世紀から20世紀の間、ヨーロッパの国々はアメリカ州、アフリカ、オセアニア、中東、アジアの大部分を支配下に置いた。2度の世界大戦はヨーロッパを戦火で覆い、20世紀中頃の西ヨーロッパによる世界への影響力減衰に結びつき、その地位をアメリカ合衆国とソビエト連邦に奪われる結果となった。

【略】

15. 関連項目
--------

欧州連合 (EU)
欧州評議会
欧州統合
欧州連合の経済通貨統合
北大西洋条約機構 (NATO)
欧州安全保障協力機構 (OSCE)
欧州自由貿易連合 (EFTA)
西欧同盟 (weu)
欧州・大西洋パートナーシップ理事会 (EAPC)
（FCPNM）
北欧理事会
ヨーロッパ史
ヨーロッパ料理の一覧

*

```

# maven

```xml
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.sweble.wikitext/swc-parser-lazy -->
<dependency>
	<groupId>org.sweble.wikitext</groupId>
	<artifactId>swc-parser-lazy</artifactId>
	<version>3.1.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.sweble.wikitext/swc-example-basic -->
<dependency>
	<groupId>org.sweble.wikitext</groupId>
	<artifactId>swc-example-basic</artifactId>
	<version>3.1.9</version>
</dependency>

```

# Java

```java
package pkg;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.sweble.wikitext.engine.PageId;
import org.sweble.wikitext.engine.PageTitle;
import org.sweble.wikitext.engine.WtEngineImpl;
import org.sweble.wikitext.engine.config.WikiConfig;
import org.sweble.wikitext.engine.nodes.EngProcessedPage;
import org.sweble.wikitext.engine.utils.DefaultConfigEnWp;
import org.sweble.wikitext.example.TextConverter;

public class HelloWikiText {

	public static void main(String[] args) throws Exception {
		// x-wiki 形式のテキストを用意する
		// Prepare x-wiki format text
		File file = new File("src/main/resources/wiki-example.txt");
		String charsetName = "UTF-8";
		String wikitext = FileUtils.readFileToString(file, charsetName);

		// Set-up a simple wiki configuration
		WikiConfig config = DefaultConfigEnWp.generate();
		String fileTitle = "TEST";
		final int wrapCol = 1000;

		// Retrieve a page
		PageTitle pageTitle = PageTitle.make(config, fileTitle);

		PageId pageId = new PageId(pageTitle, -1);

		// Instantiate a compiler for wiki pages
		WtEngineImpl engine = new WtEngineImpl(config);

		// Compile the retrieved page
		EngProcessedPage cp = engine.postprocess(pageId, wikitext, null);

		TextConverter p = new TextConverter(config, wrapCol);
		String text = (String) p.go(cp.getPage());

		System.err.println(text);
	}

}

```


以上です。

https://www.mediawiki.org/wiki/Alternative_parsers
に紹介されているパーサーです。
sweble.org が本家のようですが、ドメイン名の契約が切れてメンテナンスされていないようです。