package word2vec.evidencecomputation; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import doser.word2vec.Word2VecModel; @SuppressWarnings("deprecation") public class W2VEvidenceMain { private Word2VecModel model; private PrintWriter writer; public W2VEvidenceMain(Word2VecModel model, String outputfile) { this.model = model; try { this.writer = new PrintWriter(new File(outputfile)); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void extractEvidences() { HashMap<String, Integer> map = this.model.getVocab(); List<String> list = new ArrayList<String>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { String s = entry.getKey(); if (s.contains("http://dbpedia.org/resource/")) { list.add(s); } } System.out.println("Entities to cover: "+list.size()); int proc = Runtime.getRuntime().availableProcessors(); int portion = (int) Math.ceil(((double) list.size()) / ((double) proc)); System.out.println("Portion: "+portion); List<EvidenceThread> lstThread = new LinkedList<EvidenceThread>(); int allTogether = 0; for(int i = 0; i < proc - 1; ++i) { int startindex = i * portion; List<String> sub = list.subList(startindex, startindex + portion); EvidenceThread thread = new EvidenceThread(model, sub, writer); lstThread.add(thread); System.out.println("Thread: "+sub.size()); allTogether += sub.size(); } List<String> lastsub = list.subList(portion * (proc - 1), list.size()); EvidenceThread thread = new EvidenceThread(model, lastsub, writer); lstThread.add(thread); allTogether += lastsub.size(); System.out.println("Thread: "+lastsub.size()); System.out.println("Covered by Threads: "+allTogether); int poolsize = lstThread.size(); BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>( poolsize); ThreadPoolExecutor ex = new ThreadPoolExecutor(poolsize, poolsize, 3000000, TimeUnit.SECONDS, queue); for (EvidenceThread client : lstThread) { ex.execute(client); } ex.shutdown(); try { while (!ex.awaitTermination(365, TimeUnit.DAYS)) { System.out.println("InitializationPhase not completed yet! Still waiting "); } } catch (InterruptedException e) { e.printStackTrace(); } this.writer.close(); } public static void main(String[] args) { Word2VecModel model = Word2VecModel.createWord2VecModel(args[0]); System.out.println("Model loaded!"); W2VEvidenceMain main = new W2VEvidenceMain(model, args[1]); main.extractEvidences(); } }