-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Korvo 6 parser to gtr (#12) * chore: updated comment * refactor: added google translation domain * refactor: added google translation parser * refactor: changed return type of google translator to translation
- Loading branch information
Showing
7 changed files
with
134 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
10 changes: 10 additions & 0 deletions
10
src/main/java/ru/dankoy/korvotoanki/core/domain/googletranslation/Definition.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package ru.dankoy.korvotoanki.core.domain.googletranslation; | ||
|
||
|
||
/** | ||
* @param type noun, verb, exclamation, etc | ||
* @param info the actual definition | ||
*/ | ||
public record Definition(String type, String info) { | ||
|
||
} |
19 changes: 19 additions & 0 deletions
19
src/main/java/ru/dankoy/korvotoanki/core/domain/googletranslation/GoogleTranslation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package ru.dankoy.korvotoanki.core.domain.googletranslation; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import lombok.Data; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
|
||
@RequiredArgsConstructor | ||
@Data | ||
public class GoogleTranslation { | ||
|
||
private final List<String> translations = new ArrayList<>(); | ||
|
||
private final String transcription; | ||
|
||
private final List<Definition> definitions = new ArrayList<>(); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 8 additions & 0 deletions
8
...in/java/ru/dankoy/korvotoanki/core/service/googletrans/parser/GoogleTranslatorParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package ru.dankoy.korvotoanki.core.service.googletrans.parser; | ||
|
||
import ru.dankoy.korvotoanki.core.domain.googletranslation.GoogleTranslation; | ||
|
||
public interface GoogleTranslatorParser { | ||
|
||
GoogleTranslation parse(String data); | ||
} |
85 changes: 85 additions & 0 deletions
85
...ava/ru/dankoy/korvotoanki/core/service/googletrans/parser/GoogleTranslatorParserImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
package ru.dankoy.korvotoanki.core.service.googletrans.parser; | ||
|
||
|
||
import com.fasterxml.jackson.databind.JsonNode; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.node.ArrayNode; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Objects; | ||
import java.util.stream.IntStream; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import ru.dankoy.korvotoanki.core.domain.googletranslation.Definition; | ||
import ru.dankoy.korvotoanki.core.domain.googletranslation.GoogleTranslation; | ||
import ru.dankoy.korvotoanki.core.exceptions.GoogleTranslatorException; | ||
|
||
// Currently parse only data for keys: t,at,md,rm | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class GoogleTranslatorParserImpl implements GoogleTranslatorParser { | ||
|
||
private final ObjectMapper mapper; | ||
|
||
@Override | ||
public GoogleTranslation parse(String data) { | ||
|
||
String transcriptionString = null; | ||
|
||
JsonNode jsonNodeRoot = toJsonNode(data); | ||
|
||
// translation and transcription. | ||
ArrayNode translationAndTranscriptionNode = (ArrayNode) jsonNodeRoot.get(0); | ||
ArrayNode multipleTranslations = (ArrayNode) jsonNodeRoot.get(5); | ||
|
||
ArrayNode definitions = (ArrayNode) jsonNodeRoot.get(12); | ||
|
||
// obtain transcription | ||
JsonNode transcription = translationAndTranscriptionNode.get(1).get(3); | ||
if (Objects.nonNull(transcription)) { | ||
transcriptionString = transcription.asText(); | ||
} | ||
|
||
// obtain list of translations | ||
ArrayNode mts = (ArrayNode) multipleTranslations.get(0).get(2); | ||
List<String> translations = IntStream.range(0, mts.size()) | ||
.mapToObj(mts::get) | ||
.map(c -> (ArrayNode) c) | ||
.map(n -> n.get(0).asText()) | ||
.toList(); | ||
|
||
List<Definition> defs = new ArrayList<>(); | ||
// obtain definitions | ||
if (Objects.nonNull(definitions)) { | ||
defs = IntStream.range(0, definitions.size()) | ||
.mapToObj(definitions::get) | ||
.map(d -> { | ||
var type = d.get(0).asText(); | ||
var def = d.get(1).get(0).get(0).asText(); | ||
return new Definition(type, def); | ||
}) | ||
.toList(); | ||
} | ||
|
||
var googleTranslation = new GoogleTranslation(transcriptionString); | ||
googleTranslation.getTranslations().addAll(translations); | ||
googleTranslation.getDefinitions().addAll(defs); | ||
|
||
return googleTranslation; | ||
|
||
} | ||
|
||
private JsonNode toJsonNode(String json) { | ||
|
||
try { | ||
return mapper.readTree(json); | ||
} catch (Exception e) { | ||
throw new GoogleTranslatorException( | ||
String.format("Couldn't read json tree '%s'", json), e); | ||
} | ||
|
||
} | ||
|
||
|
||
} |