From b5ef2d9823848f387e77cc20055eeed4fbef6365 Mon Sep 17 00:00:00 2001 From: Sergiy Govorukhin Date: Sat, 23 Jan 2016 21:51:32 +0200 Subject: [PATCH 1/5] Module settings updated --- Spring.iml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Spring.iml b/Spring.iml index 9cbbd45..2102528 100644 --- a/Spring.iml +++ b/Spring.iml @@ -3,23 +3,23 @@ - - file://$MODULE_DIR$/src/application-context.xml + + file://$MODULE_DIR$/src/com/main/AppConfiguration.java - + - - - + + + + - - + \ No newline at end of file From a6270d85d660e0540ecc8f436b44b3d9f1dc6e50 Mon Sep 17 00:00:00 2001 From: Sergiy Govorukhin Date: Sat, 23 Jan 2016 22:46:34 +0200 Subject: [PATCH 2/5] App configuration done --- src/com/main/AppConfiguration.java | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/com/main/AppConfiguration.java b/src/com/main/AppConfiguration.java index f3e3f0f..e5bacfa 100644 --- a/src/com/main/AppConfiguration.java +++ b/src/com/main/AppConfiguration.java @@ -1,11 +1,36 @@ package com.main; +import com.lang.LanguageDetector; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; @Configuration +@ComponentScan("com") public class AppConfiguration { - //TODO: Implement me + @Bean + public ResourceLoader resourceLoader() { + return new ResourceLoader(); + } + + @Bean + public LanguageDetector languageDetector() { + return new LanguageDetector(); + } + + @Bean + public TextSource textSource() { + return new TextSource(); + } + + @Bean + public Dictionary dictionary() { + return new Dictionary(); + } + + @Bean + public Translator translator() { + return new Translator(); + } } From 8c287dcc6bdfae5dcfa6eea130a402399b3f5250 Mon Sep 17 00:00:00 2001 From: Sergiy Govorukhin Date: Sat, 23 Jan 2016 22:48:07 +0200 Subject: [PATCH 3/5] Classes implemented --- src/com/lang/LanguageDetector.java | 3 ++- src/com/main/Dictionary.java | 41 ++++++++++++++++++++++++------ src/com/main/Main.java | 1 - src/com/main/ResourceLoader.java | 3 ++- src/com/main/TextSource.java | 18 ++++++++++--- src/com/main/Translator.java | 22 ++++++++++++---- 6 files changed, 68 insertions(+), 20 deletions(-) diff --git a/src/com/lang/LanguageDetector.java b/src/com/lang/LanguageDetector.java index 24feb43..ee863c0 100644 --- a/src/com/lang/LanguageDetector.java +++ b/src/com/lang/LanguageDetector.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; +@Component public class LanguageDetector { private Map> mapping; @@ -21,6 +22,6 @@ public Language detectLanguage(String text) { } private void initMapping() { - mapping = new HashMap>(); + mapping = new HashMap<>(); } } diff --git a/src/com/main/Dictionary.java b/src/com/main/Dictionary.java index 11890b0..e656d12 100644 --- a/src/com/main/Dictionary.java +++ b/src/com/main/Dictionary.java @@ -1,20 +1,33 @@ package com.main; import com.lang.Language; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; +@Component public class Dictionary { - private Map> dictionaries = new HashMap>(); + private Map> dictionaries = new HashMap<>(); - public String translate(String word, Language language) { - //TODO: Implement me - return null; + public static final String delimiterPattern = "[^a-zA-Z]"; + + public String translate(String text, Language language) { + Map dictionary = getDictionary(language); + return Arrays + .stream(text.split(delimiterPattern)) + .map(word -> { + String value = dictionary.get(word.toLowerCase()); + return (value == null) ? word : value; + }) + .collect(Collectors.joining(" ")); } private Map getDictionary(Language language) { @@ -27,7 +40,19 @@ private Map getDictionary(Language language) { } private Map loadDictionary(Language language) { - //TODO: Implement me - return null; +// List dictionary = resourceLoader.load(System.getProperty("user.dir") + "\\dict\\english.dict"); + Properties properties = new Properties(); + String propertyFile = System.getProperty("user.dir") + "\\dict\\" + language.toString().toLowerCase() + ".dict"; + try (InputStreamReader inputStream = new InputStreamReader(new FileInputStream(propertyFile))) { + properties.load(inputStream); + } catch (IOException e) { + e.printStackTrace(); + } + return properties.entrySet() + .stream() + .collect(Collectors.toMap( + entry -> String.valueOf(entry.getKey()), + entry -> String.valueOf(entry.getValue()) + )); } } diff --git a/src/com/main/Main.java b/src/com/main/Main.java index 139a2f1..739469b 100644 --- a/src/com/main/Main.java +++ b/src/com/main/Main.java @@ -3,7 +3,6 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; public class Main { public static void main(String[] args) throws BeansException { diff --git a/src/com/main/ResourceLoader.java b/src/com/main/ResourceLoader.java index 02a2435..bb880bb 100644 --- a/src/com/main/ResourceLoader.java +++ b/src/com/main/ResourceLoader.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.List; +@Component public class ResourceLoader { public List load(String source) { @@ -17,6 +18,6 @@ public List load(String source) { } catch (IOException e) { e.printStackTrace(); } - return new ArrayList(); + return new ArrayList<>(); } } diff --git a/src/com/main/TextSource.java b/src/com/main/TextSource.java index 77b4eb7..fc7259d 100644 --- a/src/com/main/TextSource.java +++ b/src/com/main/TextSource.java @@ -1,9 +1,19 @@ package com.main; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.stream.Collectors; + +@Component public class TextSource { - public String getText(String path) { - //TODO: Implement me - return null; + @Autowired + private ResourceLoader resourceLoader; + + public String getText(String path) { + return resourceLoader.load(path) + .stream() + .collect(Collectors.joining(" ")); } -} +} \ No newline at end of file diff --git a/src/com/main/Translator.java b/src/com/main/Translator.java index 48c4dad..3b1a5ca 100644 --- a/src/com/main/Translator.java +++ b/src/com/main/Translator.java @@ -1,14 +1,26 @@ package com.main; +import com.lang.Language; +import com.lang.LanguageDetector; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; - +@Component public class Translator { - public String translate(String source) { - //TODO: Implement me - return null; + @Autowired + private LanguageDetector languageDetector; + + @Autowired + private TextSource textSource; + + @Autowired + private Dictionary dictionary; + + public String translate(String source) { + String text = textSource.getText(source); + Language language = languageDetector.detectLanguage(text); + return dictionary.translate(text, language); } } From c6e40003b90b56361caebb629513d3d6f8502c77 Mon Sep 17 00:00:00 2001 From: Sergiy Govorukhin Date: Mon, 25 Jan 2016 02:36:15 +0200 Subject: [PATCH 4/5] Updated translate method --- src/com/main/Dictionary.java | 42 +++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/com/main/Dictionary.java b/src/com/main/Dictionary.java index e656d12..5e78dc2 100644 --- a/src/com/main/Dictionary.java +++ b/src/com/main/Dictionary.java @@ -6,10 +6,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; +import java.nio.charset.Charset; +import java.util.*; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Component @@ -17,19 +16,35 @@ public class Dictionary { private Map> dictionaries = new HashMap<>(); - public static final String delimiterPattern = "[^a-zA-Z]"; + public static final Pattern wordPattern = Pattern.compile("[^a-zA-Z]+", Pattern.DOTALL); public String translate(String text, Language language) { Map dictionary = getDictionary(language); - return Arrays - .stream(text.split(delimiterPattern)) - .map(word -> { - String value = dictionary.get(word.toLowerCase()); - return (value == null) ? word : value; - }) - .collect(Collectors.joining(" ")); + Set words = Arrays + .stream(wordPattern.split(text)) + .collect(Collectors.toSet()); + for (String word: words) { + String translation = dictionary.get(word.toLowerCase()); + if (translation != null) { + text = text.replaceAll("\\b" + word + "\\b", toCapital(translation, word)); + } + } + return text; } + private String toCapital(String translation, String origin) { + if (origin.length() < 1 || translation.length() < 1) { + return origin; + } + if (translation.length() < 1 || !Character.isUpperCase(origin.charAt(0))) { + return translation; + } + if (translation.length() == 1) { + return translation.toUpperCase(); + } + return translation.substring(0, 1).toUpperCase() + translation.substring(1); + } + private Map getDictionary(Language language) { Map dictionary = dictionaries.get(language); if (null == dictionary) { @@ -43,7 +58,8 @@ private Map loadDictionary(Language language) { // List dictionary = resourceLoader.load(System.getProperty("user.dir") + "\\dict\\english.dict"); Properties properties = new Properties(); String propertyFile = System.getProperty("user.dir") + "\\dict\\" + language.toString().toLowerCase() + ".dict"; - try (InputStreamReader inputStream = new InputStreamReader(new FileInputStream(propertyFile))) { + try (InputStreamReader inputStream = new InputStreamReader( + new FileInputStream(propertyFile), Charset.defaultCharset())) { properties.load(inputStream); } catch (IOException e) { e.printStackTrace(); From 1ac921987a08a68755a4baa7ea1177ec80726199 Mon Sep 17 00:00:00 2001 From: Sergiy Govorukhin Date: Mon, 25 Jan 2016 03:58:48 +0200 Subject: [PATCH 5/5] Dictionary and Translator classes reorganized --- src/com/main/Dictionary.java | 31 +++++++++++-------------------- src/com/main/Translator.java | 19 +++++++++++++++++-- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/com/main/Dictionary.java b/src/com/main/Dictionary.java index 5e78dc2..4f2259d 100644 --- a/src/com/main/Dictionary.java +++ b/src/com/main/Dictionary.java @@ -7,8 +7,9 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; -import java.util.*; -import java.util.regex.Pattern; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; import java.util.stream.Collectors; @Component @@ -16,27 +17,17 @@ public class Dictionary { private Map> dictionaries = new HashMap<>(); - public static final Pattern wordPattern = Pattern.compile("[^a-zA-Z]+", Pattern.DOTALL); - - public String translate(String text, Language language) { - Map dictionary = getDictionary(language); - Set words = Arrays - .stream(wordPattern.split(text)) - .collect(Collectors.toSet()); - for (String word: words) { - String translation = dictionary.get(word.toLowerCase()); - if (translation != null) { - text = text.replaceAll("\\b" + word + "\\b", toCapital(translation, word)); - } - } - return text; + public String translate(String word, Language language) { + String translation = getDictionary(language).get(word.toLowerCase()); + return toCapital(translation, word); } private String toCapital(String translation, String origin) { - if (origin.length() < 1 || translation.length() < 1) { - return origin; - } - if (translation.length() < 1 || !Character.isUpperCase(origin.charAt(0))) { + if ((translation == null) + || (origin == null) + || (origin.length() < 1) + || (translation.length() < 1) + || (Character.isLowerCase(origin.charAt(0)))) { return translation; } if (translation.length() == 1) { diff --git a/src/com/main/Translator.java b/src/com/main/Translator.java index 3b1a5ca..fc2f5d3 100644 --- a/src/com/main/Translator.java +++ b/src/com/main/Translator.java @@ -5,6 +5,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Arrays; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + @Component public class Translator { @@ -17,10 +22,20 @@ public class Translator { @Autowired private Dictionary dictionary; + public static final Pattern wordSplitPattern = Pattern.compile("[^a-zA-Z]+", Pattern.DOTALL); + public String translate(String source) { String text = textSource.getText(source); Language language = languageDetector.detectLanguage(text); - return dictionary.translate(text, language); + Set words = Arrays + .stream(wordSplitPattern.split(text)) + .collect(Collectors.toSet()); + for (String word: words) { + String translation = dictionary.translate(word, language); + if (translation != null) { + text = text.replaceAll("\\b" + word + "\\b", translation); + } + } + return text; } - }