public void outputReport() throws IOException
    {
    	ListMultimap<String, String[]> commonMap = 
    	Multimaps.newListMultimap( new TreeMap<String, Collection<String[]>>()
	   			   , new Supplier<ArrayList<String[]>>()
	   			   	 {
						@Override
						public ArrayList<String[]> get() {
							return new ArrayList<String[]>();
						}
	   			   	 }
	   			   );
    	PrintWriter reportOut = new PrintWriter(new File("target/output/report"));
    	
    	for(PoliticalOrientation orientation : PoliticalOrientation.values())
    	{
    		File outputFile = new File("target/output/" + orientation);
    		PrintWriter out = new PrintWriter(new File("target/output/" + orientation + "/report"));
    		
    		File[] parts = outputFile.listFiles(new FilenameFilter()
    						{
    							@Override
    							public boolean accept(File arg0, String arg1) {
    								if(arg1.startsWith("part-"))
    								{
    									return true;
    								}
    								return false;
    							}
    						}
    					   );
    		final List<String> output = new ArrayList<String>();
    		
    		Comparator<String> comparator = new Comparator<String>()
    				{
    					@Override
    					public int compare(String o1, String o2) 
    					{
    						ArrayList<String> firstSplit = Lists.newArrayList(Splitter.on('\t')
    															  .split(o1));
    						ArrayList<String> secondSplit = Lists.newArrayList(Splitter.on('\t')
    															   .split(o2));
    						
    						return ComparisonChain.start()
    											  .compare(Double.parseDouble(firstSplit.get(0)), Double.parseDouble(secondSplit.get(0)))
    											  .compare(firstSplit.get(1), secondSplit.get(1))
    											  .compare(firstSplit.get(2), secondSplit.get(2))
    											  .result();
    											  
    					}
    				};
    		for(File part : parts)
    		{
    			Files.readLines( part
    						   , Charsets.US_ASCII
    						   , new LineProcessor<Void>() 
    						    {
    								@Override
    								public Void getResult() {
    									// TODO Auto-generated method stub
    									return null;
    								}
    								@Override
    								public boolean processLine(String line)
    										throws IOException 
    								{
    									output.add(line);
    									return true;
    								}
								}
    						   );
    		}
    		Collections.sort(output, comparator);
    		int cnt = 0;
    		for(String line : output)
    		{
    			if(cnt++ < 200)
    			{
    				ArrayList<String> split = Lists.newArrayList(Splitter.on('\t')
							  .split(line));
    				commonMap.put(split.get(1), new String[] {orientation.toString() , line});
    			}
    			out.println(line);
    		}
    		out.close();
    	}
    	for(Entry<String, Collection<String[]>> entry : commonMap.asMap().entrySet())
    	{
    		if(entry.getValue().size() == 1)
    		{
    			String[] value = entry.getValue().iterator().next();
    			reportOut.println(value[0] + "\t" + value[1]);
    		}
    	}
    	reportOut.close();
    }