public void runInfluenceMaximization() throws IOException {
        int totalGraphSize = 0;
        // int summaryLimit = 7; // TODO:Add as global parameter
        /* Read node counts from a file */
        BufferedReader br = new BufferedReader(new FileReader(
                "CommunityNodeCounts/communityNodeCounts.txt"));
        ArrayList<Integer> communityNodeCounts = new ArrayList<Integer>();

        String line;
        while ((line = br.readLine()) != null) {
            // process the line.
            int nodeCount = Integer.parseInt(line);
            communityNodeCounts.add(nodeCount);
            totalGraphSize += nodeCount;
        }
        br.close();
        /* Compute sentence budget */
        ArrayList<Integer> sentenceBudgets = new ArrayList<Integer>();
        ArrayList<Integer> admittedCommunities = new ArrayList<Integer>();
        int effectiveGraphSize = 0;
        for (int i = 0; i < communityNodeCounts.size(); i++) {
            int nodeCount = communityNodeCounts.get(i);
            double nodeFraction = (nodeCount + 0.0) / (totalGraphSize + 0.0);
            double exactFractionalWeight = nodeFraction * summaryLimit;
            if (exactFractionalWeight >= 1.0) {
                effectiveGraphSize += nodeCount;
                admittedCommunities.add(i);
            }
        }
        // System.out.println(admittedCommunities);
        for (int i = 0; i < communityNodeCounts.size(); i++) {
            if (admittedCommunities.contains(i)) {
                int nodeCount = communityNodeCounts.get(i);
                double nodeFraction = (nodeCount + 0.0)
                        / (effectiveGraphSize + 0.0);
                double exactFractionalWeight = nodeFraction * summaryLimit;
                sentenceBudgets.add((int) Math.floor(exactFractionalWeight));
                // System.out.println(Math.floor(exactFractionalWeight));
            } else {
                sentenceBudgets.add(0);
            }
        }
        // System.out.println(sentenceBudgets);
        List<String> command = new ArrayList<String>();
        command.add("python");
        command.add("influence_maximization.py");
        command.add(Integer.toString(communityNodeCounts.size()));
        for (Integer sentenceBudget : sentenceBudgets) {
            command.add(Integer.toString(sentenceBudget));
        }
        SystemCommandExecutor commandExecutor = new SystemCommandExecutor(
                command);
        commandExecutor = new SystemCommandExecutor(command);
        try {
            int result = commandExecutor.executeCommand();
        } catch (Exception e) {
            System.out.println("Error in influence maximization: "
                    + e.getMessage());
        }
        System.out.println("Influence Maximization: Finished");
        return;
    }