检测Word文档的语言

时间:2016-02-14 10:45:04

标签: vba ms-word

使用Range.DetectLanguage,如何检测Word文档的每个段落的语言并确定Word文档中最常用的语言?

我想要运行的文档集可以是法语或英语,但标题中都包含英语和法语,因此我无法使用Document.DetectLanguage因为这会返回WdUndefined所有文件。我需要检查所有段落并确定文档中最流行的语言。

VBA中执行此操作的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

Dim doc As Document, para As Paragraph
Dim lang As WdLanguageId
Dim dict As New Dictionary

Set doc = ActiveDocument
If Not doc.LanguagedDetected Then doc.DetectLanguage
' count languages in paragraphs
For Each para In doc.Paragaphs
   lang = para.Range.LanguageId
   If Not dict.Exists(lang) Then 
       dict.add lang, 1
   Else
       dict(lang) = dict(lang) + 1
   End if
Next
' determine most popular language
Dim maxCount As Integer, maxKey As wdLanguageId
For Each key In dict.Keys()
   If dict(key) > maxCount Then 
      maxCount = dict(key)
      maxKey = key
   End if
Next

Debug.Print "Most popular language is: " & maxKey

答案 1 :(得分:2)

使用荷兰语,法语和英语文件。 根据我的经验,Office不会以正确的方式识别语言。我用系统语言编写一个文档:好吧,拼写和语法都是受控制的,语言自动设置为系统语言(即使系统和办公室语言选项中安装了另外两种语言)

即使在编写此文本时,所有单词都带有红色下划线,因此chrome也不会检测到该语言。

系统语言是荷兰语,这个问题一直存在,无论我做什么或做什么,我都要选择全部,手动设置语言,然后进行拼写检查。

如果检测不正确,循环使用这些语言是没有意义的。在我看来,语言/拼写/语法检测/检查/纠正选项是自2007年女士办公室以来,或近十年。见here

如果这与荷兰语是一种“小”语言这一事实​​有关,我不知道。 如果有一种方法可以为当前文档“设置语言”,那么一个简单的启动代码就可以完成这项任务,到目前为止,我没有找到执行此操作的代码,除了我写的这个简单的代码:

sub setlng()
    '设置语言
     Selection.WholeStory
有选择
选择Case InputBox(“你的语言是什么?(NL = Nederlands,FR =Français,EN =英语,DE = Deutch)”) 案例“Nl”,“NL”,“nL”
.LanguageID = wdDutch
案例“Fr”,“FR”,“fR”
.LanguageID = wdFrench
案例“En”,“EN”,“eN”
.LanguageID = wdEnglishUS
案例“De”,“DE”,“dE”
.LanguageID = wdGerman
结束选择

Application.CheckLanguage = True

结束

结束子

显然,由于MSoffice是用英语编写的,你必须使用英语单词作为你的语言,而不是语言的语言,这是合乎逻辑的......

我对居住在Azerbeidjan的人非常好奇,前夕找到他们的语言"Selection.LanguageID = wdAzeriCyrillic" ......嗯......