単語の頻度の決定(Microsoft Word)
ドキュメントを分析しているときに、単語頻度リストを作成する方法があるかどうか疑問に思うかもしれません。つまり、ドキュメント内のすべての一意の単語のリストを、出現回数とともに生成することができます。
残念ながら、Wordにはそのような機能は含まれていません。ただし、マクロを使用して独自に作成することはできます。次のVBAマクロは例です:
Sub WordFrequency() Dim SingleWord As String 'Raw word pulled from doc Const maxwords = 9000 'Maximum unique words allowed Dim Words(maxwords) As String 'Array to hold unique words Dim Freq(maxwords) As Integer 'Frequency counter for unique words Dim WordNum As Integer 'Number of unique words Dim ByFreq As Boolean 'Flag for sorting order Dim ttlwds As Long 'Total words in the document Dim Excludes As String 'Words to be excluded Dim Found As Boolean 'Temporary flag Dim j As Integer 'Temporary variables Dim k As Integer ' Dim l As Integer ' Dim Temp As Integer ' Dim tword As String ' ' Set up excluded words Excludes = "[the][a][of][is][to][for][this][that][by][be][and][are]" ' Find out how to sort ByFreq = True ans = InputBox$("Sort by WORD or by FREQ?", "Sort order", "WORD") If ans = "" Then End If UCase(ans) = "WORD" Then ByFreq = False End If Selection.HomeKey Unit:=wdStory System.Cursor = wdCursorWait WordNum = 0 ttlwds = ActiveDocument.Words.Count ' Control the repeat For Each aword In ActiveDocument.Words SingleWord = Trim(LCase(aword)) If SingleWord < "a" Or SingleWord > "z" Then SingleWord = "" 'Out of range? If InStr(Excludes, "[" & SingleWord & "]") Then SingleWord = "" 'On exclude list? If Len(SingleWord) > 0 Then Found = False For j = 1 To WordNum If Words(j) = SingleWord Then Freq(j) = Freq(j) + 1 Found = True Exit For End If Next j If Not Found Then WordNum = WordNum + 1 Words(WordNum) = SingleWord Freq(WordNum) = 1 End If If WordNum > maxwords - 1 Then j = MsgBox("The maximum array size has been exceeded. _ Increase maxwords.", vbOKOnly) Exit For End If End If ttlwds = ttlwds - 1 StatusBar = "Remaining: " & ttlwds & " Unique: " & WordNum Next aword ' Now sort it into word order For j = 1 To WordNum - 1 k = j For l = j + 1 To WordNum If (Not ByFreq And Words(l) < Words(k)) Or (ByFreq And Freq(l) > Freq(k)) Then k = l Next l If k <> j Then tword = Words(j) Words(j) = Words(k) Words(k) = tword Temp = Freq(j) Freq(j) = Freq(k) Freq(k) = Temp End If StatusBar = "Sorting: " & WordNum - j Next j ' Now write out the results tmpName = ActiveDocument.AttachedTemplate.FullName Documents.Add Template:=tmpName, NewTemplate:=False Selection.ParagraphFormat.TabStops.ClearAll With Selection For j = 1 To WordNum .TypeText Text:=Trim(Str(Freq(j))) & vbTab & Words(j) & vbCrLf Next j End With System.Cursor = wdCursorNormal j = MsgBox("There were " & Trim(Str(WordNum)) & _ " different words ", vbOKOnly, "Finished") End Sub
ドキュメントを開いてこのマクロを実行すると、単語または頻度でソートされたリストを作成するかどうかを尋ねられます。単語を選択すると、結果のリストがアルファベット順に表示されます。頻度を選択すると、結果のリストは、その単語がドキュメントに出現した回数に基づいて降順になります。
マクロの実行中、ステータスバーは何が起こっているかを示します。
ドキュメントのサイズとコンピューターの速度によっては、マクロが完了するまでに時間がかかる場合があります。 (349,000語を超える719ページのドキュメントで実行しましたが、完了するまでに約5分かかりました。)
マクロには、Excludes文字列に値を設定する行があることに注意してください。この文字列には、単語リストをまとめるときにマクロが無視する単語が含まれています。リストに単語を追加する場合は、[角かっこ]の間の文字列に単語を追加するだけです。また、除外語が小文字であることを確認してください。
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(879)は、Microsoft Word 97、2000、2002、および2003に適用されます。