Tłumacz językowy

0

Witam. Potrzebuję do swojego programu tłumacza słów - słów nie całych zdań. Znacie może jakieś darmowe gotowe do tego api / klasy / biblioteki ? Zależy mi na kilku najpopularniejszych językach no i + polski ;] - może jest jakiś popularny plikowy format w którym mogłabym ściągnąć i zaimportować kilka słowników?

korzystając z internetu napisałam sobie coś takiego:

import org.apache.commons.io.IOUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

enum Language {

	PL ("pl"),
	EN ("en"),
	ES ("es"),
	FR ("fr"),
	PT ("pl"),
	DE ("de");

	private final String languageName;

	private Language(String languageName) {
		this.languageName = languageName;
	}

	@Override
	public String toString() {
		return languageName;
	}
}

public class Translator {

	private final String engineURL = "http://api.mymemory.translated.net/get?q=";
	private String text;
	private Language from, to;

	public Translator(Language from, Language to) {
		this.to = to;
		this.from = from;
	}

	private URL prepareURL() throws UnsupportedEncodingException, MalformedURLException {
		String restUrl = engineURL + URLEncoder.encode(text,"UTF-8") +
				"&langpair="+from.toString()+"|"+to.toString();
		return new URL(restUrl);
	}

	public String execute(String text) throws IOException {
		this.text = text;
		HttpURLConnection conn = null;
		String translatedText = "";

		try {
			URL url = prepareURL();
			conn = (HttpURLConnection) url.openConnection();

			if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
				conn.disconnect();
				return "";
			}

			String page = IOUtils.toString(conn.getInputStream());

			JSONObject obj = new JSONObject(page);
			translatedText = obj.getJSONObject("responseData").getString("translatedText");

		} catch (UnsupportedEncodingException | MalformedURLException uee) {
			uee.printStackTrace();
		} catch (JSONException | IOException je) {
			je.printStackTrace();
			System.out.println(je.getMessage());
		} finally {
			if(conn != null)
				conn.disconnect();
		}
		return translatedText;
	}
}

no ale, troszkę za wolno tłumaczy, ma jakieś limity i źle działa jeżeli jest słabe połączenie (sytuacja zasymulowana w ostatnich 4 linijkach, ale to akurat mały problem, bo mogę zrobić żeby wgl rezygnował z tłumaczenia jeżeli ma to zająć np. >2sec).

user image

1

Użyj czegoś normalnego np. Google Translate API > https://code.google.com/p/google-api-translate-java/

0

@niezdecydowany nie wiem może źle puszczam request, próbowałam też innym linkiem i jedyne co dostaję to :
Server returned HTTP response code: 403 for URL: http://translate.google.com/translate_a/t?client=p&text=testowanie&sl=pl&tl=en z tego co tutaj widzę https://developers.google.com/translate/v2/faq?hl=pl No, the Google Translate API is only available as a paid service. próbowałam jeszcze innym sposobem otrzymuję {"responseData": null, "responseDetails": "Suspected Terms of Service Abuse. Please see http://code.google.com/apis/errors", "responseStatus": 403}

a twój link
Server returned HTTP response code: 403 for URL: https://translate.google.pl/#pl/en/matka

udało Ci się otrzymać jsona?

@Koziołek z tego co widzę to jest płatna usługa.

1

Edit://
to chyba nie będzie takie proste - możesz spróbować z tym, chyba jest darmowe:
http://www.microsoft.com/web/post/using-the-free-bing-translation-apis

0

dobra na razie póki co dodałam parametr "&de=[email protected]" do URL tej swojej klasy i wtedy limit zwiększa się do 1000 requestów / dzień co mi odpowiada. zostaje mi zrobienie diagnozy połączenia albo czegoś takiego, że ustawiam tłumaczowi maksymalny czas na przetłumaczenie i jeżeli czas minie to się poddaje. Używam Springa i będzie to jeden z beanów ,ale rozumiem, że to i tak muszę takie odliczanie czasu zrobić na wątkach. te prywatne subskrypcje M$ i jakieś klucze zbytnio mi nie odpowiadają ;p . dzięki za chęci.

1

A szukałaś po tagach "dictionary" ? bo przecież potrzebujesz tylko słów a nie całych zdań, nie ?
https://www.google.pl/?gws_rd=ssl#q=dictionary+api+free
http://stackoverflow.com/questions/11039178/is-there-any-free-online-dictionary-api-json-xml-with-multiple-languages-to-ch
http://glosbe.com/a-api

z tego co rozumiem, to glosbe ma limit ale : The limit is not strict, there is heuristics that guesses whether queries comes from robot or human

1 użytkowników online, w tym zalogowanych: 0, gości: 1