Advertisement
nocturnalmk

Фреквенција на зборови

Dec 7th, 2012
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.08 KB | None | 0 0
  1. package dom1;
  2.  
  3. import java.io.InputStream;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.Comparator;
  7. import java.util.HashSet;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.Locale;
  11. import java.util.Map;
  12. import java.util.Scanner;
  13. import java.util.Set;
  14. import java.util.SortedSet;
  15. import java.util.StringTokenizer;
  16. import java.util.TreeMap;
  17. import java.util.TreeSet;
  18. import java.util.Map.Entry;
  19.  
  20. public class TermFrequencyTest {
  21.     public static void main(String[] args) {
  22.         String[] stop = new String[] { "во", "и", "се", "за", "ќе", "да", "од",
  23.                 "ги", "е", "со", "не", "тоа", "кои", "до", "го", "или", "дека",
  24.                 "што", "на", "а", "но", "кој", "ја" };
  25.         TermFrequency tf = new TermFrequency(System.in, stop);
  26.         System.out.println(tf.countTotal());
  27.         System.out.println(tf.countDistinct());
  28.         System.out.println(tf.mostOften(10));
  29.     }
  30. }
  31.  
  32. class TermFrequency {
  33.  
  34.     TreeMap<String, Integer> allWords;
  35.     int total;
  36.  
  37.     public TermFrequency(InputStream input, String[] stop) {
  38.  
  39.         allWords = new TreeMap<String, Integer>();
  40.  
  41.         List<String> ignore = Arrays.asList(stop);
  42.         Scanner scan = new Scanner(input);
  43.         String line;
  44.         String fullText = "";
  45.  
  46.         while (scan.hasNextLine()) {
  47.             fullText += scan.nextLine() + " ";
  48.         }
  49.  
  50.         StringTokenizer tokens = new StringTokenizer(fullText);
  51.  
  52.         while (tokens.hasMoreTokens()) {
  53.  
  54.             String word = tokens.nextToken();
  55.             word = word.replaceAll("[.,]*", "");
  56.             word = word.toLowerCase();
  57.  
  58.             if (!ignore.contains(word)&&!word.equals("")) {
  59.                 total++;
  60.  
  61.                 //System.out.print(word + " ");
  62.                 if (word.charAt(word.length()-1) == '-') {
  63.                     word = word.substring(0, word.length() - 1);
  64.                 }
  65.  
  66.                 if (!allWords.containsKey(word)) {
  67.                     allWords.put(word, 1);
  68.                 } else {
  69.                     allWords.put(word, allWords.get(word) + 1);
  70.                 }
  71.             }
  72.  
  73.         }
  74.             //System.out.println("\n" + total);
  75.             //System.out.println(allWords.size());
  76.  
  77.     }
  78.  
  79.     private static String prepareWord(String word) {
  80.  
  81.         String prepared = "";
  82.         char[] letters = word.toCharArray();
  83.  
  84.         for (int i = 0; i < letters.length; i++) {
  85.  
  86.         }
  87.  
  88.         return null;
  89.     }
  90.  
  91.     public int countTotal() {
  92.         return total;
  93.     }
  94.  
  95.     public int countDistinct() {
  96.         return allWords.size();
  97.     }
  98.  
  99.     public List<String> mostOften(int k) {
  100.  
  101.         TreeMap<String, Integer> sorted = new TreeMap<String, Integer>(new ValuesComparator(allWords));
  102.         sorted.putAll(allWords);
  103.         Iterator<Entry<String, Integer>> it = sorted.entrySet().iterator();
  104.         List<String> mostUsed = new ArrayList<String>();
  105.        
  106.         while (it.hasNext()) {         
  107.             mostUsed.add(it.next().getKey());
  108.             k--;
  109.            
  110.             if (k == 0) {
  111.                 break;
  112.             }
  113.         }
  114.        
  115.         return mostUsed;
  116.  
  117.     }
  118.  
  119. }
  120.  
  121. class ValuesComparator implements Comparator<String> {
  122.  
  123.     Map<String, Integer> base;
  124.     public ValuesComparator(Map<String, Integer> base) {
  125.         this.base = base;
  126.     }
  127.    
  128.     @Override
  129.     public int compare(String x, String y) {
  130.         int tmp = base.get(y)-base.get(x);
  131.         if (tmp != 0) {
  132.             return tmp;
  133.         } else {
  134.             return x.compareTo(y);
  135.         }
  136.     }
  137.    
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement