Задача: Получив на входе корпус языка (огромный набор атрибутированных текстов на каком-нибудь языке) построить частотный словарь. Знаки препинания, скобки, кавычки и числа должны быть удалены. Слова, содержащие в себе не буквенные символы, игнорируются целиком.
Реализация: Код на ideone
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import java.util.*; import java.lang.*; import java.text.*; import java.io.*; import java.util.regex.Pattern; class Ideone { static HashMap<String, Integer> vocabulary = new HashMap<String, Integer>(); static Scanner sc = new Scanner(System.in); public static boolean isEngLetter(char c){ return 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z'; } public static boolean isWord(String s){ for(int i = 0; i < s.length(); i++){ if(!( isEngLetter(s.charAt(i)) || Character.isDigit(s.charAt(i)) || Pattern.matches("\\p{Punct}", s) ) ) { return false; } } return true; } public static String toAlpha(String s){ return s.replaceAll("[^a-zA-Z]",""); } public static void main (String[] args) throws java.lang.Exception { while(sc.hasNext()){ String s = sc.next(); if(isWord(s)){ s = toAlpha(s); if(!s.isEmpty()){ vocabulary.put(s, vocabulary.containsKey(s) ? vocabulary.get(s) + 1 : 1); } } } int sum = 0; for(int value : vocabulary.values()){ sum += value; } NumberFormat formatter = new DecimalFormat("#0.0000"); for(String s : vocabulary.keySet()){ System.out.println(s + " " + formatter.format((double)vocabulary.get(s)/sum)); } } } |
Сам код — правильное решение первой подзадачи. По коду претензий нет, все верно.
К сожалению, нет тестового ввода и вывода (можно для очень маленького файла) и пояснения — какие структуры данных используются. В частности, как упорядочены слова в Вашем словаре (если упорядочены вообще)?
Конечно Вы хорошо назвали свои методы, но все же для стороннего наблюдателя toAlpha могло бы быть не понятно что делает — нужно пояснение, в виде комментариев (еще лучше Javadoc) или краткое пояснение в отчете.
Пока что, 12 баллов (код есть, пояснений, примеров входа, выхода нет).