翻譯|行業資訊|編輯:龔雪|2024-06-26 10:01:24.873|閱讀 62 次
概述:本文中主要為大家介紹如何使用Azure AI服務增強Word文檔的可訪問性和語言支持,歡迎下載相關組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
DevExpress Office File API是一個專為C#, VB.NET 和 ASP.NET等開發人員提供的非可視化.NET庫。有了這個庫,不用安裝Microsoft Office,就可以完全自動處理Excel、Word等文檔。開發人員使用一個非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CSV 和 Snap Report等企業級文件。
在之前兩篇與AI相關的博客中,我們了解了如何使用DevExpress Office File API庫和Azure AI OpenAI服務為Word和Excel文檔中使用的圖像、圖表和超鏈接生成可訪問的描述:
在這篇文章中,我們將詳細介紹另一個易于訪問的文檔生成重要技巧——在多語言的Word文檔中檢測和設置段落的校對語言。此外,我們還將描述如何翻譯多語言文檔,以及如何生成可訪問的注釋,并將段落翻譯為所選語言。
DevExpress技術交流群10:532598169 歡迎一起進群討論
在生成可訪問的Word文檔(特別是多語言文檔)時,必須指定證明語言并為文本段落添加翻譯,這有幾個原因。語言設置幫助屏幕閱讀器解釋和發音文本,輔助功能和工具(如拼寫/語法檢查器)依賴于這些設置來提供準確的建議和更正。在將Word文檔導出為可訪問的PDF格式時,語言設置也很重要。帶有段落翻譯的注釋有助于增加文檔內容的清晰度,有助于文檔的可訪問性,并增強多語言環境中的協作。
為了滿足這些特殊需求,我們將使用DevExpress Word Processing Document和兩個Azure人工智能服務——語言和翻譯。請在GitHub上的示例項目中查看這些功能的新端點:。
在將此解決方案合并到您的應用程序之前,請務必閱讀并理解Azure AI服務的使用條款和條件。
Azure AI語言服務需要Azure訂閱,訂閱后,在Azure門戶網站中創建語言資源來獲取密鑰和端點。
注意:您可以創建多服務資源來訪問具有相同密鑰和端點的多個AI服務。
安裝 NuGet包到您的項目中,使用語言服務API進行文本語言檢測。下面的代碼片段對TextAnalyticsClient進行身份驗證,向服務發送文本,服務返回有關檢測到的語言的信息。對于這個實現,我們只需要“ISO 693-1”格式的語言名稱。
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('_', '-'); } }
就像語言服務一樣,Azure AI Translator也需要Azure訂閱,您需要在Azure門戶網站中創建Translator資源(或使用多服務資源)。
安裝 NuGet包到您的項目中,并驗證TextTranslationClient。
注意:如果使用Azure AI多服務或區域轉換器資源,必須指定“region”參數用于客戶端身份驗證。
下面的代碼片段發送文本/目標語言名稱(采用“ISO 693-1”格式),并獲得翻譯后的內容作為響應。
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驅動的Word Processing Document API應用程序中使用上面的API,請在RichEditDocumentServer實例中加載文檔,并遍歷集合。使用方法獲取段落文本,使用 方法訪問段落字符屬性。檢查段落文本和字符設置 - 如果段落文本不為空并且語言設置(CharacterProperties.Language)未指定,則調用azureaillanguagehelper。DetectTextLanguage方法檢測段落語言。完成后,將檢測到的語言作為CultureInfo對象分配給CharacterProperties.Language屬性,并使用方法完成段落編輯。如果檢測到的語言不同于默認文檔語言(在當前示例中,我們假設默認語言是英語),則使用AzureAITranslationHelper.TranslateText方法將段落文本翻譯為所需的語言。此時,您可以向當前段落添加注釋,并在該注釋中插入翻譯后的文本。
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文件將包括每個非空文檔段落的語言設置(可在Language對話框中查看),以及每個非英語文本段落的相應翻譯注釋。
更多DevExpress線上公開課、中文教程資訊請上中文網獲取
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網