基于Google API的全文翻译Web Service实现

来源:互联网 发布:查看淘宝账号退款率 编辑:程序博客网 时间:2024/04/29 11:11
1. Google AJAX Language API
    使用Google AJAX Language API可以实现对用户给定的一段文字进行翻译和检测工作。
2.Web Service
    Web Services是建立可互操作的分布式应用程序的新平台。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web Service ,我们就可以通过Web Service标准对这些服务进行查询和访问。Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。
Web Service建立在一些通用协议的基础上,如HTTP,SOAP,XML,WSDL,UDDI等。这些协议在涉及到操作系统、对象模型和编程语言的选择时,没有任何倾向,因此Web Service有很强的生命力。
3. JSON
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
    Google AJAX Language API有支持非JavaScript环境的接口,它是以JSON进行数据交互的。
    在.NET Framework 2.0环境下,不能直接反系列化JSON数据。在这里,我们使用开源的Json.NET类库进行JSON反系列化。Json.NET可以在 http://www.codeplex.com/Json下载,我们使用Json.NET 1.3.1。
 
三、 Web Service的实现

首先使用Visual Studio 2008新建一个“ASP.NET Web服务应用程序”

由于Google AJAX Language API返回的是JSON格式的数据。所以我们先将下载后的“Newtonsoft.Json.dll”引用到项目,并添加新项“Web服务”将文件命名为“WebService.asmx”。

    Services.asmx的功能流程图如下:

我们需要获得从Google返回的JSON数据,实现方法如下:
[code="csharp"]
///
/// 使用WebRequest获取Google翻译后的内容
///
/// 需要翻译的内容 /// 原文语种 /// 译文语种 ///
private string GetGoogleTranslateJSONString(string strTranslateString,
    string strRequestLanguage, string strResultLanguage)
{
    WebRequest request = HttpWebRequest.Create("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="
        + strTranslateString + "&langpair=" + strRequestLanguage + "%7C" + strResultLanguage + "");
    request.Credentials = CredentialCache.DefaultCredentials;
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseFromServer = reader.ReadToEnd();
    reader.Close();
    dataStream.Close();
    response.Close();
    return responseFromServer;
}
[/code]

实现原理:利用WebRequest把需要翻译的内容提交到Google服务器“http://ajax.googleapis.com/ajax /services/language/translate”,v=1.0是Google AJAX Language API的版本,q参数传递的是需要进行翻译的内容,langpair传递的是需要翻译的内容的语种,“%7C”后面的是译文语种。再使用 HttpWebResponse获取Google返回的数据。

    语种必须使用简写格式,如简体中文(zh-CN)、繁体中文(zh-TW)、英语(en)、日语(ja)等。Google AJAX Language API支持的所有语言较多,这里不再一一列出,详情请查阅Google AJAX Language API官方网站的“翻译API类参考”。(http://code.google.com/apis/ajaxlanguage/documentation/reference.html#LangNameArray)

    Google返回的JSON数据格式为:
[code="js"]
{"responseData": {
    "translatedText":"Ciao mondo"
    },
    "responseDetails": null,
    "responseStatus": 200
};
[/code]

按照Google返回的JSON数据格式,声明反系列化类。
[code="csharp"]
///
/// 翻译结果的反系列化类
///
public class TranslateString
{
private TranslatedText responsedata;
public TranslatedText responseData
{
    get { return responsedata; }
    set { responsedata = value; }
}

private string responsedetails;
public string responseDetails
{
    get { return responsedetails; }
    set { responsedetails = value; }
}

private int responsestatus;
public int responseStatus
{
    get { return responsestatus; }
    set { responsestatus = value; }
}

///
/// 译文
///
public class TranslatedText
{
    private string translatedtext;
    public string translatedText
    {
        get { return translatedtext; }
        set { translatedtext = value; }
    }
}
[/code]

对Google返回的数据进行反系列化后,就可以把反系列化后获得的译文返回显现给用户了。
[code="csharp"]
///
/// 翻译
///
/// 需要翻译的内容 /// 原文语种 /// 译文语种 ///
[WebMethod(Description = "Multi Language Translate.")]
public string MultiLanguageTranslate(string strTranslateString, string strRequestLanguage, string strResultLanguage)
{
    try
    {
        if (!string.IsNullOrEmpty(strTranslateString))
        {
            TranslateString transtring = (TranslateString)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(
                   GetGoogleTranslateJSONString(strTranslateString, strRequestLanguage, strResultLanguage),
                   typeof(TranslateString));
            if (transtring.responseStatus == 200)
                return transtring.responseData.translatedText;
            else
                return "There was an error.";
        }
        else
        {
            return strTranslateString;
        }
    }
    catch (Exception e)
    {
        return e.Message;
    }
}
[/code]

这句“(TranslateString)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(GetGoogleTranslateJSONString(strTranslateString, strRequestLanguage, strResultLanguage), typeof(TranslateString));的作用是将GetGoogleTranslateJSONString(…)方法返回的字符串调用Json.NET的静态方法Newtonsoft.Json.JavaScriptConvert.DeserializeObject实现反系列化,并将其转化为TranslateString类型。

到这里这个Web Service基本上已经完成了。为方便使用,我们再内置两个中英文互译的方法。
[code="csharp"]
///
/// 翻译
/// 默认地将英文翻译成简体中文
///
/// 需要翻译的内容 ///
[WebMethod(Description = "Translate English to Chinese.")]
public string TranslateEnglishToChinese(string strTranslateString)
{
    return MultiLanguageTranslate(strTranslateString, "en", "zh-CN");
}

///
/// 翻译
/// 默认地将简体中文翻译成英文
///
/// 需要翻译的内容 ///
[WebMethod(Description = "Translate Chinese to English.")]
public string TranslateChineseToEnglish(string strTranslateString)
{
    return MultiLanguageTranslate(strTranslateString, "zh-CN", "en");
}
[/code]

到这里就完工了。

参考文献

[1]林弘之.Web Services原理与开发实务.北京:电子工业出版社,2003.11

[2]李健富.利用Google公开的API做在线翻译.http://blog.moozi.net/archives/2008/10/11/use-the-api-of-google-to-translating-online/,2008-04-12

[3]李健富.使用Json.Net 1.3.1的第一个演示.http://blog.moozi.net/archives/2008/09/15/the-first-demo-of-json-net/,2008-09-15

源码下载:http://www.box.net/shared/plpnnrlf8l

 

http://blog.moozi.net/archives/2008/10/16/the-realization-of-web-service-of-full-text-translations-based-on-google-ajax-language-api.aspx