2012-04-23 3 views
0

Я очень новичок в Java, поэтому, пожалуйста, со мной.Программа Java - статистика Word

Я создал программу Java, которая выходит и возвращает результаты поиска из различных социальных сетей API на основе текстового файла с ключевыми словами и записывает возвращенные результаты в другой текстовый файл.

Теперь я пытаюсь создать класс другого класса, который будет сканировать текстовый файл результатов поиска и возвращать статистику о том, сколько раз «ключевые слова» были найдены в результатах поиска. В основном я пытаюсь запустить поиск по файлу keywords.txt.

Я пытался заставить этот код работать, но я могу получить его только для того, чтобы вернуть все слова, а не только файлы из файла keywords.txt.

Я попытался получить вход StreamReader для работы, но безрезультатно. Любая помощь будет принята с благодарностью.


package search; 

import java.util.*; // Provides TreeMap, Iterator, Scanner 
import java.io.*; // Provides FileReader, FileNotFoundException 

public class SearchResults 
{ 

    public static void main(String[] args) 
    { 
     TreeMap<String, Integer> frequencyData = new TreeMap<String, Integer>(); 
     readWordFile(frequencyData); 
     printAllCounts(frequencyData); 
    } 

    public static int getCount(String word, TreeMap<String, Integer> frequencyData) 
    { 
     if (frequencyData.containsKey(word)) 
     { // The word has occurred before, so get its count from the map 
      return frequencyData.get(word); // Auto-unboxed 
     } 
     else 
     { // No occurrences of this word 
      return 0; 
     } 
    } 

    public static void printAllCounts(TreeMap<String, Integer> frequencyData) 
    { 
     System.out.println("-----------------------------------------------"); 
     System.out.println(" Occurrences Word"); 

     for(String word : frequencyData.keySet()) 
     { 
      System.out.printf("%15d %s\n", frequencyData.get(word), word); 
     } 

     System.out.println("-----------------------------------------------"); 
    } 

    public static void readWordFile(TreeMap<String, Integer> frequencyData) 
    { 
     Scanner wordFile; 
     String word; // A word read from the file 
     Integer count; // The number of occurrences of the word 

     try 
     { 
      wordFile = new Scanner(new FileReader("SearchResults.txt")); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.err.println(e); 
      return; 
     } 

     while (wordFile.hasNext()) 
     { 
      // Read the next word and get rid of the end-of-line marker if needed: 
      word = wordFile.next(); 

      // Get the current count of this word, add one, and then store the new count: 
      count = getCount(word, frequencyData) + 1; 
      frequencyData.put(word, count); 
     } 
    } 
} 
+0

Если я правильно понял, возможно, вы хотите добавить еще один оператор if, который проверяет, является ли count! = 0, и только затем добавьте его на карту frequencyData? – BeRecursive

+0

Что именно вы пробовали? В этом коде есть нулевые строки, относящиеся к keywords.txt. Это звучит очень подозрительно, когда вы заявляете, что пытаетесь заставить его работать, не имея ни одной строки, что было бы доказательством этого. –

ответ

1

Там, я вымыл свой код и добавлена ​​фильтрация по всем ключевым словам, найденным в keywords.txt.

public static void main(String[] args) throws Exception { 
    printAllCounts(
    readWordFile("SearchResults.txt", loadKeywords("keywords.txt"))); 
} 

private static Map<String, Integer> readWordFile(
    String fname, Set<String> keywords) throws FileNotFoundException 
{ 
    final Map<String, Integer> frequencyData = new TreeMap<String, Integer>(); 
    for (Scanner wordFile = new Scanner(new FileReader(fname)); 
    wordFile.hasNext();) 
    { 
    final String word = wordFile.next(); 
    if (keywords.contains(word)) 
     frequencyData.put(word, getCount(word, frequencyData) + 1); 
    } 
    return frequencyData; 
} 

private static void printAllCounts(Map<String, Integer> frequencyData) { 
    System.out.println("-----------------------------------------------"); 
    System.out.println(" Occurrences Word"); 
    for(Map.Entry<String, Integer> e : frequencyData.entrySet()) 
    System.out.printf("%15d %s\n", e.getValue(), e.getKey()); 
    System.out.println("-----------------------------------------------"); 
} 

private static int getCount(String word, Map<String, Integer> frequencyData) { 
    return frequencyData.containsKey(word)? frequencyData.get(word) : 0; 
} 

private static Set<String> loadKeywords(String fname) 
throws FileNotFoundException 
{ 
    final Set<String> result = new HashSet<String>(); 
    for (Scanner s = new Scanner(new FileReader(fname)); s.hasNext();) 
    result.add(s.next()); 
    return result; 
} 
+0

Спасибо Марко, мои извинения. Я не включил то, что я пытался сделать с помощью Input StreamReader, чтобы попытаться обработать файл keyword.txt, потому что это был беспорядок и вообще не функционировал. Благодарим вас за предоставленный вами код, который очень ценится, и он работает точно так же, как я пытался это сделать. –

+0

Рад помочь. Просто, пожалуйста, [accept] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ответ (в соответствии с этикетом StackOverflow). –