Skip to content

Commit

Permalink
Korvo 6 parser to gtr (#12)
Browse files Browse the repository at this point in the history
* 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
Dankoy authored Sep 25, 2023
1 parent fb73d74 commit 788d89c
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class GoogleTranslateCommand {
private final ObjectMapperService objectMapperService;


// gt --text hello --options t,at,md
// gt --text hello --options t,at,md,bd
@Command(command = "google-translate",
alias = "gt",
description = "Translate text using google translate")
Expand Down
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) {

}
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<>();

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ru.dankoy.korvotoanki.core.service.googletrans;

import java.util.List;
import ru.dankoy.korvotoanki.core.domain.googletranslation.GoogleTranslation;

/*
* Used info from:
Expand All @@ -11,6 +12,6 @@

public interface GoogleTranslator {

String translate(String text, String targetLanguage, String sourceLanguage,
GoogleTranslation translate(String text, String targetLanguage, String sourceLanguage,
List<String> dtOptions);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import okhttp3.Response;
import org.springframework.stereotype.Service;
import ru.dankoy.korvotoanki.config.GoogleTranslatorProperties;
import ru.dankoy.korvotoanki.core.domain.googletranslation.GoogleTranslation;
import ru.dankoy.korvotoanki.core.exceptions.GoogleTranslatorException;
import ru.dankoy.korvotoanki.core.service.googletrans.parser.GoogleTranslatorParser;


@Slf4j
Expand All @@ -23,8 +25,10 @@ public class GoogleTranslatorOkHttp implements GoogleTranslator {

private final GoogleTranslatorProperties googleTranslatorProperties;

private final GoogleTranslatorParser googleTranslatorParser;

@Override
public String translate(String text,
public GoogleTranslation translate(String text,
String targetLanguage,
String sourceLanguage,
List<String> dtOptions
Expand Down Expand Up @@ -68,7 +72,10 @@ public String translate(String text,
try (var response = call.execute()) {

checkStatus(response);
return response.body() != null ? response.body().string() : "";
var body = response.body() != null ? response.body().string() : "";

return googleTranslatorParser.parse(body);


} catch (Exception e) {
throw new GoogleTranslatorException(e);
Expand Down
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);
}
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);
}

}


}

0 comments on commit 788d89c

Please sign in to comment.