2017-01-24 2 views
1

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

public static void main(String[] args) { 
    String fn = "C:\\Users\\Angel\\Desktop\\myproject\\Preprocessing/"; 
    File ff = new File(fn); 
    ff.mkdir(); 

    int flage; 

    String dir = "C:\\Users\\Angel\\Desktop\\myproject  \\ConvertingToText"; //read 
    String s = ""; 
    File folder = new File(dir); 
    String se = ""; 
    File fs[] = folder.listFiles(); 
    /*for(File f:fs) // print files name 
     {System.out.println(f.getName());}*/ 
    for (File f: fs) { 
     String fn1 = fn + f.getName() + "/"; 
     File ff1 = new File(fn1); 
     ff1.mkdir(); 
     System.out.println(f.getName()); 
     System.out.println(f.getAbsolutePath()); // 
     File folder2 = new File(f.getAbsolutePath()); 
     File[] f3 = folder2.listFiles(); 
     for (File fi: f3) { 
      s = readTextFile(fi.getAbsolutePath()); 
      String fn4 = fn1 + fi.getName() + "/"; 
      s = s.toLowerCase(); 

      String[] keys = s.split(" "); 
      String[] uniquewords; 
      int count = 0; 
      //System.out.println(s); 
      uniquewords = getUniquewords(keys); 

      for (String key: uniquewords) { 
       if (null == key) { 
        break; 
       } 
       for (String sr: keys) { 
        if (key.equals(sr)) { 
         count++; 
        } 
       } 
       System.out.println("[" + key + "]" + count); 
       count = 0; 
      } 
     } 
    } 
} 
private static String[] getUniquewords(String[] keys) { 
    String[] uniquewords = new String[keys.length]; 

    uniquewords[0] = keys[0]; 
    int uniquewordIndex = 1; 
    boolean keyAlreadyExists = false; 

    for (int i = 1; i < keys.length; i++) { 
     for (int j = 0; j <= uniquewordIndex; j++) { 
      if (keys[i].equals(uniquewords[j])) { 
       keyAlreadyExists = true; 
      } 
     } 

     if (!keyAlreadyExists) { 
      uniquewords[uniquewordIndex] = keys[i]; 
      uniquewordIndex++; 
     } 
     keyAlreadyExists = false; 
    } 
    return uniquewords; 
} 
+0

Мне нужно вычислить количество слов в документе, например, слово «привет», то я хочу знать, сколько он отображается в документе1, document2 и т. д., и помещать результаты в файл. –

ответ

1

Я бы предложил использовать карту для хранения подсчета уникальных слов. Таким образом, вы можете перебирать текст только один раз и создавать результат, который вы можете распечатать позже.

Простая реализация ниже:

public Map<String, Integer> wordFrequencyIn(String text) { 
    String[] words = text.trim().toLowerCase().split("\\s+"); // NOTE: splits on any whitespace character, not just " " 
    HashMap<String, Integer> result = new HashMap<>(); 

    for (String word : words) { 
     int count = result.getOrDefault(word, 0); 
     result.put(word, count + 1); 
    } 

    return result; 
} 

Чтобы напечатать карту, вы можете перебирать записи. Как это:

for (Map.Entry<String, Integer> entry : result.entrySet()) { 
    System.out.println("[" + entry.getKey() + "]" + entry.getValue()); 
} 

Если вы не знакомы с использованием карты, я предлагаю взглянуть на учебник Oracle и документация:

+0

спасибо alot ,, очень полезно –

+0

@nanije вы можете отметить ответ, как принято, если вы это хорошо. – phss

+0

О, я сделаю это в следующий раз, спасибо @phss –