Google Translator

0

Witam! Chcę przetłumaczyć tekst w C# przy użyciu Google Translator. Znalazłem nawet prawie działający kod, ale nie mogę wyciągnąć tekstu. Czy wiecie jak to zrobić? Kod wziąłem z http://martinnormark.com/2009/03/12/translate-text-in-c-using-google-translate

 public static class Translator
        {
            /// <summary>
            /// Translates the text.
            /// </summary>
            /// <param name="input">The input.</param>
            /// <param name="languagePair">The language pair.</param>
            /// <returns></returns>
            public static string TranslateText(string input, string languagePair)
            {
                return TranslateText(input, languagePair, System.Text.Encoding.UTF7);
            }

            /// <summary>
            /// Translate Text using Google Translate
            /// </summary>
            /// <param name="input">The string you want translated</param>
            /// <param name="languagePair">2 letter Language Pair, delimited by "|". 
            /// e.g. "en|da" language pair means to translate from English to Danish</param>
            /// <param name="encoding">The encoding.</param>
            /// <returns>Translated to String</returns>
            public static string TranslateText(string input, string languagePair, Encoding encoding)
            {
                string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);

                string result = String.Empty;

                using (WebClient webClient = new WebClient())
                {
                    webClient.Encoding = encoding;
                    result = webClient.DownloadString(url);
                }

                Match m = Regex.Match(result, "(?<=<div id=result_box dir=\"ltr\">)(.*?)(?=</div>)");

                if (m.Success)
                    result = m.Value;

                return result;
            }
        }

Wydaje mi się, że winne jest złe wyrażenie regularne ale nie jestem pewien.

0

Teraz zamiast elementu z wynikiem tłumaczenia

jest , także RegExp będzie miał taką postać:
"(?<=<span id=result_box class="short_text">)(.*?)(?=
)"</p>
0

Dzieki za odpowiedź!. Już jest prawie dobrze ale twoje wyrażenie regularne ma jakiś błąd. Po wywołaniu funkcji otrzymałem coś takiego:

user image

0

Match m = Regex.Match(result, "(?<=<div id=result_box dir="ltr">)(.*?)(?=</div>)");

Czym (skąd, w jakim module ?) jest Match ? U mnie zgłasza błąd!

Dzięki!

Der

0

Taki problem zazwyczaj rozwiązuje wpisanie w google Regex.Match
Pierwszy wynik:
http://msdn.microsoft.com/en-us/library/twcw2f1c.aspx

Konkretnie chodzi o:
Namespace: System.Text.RegularExpressions

0

Czasem wklejenie na pałę kodu nie wystarcza..

0
LuukiMistrzuu napisał(a)

Dzieki za odpowiedź!. Już jest prawie dobrze ale twoje wyrażenie regularne ma jakiś błąd. Po wywołaniu funkcji otrzymałem coś takiego:

user image

Ja to samo dostałem. Trzeba sobie wyciąć wszystko do znaku ">" i po sprawie.

Der1

0

A czy wiesz może jak można ułożyć odpowiednie wyrażenie regularne, żeby od razu otrzymać sam tekst?

0

Nie wiem czy o to pytałeś ale:

Der1 napisał(a)

Trzeba sobie wyciąć wszystko do znaku ">" i po sprawie.

Czyli np.:

int position = result.IndexOf(">");
return result.Substring(position + 1);
0
LuukiMistrzuu napisał(a)

A czy wiesz może jak można ułożyć odpowiednie wyrażenie regularne, żeby od razu otrzymać sam tekst?

Poniżej kolega święty napisał jak wyciąć stringa, natomiast na temat wyr. reg. nie mam zielonego pojęcia :) Ale muszę się zainteresować tematem, bo widzę, że bez tego czasem cieżko.

Jestem ciekaw czy jest jakieś narzędzie, do "budowy" wizualnej wyrażeń regularnych? Miałem tego typu programy dla Delphi, do "projektowania" okienek dialogowych, MessageBoxów, itp.

Der1

1

Jestem ciekaw czy jest jakieś narzędzie, do "budowy" wizualnej wyrażeń regularnych? Miałem tego typu programy dla Delphi, do "projektowania" okienek dialogowych, MessageBoxów, itp.

Ale jakby to miało wyglądać? Jeśli zaznaczysz w edytorze słowa "ala ma kota" to nie wiadomo czy chodziło ci o dokładny ciąg "ala ma kota", ciąg trzech wyrazów z których pierwszy zaczyna się na 'a', 11 znaków z których 4 i 7 to spacje itd.

A co do twojego problemu (żeby wszystko zrobić regexem) - możesz to zrobić grupą regexa - już jest ustawiona n tego co widzę, po prostu nie używasz match.value tylko match.groups[2].value.
Można też chyba lookaheadem ale to chyba bardziej skomplikowane i nigdy nie próbowałem - za chwilę napisze wynik moich prób.

0

Ale jakby to miało wyglądać? Jeśli zaznaczysz w edytorze słowa "ala ma kota" to nie wiadomo czy chodziło ci o dokładny ciąg "ala ma kota", ciąg trzech wyrazów z których pierwszy zaczyna się na 'a', 11 znaków z których 4 i 7 to spacje itd.

W przypadku wyrażeń regularnych byłoby to rzeczywiście mocno skomplikowane. Ale myślę, że jakieś narzędzie pomocnicze mogliby programiści wykombinować.

Jak już ciągniemy temat wyr. reg., to którą z tych książek polecicie:

http://helion.pl/search.cgi?qa=12654&szukaj=wyrazenia+regularne&sortby=wd&wsprzed=1&wprzyg=1&sent=1

?

0

@msm - czyli jednak są narzędzia o które pytałem ( http://www.radsoftware.com.au/regexdesigner/) ;)

Der1

1

Jasne że są, nawet olbrzymie kombajny, ale nie takie "klikacze" jak do messageboxów :P

0

W VS2010 jest wtyczka do RegExpów ponoć.

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