Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 0 additions & 10 deletions .idea/project.iml

This file was deleted.

57 changes: 57 additions & 0 deletions all.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Dwight Joseph djo@gmail.com
Rene Webb webb@gmail.com
Katie Jacobs
Erick Harrington harrington@gmail.com
Myrtle Medina
Erick Burgess
Kate Kate
Kate Kate kate@kate
Kate Kate katekate@mail.ru
Kate Jess kate@jess
Kate Jess
Jess Kate kate@mail.com
Nora Frye nora_frye@mail.com
Carlee Long carlee_long@mail.com
Marissa Sanders marissa_sanders@mail.com
Raquel Nunez
Gabrielle Hernandez
Reed Vaughn
Drew Winters
Courtney Long courtney_long@mail.com
Braydon Sanders braydon_sanders@mail.com
Russell Nunez russell_nunez@mail.com
Cherish Hernandez cherish_hernandez@mail.com
Gunnar Vaughn
Nora Winters nora@winters
Carlee Walter
Marissa Frye
Raquel Long
Gabrielle Sanders gabrielle_sanders@mail.com
Reed Nunez reed_nunez@mail.com
Drew Hernandez drew_hernandez@mail.com
Courtney Vaughn courtney_vaughn@mail.com
Braydon Winters braydon_winters@mail.com
Russell Long
Cherish Sanders cherish_sanders@mail.com
Gunnar Nunez gunnar_nunez@mail.com
Imani Hernandez imani_hernandez@mail.com
Nora Vaughn nora_vaughn@mail.com
Nora Winters
Marissa Walter
Raquel Crosby
Gabrielle Alexander
Reed Calderon
Russell Mclean
Courtney Klein courtney_klein@mail.com
Braydon Russo braydon_russo@mail.com
Russell Mclean russell_mclean@mail.com
Cherish Fox cherish_fox@mail.com
Gunnar Clements
Imani Hammond imani_hammond@mail.com
Harley Berg harley_berg@mail.com
Kathryn Hernandez
Jonah Vaughn
Nehemiah Winters
Talon Walter
Toby Crosby toby_crosby@mail.com
Jaron Fox jaron_fox@mail.com
46 changes: 46 additions & 0 deletions src/simpleSearchEngine/InvertedIndex.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package simpleSearchEngine;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
* Created by DIMA, on 21.01.2019
*/
class InvertedIndex {

static Map<String, List<Integer>> buildInvertedIndex(List<Person> persons){
Map<String, List<Integer>> map = new TreeMap<>();
for(int i = 0; i < persons.size(); i++){
Person p = persons.get(i);
String[] personsFields = {p.getFirstName(), p.getSecondName(), p.getEmail()};
int len = p.getEmail() == null ? 2 : 3;
for(int f = 0; f < len; f++ ){
if(map.containsKey(personsFields[f])){
map.get(personsFields[f]).add(i);
}else {
List<Integer> indexList = new ArrayList<>();
indexList.add(i);
map.put(personsFields[f],indexList);
}
}
}
return map;
}

static void printInvertedIndexes(Map<String, List<Integer>> invertedIndexes){
for(Map.Entry<String, List<Integer>> entry : invertedIndexes.entrySet()){
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
}

static void printOnlyLongInvertedIndexes(Map<String, List<Integer>> invertedIndexes){
for(Map.Entry<String, List<Integer>> entry : invertedIndexes.entrySet()){
if(entry.getValue().size() > 3){
System.out.println(entry.getKey() + " -> " + entry.getValue());
}

}
}
}
55 changes: 54 additions & 1 deletion src/simpleSearchEngine/Main.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,60 @@
package simpleSearchEngine;

import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
//X:\Programming\IdeaProjects\simple-search-engine\all.txt
private static Scanner scanner;
public static void main(String[] args) {
System.out.print("Hello world!");
scanner = new Scanner(System.in).useDelimiter("\n");
List<Person> allPersons = PersonsGetter.getAllPersonsFromFile(scanner);
Map<String, List<Integer>> invertedIndex = InvertedIndex.buildInvertedIndex(allPersons);
//InvertedIndex.printInvertedIndexes(invertedIndex);
//System.out.println("======== Long Indexes ================");
//InvertedIndex.printOnlyLongInvertedIndexes(invertedIndex);
int command;
Printer.printMenu();
while ((command = getCommand()) != 0){
if (command == 2){
System.out.println("=== List of people ===");
Printer.printAllPersons(allPersons);
System.out.println();
}else if(command == 1){
Processor.processQueries(allPersons, invertedIndex, scanner);
}else {
System.out.println("Incorrect option! Try again.");
continue;
}
Printer.printMenu();
}
System.out.println("Bye!");
scanner.close();
System.exit(0);
}

private static int getCommand(){
//Scanner scannerCommand = new Scanner(System.in);
while (true){
String commandLine = scanner.next();
if(commandLine.toCharArray().length != 1 || !Character.isDigit(commandLine.charAt(0))){
System.out.println("Please inset a number!");
Printer.printMenu();
}else if(Integer.parseInt(commandLine) >=0 && Integer.parseInt(commandLine) <= 2){
//scanner.close();
return Integer.parseInt(commandLine);
}else {
System.out.println("Incorrect option! Try again.");
Printer.printMenu();
}
}
}







}
9 changes: 9 additions & 0 deletions src/simpleSearchEngine/Mode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package simpleSearchEngine;

