import java.io.*; import java.util.*; /** * Class to get classifications listed in patents * that have declared government interest * Jose Montalvo 1/2005 */ class CreateGovtSet { static String listnames[]; String Patent_Number; static int numberRecordsProcessed = 0; static int matchingPatents = 0; StringBuffer GovtInterest; static int done = 0; static Vector collect = new Vector(); static Hashtable table = new Hashtable(); static String targetDirectory; static String singleFile; static boolean type; public CreateGovtSet(File file) throws IOException { boolean flag = false; String line = new String(); Reader reader = new FileReader(file); BufferedReader bf = new BufferedReader(reader); Vector v = new Vector(); line = bf.readLine(); while ((line = bf.readLine()) != null) { if (line.startsWith("PATN")) { numberRecordsProcessed++; if (flag) { prepareSet(v); //System.out.println(Patent_Number); } v.clear(); Patent_Number = new String(); } if (line.startsWith("WKU")) { Patent_Number = line.substring(5); flag = false; } if (line.startsWith("FSC")) { String holder = line.substring(5); v.add(holder); } if (line.startsWith("GOVT")) { flag = true; matchingPatents++; String Govtline = bf.readLine(); GovtInterest = new StringBuffer(); GovtInterest.append(Govtline); // System.out.println(Govtline); } }// end while done++; if (done == listnames.length) { getClasses(); System.out.println("Number of Records Processed: " + numberRecordsProcessed); System.out.println("Number of Matching Patents: " + matchingPatents); try { orderClassifications(); } catch (IOException e) {} } } private Vector prepareSet(Vector v) { int max = v.size(); for (int i = 0; i < max; i++) { String t = v.elementAt(i).toString(); collect.addElement(t); } return collect; } // Use of hashtable to get key-value pairs private static void getClasses() { int number = collect.size(); for (int u = 0; u < number; u++) { String name = collect.elementAt(u).toString(); if (table.containsKey(name)) { Integer count = (Integer) table.get(name); table.put(name, new Integer(count.intValue() + 1)); } else { table.put(name, new Integer(1)); } }// end for } // sort the hash table and print the results private static void orderClassifications()throws IOException { File output = new File("GovtInterestClassifications.txt"); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(output))); ArrayList as = new ArrayList(table.entrySet()); pw.println("Directory/Year: " + targetDirectory); Collections.sort(as, new Comparator() { public int compare(Object o1, Object o2) { Map.Entry e1 = (Map.Entry) o1; Map.Entry e2 = (Map.Entry) o2; Integer first = (Integer) e1.getValue(); Integer second = (Integer) e2.getValue(); return first.compareTo(second); } } ); Iterator i = as.iterator(); while (i.hasNext()) { pw.println((Map.Entry) i.next()); } pw.println("Number of Records Processed: " + numberRecordsProcessed); pw.println("Number of Matching Patents: " + matchingPatents); pw.flush(); pw.close(); } public static void main(String args[]) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("******Do you want a 1)File or a 2)Directory to be searched: "); String target = br.readLine(); int number = Integer.parseInt(target); if (number == 2) { System.out.println("******Enter directory to be searched: "); targetDirectory = br.readLine(); if (targetDirectory.length() == 0) { System.out.println("You must enter a directory/year for searching!!\nProgram Ending"); System.exit(-1); } else { File directory = new File(targetDirectory); listnames = directory.list(); for (int n = 0; n < listnames.length; n++) { File file = new File(directory, listnames[n]); CreateGovtSet setmake = new CreateGovtSet(file); }// end for } } else { System.out.println("******Enter file to be searched: "); listnames = new String[1]; singleFile = br.readLine(); File file = new File(singleFile); CreateGovtSet setmake = new CreateGovtSet(file); } }// end main }