From daba71907aa982173f888a311059594519dc3c09 Mon Sep 17 00:00:00 2001 From: aleks Date: Tue, 12 Feb 2019 22:20:23 +0300 Subject: [PATCH 1/5] Stage #2: Search for data received from the standard input --- .idea/misc.xml | 2 +- src/simpleSearchEngine/Main.java | 55 ++++++++++++++++++++++++++++- src/simpleSearchEngine/testcase.txt | 11 ++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/simpleSearchEngine/testcase.txt diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..cbb200f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/simpleSearchEngine/Main.java b/src/simpleSearchEngine/Main.java index b8ecb08..51199f7 100644 --- a/src/simpleSearchEngine/Main.java +++ b/src/simpleSearchEngine/Main.java @@ -1,7 +1,60 @@ package simpleSearchEngine; +import java.util.Scanner; + public class Main { + public static void main(String[] args) { - System.out.print("Hello world!"); + searchFunc(); + } + + + /** + * function for user input data + * @return returns array of Strings that user input'ed + */ + private static String[] input(){ + Scanner inp = new Scanner(System.in); + int inpNum = inp.nextInt(); + String[] asset = new String[inpNum + 1]; + System.out.println("Enter all people: "); + for(int i = 0; i <= inpNum; i++){ + asset[i] = inp.nextLine(); + } + String[] finalAsset = new String[inpNum]; + System.arraycopy(asset, 1, finalAsset, 0, finalAsset.length); + return finalAsset; + } + + /** + * subroutine that search all occurances of input String in dict + * and prints out found results. + */ + private static void searchFunc(){ + Scanner inp = new Scanner(System.in); + System.out.print("Enter number of people: "); + String[] dict = input(); + System.out.print("Enter number of people to search: "); + int num = inp.nextInt(); + while(num > 0){ + String search = inp.next().toLowerCase(); + for (String s : dict) { + if (s.toLowerCase().contains(search)) { + System.out.println(s); + } + } + num--; + } + + } + + /** + * Test subroutine that prints out all elements of array + * @param arr for print out all it's elements with index + */ + private static void testLoop(String[] arr){ + for (int i = 0; i < arr.length; i++){ + System.out.println(i + ") " + arr[i]); + } } } \ No newline at end of file diff --git a/src/simpleSearchEngine/testcase.txt b/src/simpleSearchEngine/testcase.txt new file mode 100644 index 0000000..fe030ad --- /dev/null +++ b/src/simpleSearchEngine/testcase.txt @@ -0,0 +1,11 @@ +6 +Dwight Joseph djo@gmail.com +Rene Webb webb@gmail.com +Katie Jacobs +Erick Harrington harrington@gmail.com +Myrtle Medina +Erick Burgess +3 +Erick +KATIE +WEBB@gmail.com \ No newline at end of file From fab27c7e639fefa7e633ac826432928cb9d7f0b6 Mon Sep 17 00:00:00 2001 From: aleks Date: Tue, 12 Feb 2019 23:45:15 +0300 Subject: [PATCH 2/5] Stage #3: The user menu --- src/simpleSearchEngine/Main.java | 46 +++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/simpleSearchEngine/Main.java b/src/simpleSearchEngine/Main.java index 51199f7..be650b8 100644 --- a/src/simpleSearchEngine/Main.java +++ b/src/simpleSearchEngine/Main.java @@ -4,8 +4,10 @@ public class Main { + private static String[] dict = input(); + public static void main(String[] args) { - searchFunc(); + mainMenu(); } @@ -15,6 +17,7 @@ public static void main(String[] args) { */ private static String[] input(){ Scanner inp = new Scanner(System.in); + System.out.print("Enter the number of people: "); int inpNum = inp.nextInt(); String[] asset = new String[inpNum + 1]; System.out.println("Enter all people: "); @@ -30,31 +33,48 @@ private static String[] input(){ * subroutine that search all occurances of input String in dict * and prints out found results. */ - private static void searchFunc(){ + private static void searchFunc(String[] dict){ Scanner inp = new Scanner(System.in); - System.out.print("Enter number of people: "); - String[] dict = input(); - System.out.print("Enter number of people to search: "); - int num = inp.nextInt(); - while(num > 0){ - String search = inp.next().toLowerCase(); + String search = inp.next().toLowerCase(); for (String s : dict) { if (s.toLowerCase().contains(search)) { System.out.println(s); } } - num--; - } + } + /** + * Main menu for program + */ + private static void mainMenu(){ + Scanner inp = new Scanner(System.in); + while(true) { + System.out.print("=== Menu ===\n" + + "1. Find a person\n" + + "2. Print all people\n" + + "0. Exit"); + System.out.print("Enter your choice: "); + switch (inp.nextInt()) { + case 1: searchFunc(dict); + break; + case 2: printAll(dict); + break; + case 0: System.exit(0); + break; + default: System.out.println("Wrong input!!!\n " + + "Please input a valid choice."); + break; + } + } } /** - * Test subroutine that prints out all elements of array + * subroutine for print out all elements of array * @param arr for print out all it's elements with index */ - private static void testLoop(String[] arr){ + private static void printAll(String[] arr){ for (int i = 0; i < arr.length; i++){ - System.out.println(i + ") " + arr[i]); + System.out.println((i + 1) + ") " + arr[i]); } } } \ No newline at end of file From 04fac80655b97d0c5583e02fcaa032ae96087186 Mon Sep 17 00:00:00 2001 From: aleks Date: Tue, 12 Feb 2019 23:59:55 +0300 Subject: [PATCH 3/5] refractoring --- src/simpleSearchEngine/Main.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/simpleSearchEngine/Main.java b/src/simpleSearchEngine/Main.java index be650b8..ab7afe4 100644 --- a/src/simpleSearchEngine/Main.java +++ b/src/simpleSearchEngine/Main.java @@ -1,6 +1,7 @@ package simpleSearchEngine; import java.util.Scanner; +import java.util.function.Consumer; public class Main { @@ -57,7 +58,7 @@ private static void mainMenu(){ switch (inp.nextInt()) { case 1: searchFunc(dict); break; - case 2: printAll(dict); + case 2: printAll.accept(dict); break; case 0: System.exit(0); break; @@ -68,13 +69,9 @@ private static void mainMenu(){ } } - /** - * subroutine for print out all elements of array - * @param arr for print out all it's elements with index - */ - private static void printAll(String[] arr){ + private static Consumer printAll = (arr)-> { for (int i = 0; i < arr.length; i++){ System.out.println((i + 1) + ") " + arr[i]); } - } + }; } \ No newline at end of file From 3dde3ff29a5c56c2117a38c76996e2b2d4844ef1 Mon Sep 17 00:00:00 2001 From: aleks Date: Wed, 13 Feb 2019 00:31:51 +0300 Subject: [PATCH 4/5] Stage #4: Search for data loaded from a file --- src/simpleSearchEngine/Main.java | 67 +++++++++++++++++++++++------ src/simpleSearchEngine/testcase.txt | 61 +++++++++++++++++++++----- 2 files changed, 105 insertions(+), 23 deletions(-) diff --git a/src/simpleSearchEngine/Main.java b/src/simpleSearchEngine/Main.java index ab7afe4..62391ce 100644 --- a/src/simpleSearchEngine/Main.java +++ b/src/simpleSearchEngine/Main.java @@ -1,11 +1,21 @@ package simpleSearchEngine; +import java.io.*; +import java.util.InputMismatchException; import java.util.Scanner; import java.util.function.Consumer; public class Main { - private static String[] dict = input(); + private static String[] dict; + + static { + try { + dict = fileToArray(); + } catch (IOException e) { + e.printStackTrace(); + } + } public static void main(String[] args) { mainMenu(); @@ -53,18 +63,26 @@ private static void mainMenu(){ System.out.print("=== Menu ===\n" + "1. Find a person\n" + "2. Print all people\n" + - "0. Exit"); + "0. Exit\n\n"); System.out.print("Enter your choice: "); - switch (inp.nextInt()) { - case 1: searchFunc(dict); - break; - case 2: printAll.accept(dict); - break; - case 0: System.exit(0); - break; - default: System.out.println("Wrong input!!!\n " + - "Please input a valid choice."); - break; + try { + switch (inp.nextInt()) { + case 1: + searchFunc(dict); + break; + case 2: + printAll.accept(dict); + break; + case 0: + System.exit(0); + break; + default: + System.out.println("Wrong input!!!\n " + + "Please input a valid choice."); + break; + } + } catch (InputMismatchException i) { + System.out.println("Input valid integer number!"); } } } @@ -74,4 +92,29 @@ private static void mainMenu(){ System.out.println((i + 1) + ") " + arr[i]); } }; + + /** + * Function for converting file into array of people + * @return dict array that contains all people from file + * @throws IOException + */ + private static String[] fileToArray() throws IOException { + File testFile; + BufferedReader readFile; + String[] dict = new String[50]; + int counter = 0; + try { + testFile = new File("D:/simple-search-engine/src/simpleSearchEngine/testcase.txt"); + readFile = new BufferedReader(new FileReader(testFile)); + String line; + while ((line = readFile.readLine()) != null) { + dict[counter] = line; + counter++; + } + readFile.close(); + } catch (FileNotFoundException f) { + System.out.println("file not found!!!"); + } + return dict; + } } \ No newline at end of file diff --git a/src/simpleSearchEngine/testcase.txt b/src/simpleSearchEngine/testcase.txt index fe030ad..cc7d5af 100644 --- a/src/simpleSearchEngine/testcase.txt +++ b/src/simpleSearchEngine/testcase.txt @@ -1,11 +1,50 @@ -6 -Dwight Joseph djo@gmail.com -Rene Webb webb@gmail.com -Katie Jacobs -Erick Harrington harrington@gmail.com -Myrtle Medina -Erick Burgess -3 -Erick -KATIE -WEBB@gmail.com \ No newline at end of file +Kristofer Galley +Fernando Marbury +Kristyn Nix +Regenia Enderle +Tressa Dufrene +Colette Mattei +Wendolyn Mcphillips +Jim Knauf +Coreen Beckham +Bob Yeh +Shannan Strope +Yer Fillion +Margene Resendez +Blossom Ambler +Teri Ledet +Dana Baron +Abram Goldsberry +Ferdinand Leopold +Stefania Trunzo +Alexis Collyer +Carlene Pompa +Oliver Dacruz +Jonie Richter +Pasquale Gallien +Verdie Gentle +Gerardo Strouth +Agripina Dones +Latricia Niebuhr +Malena Schommer +Drema Mena +Heide Payeur +Ranae Digiovanni +Simona Pereira +Nick Okamoto +Angelita Wigington +Elin Gray +Dwain Bald +Boris Beiler +Paulina Moe +Demetria Hostetler +Nydia Mcduffie +Florencio Defibaugh +Warner Giblin +May Mans +Shu Chapman +Kaycee Ritch +Victorina Froehlich +Roseanne Oatis +Erica Radford +Elyse Pauling \ No newline at end of file From 5960c0ec621ed5142803ff82c058f8bd61aad4b5 Mon Sep 17 00:00:00 2001 From: aleks Date: Wed, 13 Feb 2019 17:03:53 +0300 Subject: [PATCH 5/5] adding inverted index support --- src/simpleSearchEngine/Main.java | 60 +++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/src/simpleSearchEngine/Main.java b/src/simpleSearchEngine/Main.java index 62391ce..088161a 100644 --- a/src/simpleSearchEngine/Main.java +++ b/src/simpleSearchEngine/Main.java @@ -1,23 +1,28 @@ package simpleSearchEngine; import java.io.*; +import java.util.Arrays; +import java.util.HashMap; import java.util.InputMismatchException; import java.util.Scanner; import java.util.function.Consumer; public class Main { - private static String[] dict; + private static Object[] dictObj; static { try { - dict = fileToArray(); + dictObj = fileToArray(); } catch (IOException e) { e.printStackTrace(); } } + private static String[] dict = (String[]) dictObj[0]; + private static String[] indDict = (String[]) dictObj[1]; public static void main(String[] args) { + invertedIndex(dict, indDict); mainMenu(); } @@ -98,11 +103,24 @@ private static void mainMenu(){ * @return dict array that contains all people from file * @throws IOException */ - private static String[] fileToArray() throws IOException { + private static Object[] fileToArray() throws IOException { File testFile; BufferedReader readFile; String[] dict = new String[50]; + String[] indexDict = new String[dict.length * 2]; int counter = 0; + try { + testFile = new File("D:/simple-search-engine/src/simpleSearchEngine/testcase.txt"); + Scanner input = new Scanner(testFile); + while (input.hasNext()){ + String word = input.next(); + indexDict[counter] = word; + counter++; + } + } catch (FileNotFoundException f){ + System.out.print("Fole not found!!!"); + } + counter = 0; try { testFile = new File("D:/simple-search-engine/src/simpleSearchEngine/testcase.txt"); readFile = new BufferedReader(new FileReader(testFile)); @@ -115,6 +133,40 @@ private static String[] fileToArray() throws IOException { } catch (FileNotFoundException f) { System.out.println("file not found!!!"); } - return dict; + Object[] obj = new Object[2]; + obj[0] = dict; + obj[1] = indexDict; + return obj; + } + + /** + * Fix this Inverted index MAYBE SOME MAGIC WILL HELP :( + * @param arr1 dictionary + * @param arr2 dictionary of tokens for search in arr1 + */ + private static void invertedIndex(String[] arr1, String[] arr2){ + HashMap invInd = new HashMap<>(); + int[] temp = new int[2]; + int count = 0; + for(int j = 0; j < arr1.length; j++){ + for(int i = 0; i < arr2.length; i++){ + if(arr1[j].toLowerCase().contains(arr2[i].toLowerCase())){ + temp[count] = j; + count++; + } + } + invInd.put(arr1[j], temp); + count = 0; + temp = new int[2]; + } + + for (String k: invInd.keySet()) { + System.out.print("Key: " + k + " Value: "); + int[] integers = invInd.get(k); + for (int i = 0; i < integers.length; i++){ + System.out.print(integers[i] + ", "); + } + System.out.println(); + } } } \ No newline at end of file