1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos.irc;
31
32 import java.io.IOException;
33
34 import org.openimaj.stream.provider.WikipediaEditsDataset;
35 import org.openimaj.stream.provider.WikipediaEditsDataset.WikipediaEdit;
36 import org.openimaj.util.data.Context;
37 import org.openimaj.util.function.Operation;
38 import org.openimaj.util.function.Predicate;
39 import org.openimaj.util.function.context.ContextExtractor;
40 import org.openimaj.util.function.context.ContextFunctionAdaptor;
41 import org.openimaj.util.function.context.ContextGenerator;
42 import org.openimaj.util.function.context.ContextPredicateAdaptor;
43 import org.openimaj.util.function.context.KeyContextInsertor;
44 import org.openimaj.video.VideoDisplay;
45
46
47
48
49
50 public class WikipediaChangesGeo {
51 private static final class NotNull implements Predicate<Object> {
52 @Override
53 public boolean test(Object object) {
54 return object != null;
55 }
56 }
57
58 public static void main(String[] args) throws IOException {
59 final WorldVis wordVis = new WorldVis(1800, 600);
60 VideoDisplay.createVideoDisplay(wordVis);
61
62 new WikipediaEditsDataset("en")
63 .map(new ContextGenerator<WikipediaEdit>("wikiedit"))
64 .map(
65 new ContextFunctionAdaptor<String, FreeGeoIPLocation>(new IPAsGeolocation(),
66 new ContextExtractor<String>() {
67 @Override
68 public String extract(Context c) {
69 final WikipediaEdit edit = ((WikipediaEdit) c.get("wikiedit"));
70 if (edit.anon)
71 return edit.user;
72 else
73 return null;
74 }
75 },
76 new KeyContextInsertor<FreeGeoIPLocation>("geolocation")
77 )
78 )
79 .filter(new ContextPredicateAdaptor<Object>(new NotNull(), "geolocation"))
80 .forEach(new Operation<Context>() {
81 @Override
82 public void perform(Context object) {
83 final FreeGeoIPLocation geoip = object.getTyped("geolocation");
84 wordVis.activate(geoip);
85 }
86 });
87 }
88 }