Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Google Translate - szybkość działania
Forum PHP.pl > Forum > PHP
pojas
Witam. Staram się napisać skrypt, który będzie tłumaczyć pojedyncze słówka z danego zdania. Robiąc to w pętli będę zamulać swój i serwer Google. Trwa to zbyt długo. Kombinowałem wszystkie słówka złączyć w jeden tekst, łapie wtedy nawet kontekst, ale mam problemy z ich podzieleniem. Zwyczajne przedzielenie słówek przecinkiem się nie sprawdza. Inne znaki też różnie działają. Np. "house, named, Bleble,"->"domu, nazwanego Bleble,", a "house | named | Bleble | kick | " -> "dom | nazwie | Bleble | kick |". Możecie mnie jakoś nakierować na rozwiązanie?

  1. //http://code.google.com/intl/pl/apis/language/translate/v1/using_rest_translate.html#json_snippets_php
  2.  
  3. $start = microtime(1);
  4. $words = array(
  5. 'hello', 'world', 'i', 'need', 'to', 'figure', 'out', 'how', 'to',
  6. 'translate', 'faster', 'using', 'google', 'translate');
  7.  
  8. $ch = curl_init();
  9. for($i = 0, $k = 0; $k < 14; $i++, $k++)
  10. {
  11. if($i == count($words)) $i = 0;
  12. $url = "https://ajax.googleapis.com/ajax/services/language/translate".
  13. "?v=1.0&q=$words[$i]&langpair=en%7Cpl";
  14.  
  15. curl_setopt($ch, CURLOPT_URL, $url);
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. $body = curl_exec($ch);
  18. $json = json_decode($body);
  19.  
  20. echo($words[$i].' - '.$json->responseData->translatedText)."<br>\n";
  21. }
  22. curl_close($ch);
  23. echo('czas: '.($x = (microtime(1) - $start)). ', na słowo '.($x/$k));


Powyżej pewnej liczby strasznie zamula. Do kilkunastu słówek na każde zabiera np. ~ 0.05s. Czasem nawet 10 dłużej na każdym słowie + w niektórych nie tłumaczy. Ograniczenie Google?
pablo89pl
a zrób sobie to na ajaxie, stronka sie laduje i js pobiera dane z api google...
http://api.jquery.com/jQuery.ajax/
kiler129
Kto tłumaczy słówka? Przecież to nie ma wtedy żadnego sensu!
Podaj mu całe zdanie, jeśli chcesz pojedyńcze słowa to wypisz je po enterach to ładnie ci zwróci.
pojas
Cytat
Kto tłumaczy słówka?
Ten kto chce się uczyć pojedynczych słówek.

Cytat
Podaj mu całe zdanie, jeśli chcesz pojedyńcze słowa to wypisz je po enterach to ładnie ci zwróci.
Nie bardzo sobie z tym radzę. Wydaje mi się, że translator w okienku na stronie działa trochę inaczej na stroni i przez API. Możliwe też, że źle konstruuje zapytanie.

  1. //http://code.google.com/intl/pl/apis/language/translate/v1/using_rest_translate.html#json_snippets_php
  2.  
  3. $ch = curl_init();
  4.  
  5. $words = "house\nnamed\nBleble\nkick\nhealthcare\n";
  6. $url = "https://ajax.googleapis.com/ajax/services/language/translate".
  7. "?v=1.0&q=".rawurlencode($words)."&langpair=en%7Cpl";
  8.  
  9. curl_setopt($ch, CURLOPT_URL, $url);
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  11. $body = curl_exec($ch);
  12. $json = json_decode($body);
  13. var_dump($words);
  14. var_dump($json->responseData->translatedText);
  15. curl_close($ch);
  16. /* taki mam efekt, którego nie da się ogarnąć
  17. string(35) "house
  18. named
  19. Bleble
  20. kick
  21. healthcare
  22. "
  23. string(42) "dom opieki zdrowotnej o nazwie Bleble kick"
  24. */
Mephistofeles
Cytat
Ten kto chce się uczyć pojedynczych słówek.

O słownikach nie słyszałeś?
pojas
Cytat
O słownikach nie słyszałeś?
No to mi pomogłeś.
Chcę to robić automatycznie, z danego źródła. Nie mogę znaleźć nic darmowego z API oprócz Google Translate.
Dla Google mam np. takie wyniki
1) 200 słówek, czas: 4.1468420028687 sekundy, tj. 0.020734210014343 sekundy/słówko
a następnie
2) 200 słówek, czas: 94.22466301918 sekundy, tj. 0.4711233150959 sekundy/słówko, gdzie większość słówek jest nieprzetłumaczona...
Mephistofeles
Google API mają limity, pisze o tym w konsoli:
Cytat
Default limit: 100,000 characters/day
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.