翻譯|行業(yè)資訊|編輯:龔雪|2024-06-26 10:01:24.873|閱讀 62 次
概述:本文中主要為大家介紹如何使用Azure AI服務(wù)增強(qiáng)Word文檔的可訪問(wèn)性和語(yǔ)言支持,歡迎下載相關(guān)組件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
DevExpress Office File API是一個(gè)專為C#, VB.NET 和 ASP.NET等開發(fā)人員提供的非可視化.NET庫(kù)。有了這個(gè)庫(kù),不用安裝Microsoft Office,就可以完全自動(dòng)處理Excel、Word等文檔。開發(fā)人員使用一個(gè)非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CSV 和 Snap Report等企業(yè)級(jí)文件。
在之前兩篇與AI相關(guān)的博客中,我們了解了如何使用DevExpress Office File API庫(kù)和Azure AI OpenAI服務(wù)為Word和Excel文檔中使用的圖像、圖表和超鏈接生成可訪問(wèn)的描述:
在這篇文章中,我們將詳細(xì)介紹另一個(gè)易于訪問(wèn)的文檔生成重要技巧——在多語(yǔ)言的Word文檔中檢測(cè)和設(shè)置段落的校對(duì)語(yǔ)言。此外,我們還將描述如何翻譯多語(yǔ)言文檔,以及如何生成可訪問(wèn)的注釋,并將段落翻譯為所選語(yǔ)言。
DevExpress技術(shù)交流群10:532598169 歡迎一起進(jìn)群討論
在生成可訪問(wèn)的Word文檔(特別是多語(yǔ)言文檔)時(shí),必須指定證明語(yǔ)言并為文本段落添加翻譯,這有幾個(gè)原因。語(yǔ)言設(shè)置幫助屏幕閱讀器解釋和發(fā)音文本,輔助功能和工具(如拼寫/語(yǔ)法檢查器)依賴于這些設(shè)置來(lái)提供準(zhǔn)確的建議和更正。在將Word文檔導(dǎo)出為可訪問(wèn)的PDF格式時(shí),語(yǔ)言設(shè)置也很重要。帶有段落翻譯的注釋有助于增加文檔內(nèi)容的清晰度,有助于文檔的可訪問(wèn)性,并增強(qiáng)多語(yǔ)言環(huán)境中的協(xié)作。
為了滿足這些特殊需求,我們將使用DevExpress Word Processing Document和兩個(gè)Azure人工智能服務(wù)——語(yǔ)言和翻譯。請(qǐng)?jiān)贕itHub上的示例項(xiàng)目中查看這些功能的新端點(diǎn):。
在將此解決方案合并到您的應(yīng)用程序之前,請(qǐng)務(wù)必閱讀并理解Azure AI服務(wù)的使用條款和條件。
Azure AI語(yǔ)言服務(wù)需要Azure訂閱,訂閱后,在Azure門戶網(wǎng)站中創(chuàng)建語(yǔ)言資源來(lái)獲取密鑰和端點(diǎn)。
注意:您可以創(chuàng)建多服務(wù)資源來(lái)訪問(wèn)具有相同密鑰和端點(diǎn)的多個(gè)AI服務(wù)。
安裝 NuGet包到您的項(xiàng)目中,使用語(yǔ)言服務(wù)API進(jìn)行文本語(yǔ)言檢測(cè)。下面的代碼片段對(duì)TextAnalyticsClient進(jìn)行身份驗(yàn)證,向服務(wù)發(fā)送文本,服務(wù)返回有關(guān)檢測(cè)到的語(yǔ)言的信息。對(duì)于這個(gè)實(shí)現(xiàn),我們只需要“ISO 693-1”格式的語(yǔ)言名稱。
public class AzureAILanguageHelper { private TextAnalyticsClient client; internal AzureAILanguageHelper(string key, Uri endpoint) { AzureKeyCredential azureCredential = new AzureKeyCredential(key); client = new TextAnalyticsClient(endpoint, azureCredential); } internal async Task<string> DetectTextLanguage(string text) { DetectedLanguage detectedLanguage = await client.DetectLanguageAsync(text); return detectedLanguage.Iso6391Name.Replace('_', '-'); } }
就像語(yǔ)言服務(wù)一樣,Azure AI Translator也需要Azure訂閱,您需要在Azure門戶網(wǎng)站中創(chuàng)建Translator資源(或使用多服務(wù)資源)。
安裝 NuGet包到您的項(xiàng)目中,并驗(yàn)證TextTranslationClient。
注意:如果使用Azure AI多服務(wù)或區(qū)域轉(zhuǎn)換器資源,必須指定“region”參數(shù)用于客戶端身份驗(yàn)證。
下面的代碼片段發(fā)送文本/目標(biāo)語(yǔ)言名稱(采用“ISO 693-1”格式),并獲得翻譯后的內(nèi)容作為響應(yīng)。
public class AzureAITranslationHelper { TextTranslationClient client; internal AzureAITranslationHelper(string key, Uri endpoint, string region = "global") { AzureKeyCredential azureCredential = new AzureKeyCredential(key); client = new TextTranslationClient(azureCredential, endpoint, region); } internal async Task<string> TranslateText(string text, string sourceLanguage, string targetLanguage) { Response<IReadOnlyList<TranslatedTextItem>> response = await client.TranslateAsync(targetLanguage, text, sourceLanguage); TranslatedTextItem translatedTextItem = response.Value.First(); return translatedTextItem.Translations[0].Text; } }
要在DevExpress驅(qū)動(dòng)的Word Processing Document API應(yīng)用程序中使用上面的API,請(qǐng)?jiān)赗ichEditDocumentServer實(shí)例中加載文檔,并遍歷集合。使用方法獲取段落文本,使用 方法訪問(wèn)段落字符屬性。檢查段落文本和字符設(shè)置 - 如果段落文本不為空并且語(yǔ)言設(shè)置(CharacterProperties.Language)未指定,則調(diào)用azureaillanguagehelper。DetectTextLanguage方法檢測(cè)段落語(yǔ)言。完成后,將檢測(cè)到的語(yǔ)言作為CultureInfo對(duì)象分配給CharacterProperties.Language屬性,并使用方法完成段落編輯。如果檢測(cè)到的語(yǔ)言不同于默認(rèn)文檔語(yǔ)言(在當(dāng)前示例中,我們假設(shè)默認(rèn)語(yǔ)言是英語(yǔ)),則使用AzureAITranslationHelper.TranslateText方法將段落文本翻譯為所需的語(yǔ)言。此時(shí),您可以向當(dāng)前段落添加注釋,并在該注釋中插入翻譯后的文本。
public async Task<IActionResult> GenerateLanguageSettingsForParagraphs (IFormFile documentWithHyperlinks, [FromQuery] RichEditFormat outputFormat) { try { var languageHelper = new AzureAILanguageHelper(languageAzureKey, languageEndPoint); var translationHelper = new AzureAITranslationHelper(translationAzureKey, translationEndPoint); using (var server = new RichEditDocumentServer()) { await RichEditHelper.LoadFile(server, documentWithHyperlinks); server.IterateSubDocuments(async (document) => { foreach (var paragraph in document.Paragraphs) { CharacterProperties cp = document.BeginUpdateCharacters(paragraph.Range); string paragraphText = document.GetText(paragraph.Range); if (cp.Language.Value.Latin == null && !string.IsNullOrWhiteSpace(paragraphText)) { CultureInfo? culture = null; string language = languageHelper.DetectTextLanguage(paragraphText).Result; try { culture = new CultureInfo((language)); } catch { } finally { if (culture != null) { // Set the paragraph language cp.Language = new DevExpress.XtraRichEdit.Model.LangInfo(culture, null, null); if (language != "en") { // Generate an accessible comment with the paragraph translation Comment comment = document.Comments.Create(paragraph.Range, "Translator"); SubDocument commentDoc = comment.BeginUpdate(); string translatedText = translationHelper.TranslateText(paragraphText, language, "en").Result; commentDoc.InsertText(commentDoc.Range.Start, $"Detected Language: {language}\r\nTranslation (en): {translatedText}"); comment.EndUpdate(commentDoc); } } } } document.EndUpdateCharacters(cp); } }); Stream result = RichEditHelper.SaveDocument(server, outputFormat); string contentType = RichEditHelper.GetContentType(outputFormat); string outputStringFormat = outputFormat.ToString().ToLower(); return File(result, contentType, $"result.{outputStringFormat}"); } } catch (Exception e) { return StatusCode(500, e.Message + Environment.NewLine + e.StackTrace); } }
輸出的Word文件將包括每個(gè)非空文檔段落的語(yǔ)言設(shè)置(可在Language對(duì)話框中查看),以及每個(gè)非英語(yǔ)文本段落的相應(yīng)翻譯注釋。
更多DevExpress線上公開課、中文教程資訊請(qǐng)上中文網(wǎng)獲取
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)