/**
* Created by DIMA, on 23.01.2019
*/
public enum Mode {
ALL, ANY, NONE;

}
37 changes: 37 additions & 0 deletions src/simpleSearchEngine/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package simpleSearchEngine;

/**
* Created by DIMA, on 17.01.2019
*/
class Person {
private String firstName;
private String secondName;
private String email;

Person(String data) {
String[] items = data.split(" +");
if(items.length == 2){
this.firstName = items[0];
this.secondName = items[1];
this.email = null;
}else if(items.length == 3){
this.firstName = items[0];
this.secondName = items[1];
this.email =items[2];
}else {
System.out.println("Wrong data");
}
}

String getFirstName() { return firstName; }
String getSecondName() { return secondName; }
String getEmail() { return email; }

@Override
public String toString() {
if(email == null){
return firstName + " " + secondName;
}
return firstName + " " + secondName + " " + email;
}
}
67 changes: 67 additions & 0 deletions src/simpleSearchEngine/PersonsGetter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package simpleSearchEngine;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* Created by DIMA, on 21.01.2019
*/
class PersonsGetter {
static List<Person> getAllPersonsFromFile(Scanner scanner){
//Scanner scanner = new Scanner(System.in);
while (true){
List<Person> allPersons = new ArrayList<>();
System.out.println("Enter path to file");
String path = scanner.next();
File dataFile = new File(path);
try(FileReader fileReader = new FileReader(dataFile)){
Scanner scannerFile = new Scanner(fileReader).useDelimiter("\n");
String data;
while (scannerFile.hasNextLine()){
data = scannerFile.nextLine().trim();
//System.out.println(data);
allPersons.add(new Person(data));
}
scannerFile.close();
}catch (FileNotFoundException e){
System.out.println("File not found. Please check path");
continue;
}catch (IOException e2){
System.out.println("ioexceprion " + e2.getMessage());
continue;
}
//scanner.close();
return allPersons;
}
}

private static List<Person> getAllPersons(Scanner scanner){
//Scanner scanner = new Scanner(System.in);
List<Person> allPersons = new ArrayList<>();
System.out.println("Enter the number of people:");
int countPeople = scanner.nextInt();
System.out.println("Enter all people:");
for(int i = 0; i < countPeople; i++){
allPersons.add(new Person(scanner.next()));
}
//scanner.close();
return allPersons;
}

static List<Person> getPersonFromListByIndexes(List<Person> allPersons, List<Integer> indexesPerson){
if(indexesPerson == null){
return null;
}
List<Person> findedPersons = new ArrayList<>();
for(Integer index : indexesPerson){
findedPersons.add(allPersons.get(index));
}
return findedPersons;

}
}
19 changes: 19 additions & 0 deletions src/simpleSearchEngine/Printer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package simpleSearchEngine;

import java.util.List;

/**
* Created by DIMA, on 21.01.2019
*/
class Printer {
static void printAllPersons(List<Person> personList){
personList.forEach(System.out :: println);
}

static void printMenu(){
System.out.println("=== Menu ===\n" +
"1. Find a person\n" +
"2. Print all people\n" +
"0. Exit");
}
}
42 changes: 42 additions & 0 deletions src/simpleSearchEngine/Processor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package simpleSearchEngine;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
* Created by DIMA, on 21.01.2019
*/
class Processor {
static void processQueries(List<Person> allPersons, Map<String, List<Integer>> invertedIndexes, Scanner scanner){
System.out.println("Select a matching strategy: ALL, ANY, NONE");
String stringMode;
List<String> modes =Arrays.stream(Mode.values()).map(Mode::name).map(String::toLowerCase).collect(Collectors.toList());

while (!modes.contains(stringMode = scanner.next().toLowerCase())){
System.out.println("Wrong Strategy. Select a matching strategy: ALL, ANY, NONE");
}

Mode mode = Mode.valueOf(stringMode.toUpperCase());
System.out.println("Enter a name or email to search all suitable people.");
String targetData = scanner.next();
List<Integer> findedIndexes = Searcher.getResultIndexedList(invertedIndexes, targetData, mode);
//String[] fields = targetData.split(" ");
List<Person> founded = PersonsGetter.getPersonFromListByIndexes(allPersons, findedIndexes);

if(founded == null || founded.size() == 0){
System.out.println("For query: " + targetData + " nothing was found");
}else if(founded.size() == 1){
System.out.println("1 person found:");
System.out.println(founded.get(0));
}else {
System.out.println(founded.size() + " persons found:");
for(Person p : founded){
System.out.println(p);
}
}
System.out.println();
}
}
Loading