一覧データを生成する方法の一例を説明します。 このページで生成方法を説明する一覧データのページは、次のとおりです。
ja:Wikipedia:編集回数の多いウィキペディアンの一覧
⇒en:Wikipedia:List of Wikipedians by number of recent edits
⇒en:Wikipedia:List of Wikipedians by number of edits
⇒zh:Wikipedia:最多?献的用?
このページで説明する方法による一覧の生成には、Javaのプログラムをコンパイル/実行する方法について、若干の知識が必要となります(高度な知識は必要ありません)。 一覧の生成では、コンピュータを使い、そのコンピュータ上でJava開発/実行環境とJavaプログラムとを使います。 この方法で一覧データを生成する場合、ある程度のメモリを要します。
目次
1 前提
2 手順
2.1 ja:Wikipedia:編集回数の多いウィキペディアンの一覧 の場合
2.2 英語版の場合
2.2.1 en:Wikipedia:List of Wikipedians by number of recent edits の場合
2.2.2 en:Wikipedia:List of Wikipedians by number of edits の場合
2.3 zh:Wikipedia:最多?献的用? の場合
//
前提
Javaが動作するシステムのコンピュータが一台必要となります。例えば、次のようなコンピュータシステムです。
UNIXもしくはUNIXに似たシステム(Linux、Mac OS X など)
Windows
Java(Java SE 5.0 以上)の開発/実行環境が予めコンピュータに導入されている必要があります。
次のJavaプログラムをコンパイルしてコンピュータ内に配置しておきます。
AnonymousUsers.javaimport java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern; class AnonymousUsers { private Map<String, String> users = new HashMap<String, String>(); private static final String INPUT_FILE_NAME = "anonymous.txt"; public void initialize() throws FileNotFoundException, IOException { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(INPUT_FILE_NAME)); final Pattern pattern = Pattern.compile("^\\s*\\d*\\.?\\s*User:"); while (true) { final String line = reader.readLine(); if (line == null || line.length() == 0) { break; } final Matcher matcher = pattern.matcher(line); final String user = matcher.replaceFirst(""); users.put(user, user); } } finally { if (reader != null) { reader.close(); } } } public boolean contains(String user) { return users.containsKey(user); } public String toString() { return users.toString(); } }
Namespaces.javaimport java.util.HashMap;import java.util.Map; class Namespaces { public static final int MAIN_NAMESPACE = 0; private final Map<String, Integer> map = new HashMap<String, Integer>(); public void add(String key, int ns) { map.put(key, ns); } public int ns(String text) { final String NAMESPACE_SEPARATOR = ":"; if (!text.contains(NAMESPACE_SEPARATOR)) { return MAIN_NAMESPACE; } Integer ns = map.get(text.split(NAMESPACE_SEPARATOR)[0]); if (ns == null) { return MAIN_NAMESPACE; } return ns; } }
UnflaggedBots.javaimport java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern; public class UnflaggedBots { private Map<String, String> users = new HashMap<String, String>(); private static final String INPUT_FILE_NAME = "unflagged-bots.txt"; public void initialize() throws FileNotFoundException, IOException { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(INPUT_FILE_NAME)); final Pattern pattern = Pattern.compile("^\\s*\\d*\\.?\\s*"); while (true) { final String line = reader.readLine(); if (line == null || line.length() == 0) { break; } final Matcher matcher = pattern.matcher(line); final String user = matcher.replaceFirst(""); users.put(user, user); } } finally { if (reader != null) { reader.close(); } } } public boolean contains(String user) { return users.containsKey(user); } public String toString() { return users.toString(); } }
User.javaclass User { private int id = 0; private String text = null; private int edits = 0; private int editsInRecentDays = 0; private int editsMain = 0; private int editsMainInRecentDays = 0; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public int getEdits() { return edits; } public int getEditsInRecentDays() { return editsInRecentDays; } public int getEditsMain() { return editsMain; } public int getEditsMainInRecentDays() { return editsMainInRecentDays; } public void incrementEdits(){ edits++; } public void incrementEditsInRecentDays(){ editsInRecentDays++; } public void incrementEditsMain(){ editsMain++; } public void incrementEditsMainInRecentDays(){ editsMainInRecentDays++; } public User(){ } public User(int id, String text){ this.id = id; this.text = text; } public boolean isIpAddress(){ return id == 0; } public String toString() { return "id: " + id + ", text: " + text + ", edits: " + edits + ", editsRecentDays: " + editsInRecentDays; } }