• 検索結果がありません。

1.6. 分析

1.6.1. 検索頻度

83

84 入力文:

Rumi: Hola, profesor.

Prof. Rubio: Buenos días.

Rumi: Buenos días. Nos encontramos ahora en la Universidad Complutense de Madrid.

¿Dónde nos vamos ahora?

Prof.: Bueno, vamos a iniciar hoy el Camino del Cid, la primera parte.

Va a ser un viaje de diez días, durante el cual, no solamente vamos a recorrer los lugares que aparecen mencionados en esta famosa obra de la literatura española, sino que además, vamos a estar en contacto con personas, con documentos vivos que nos cuenten cómo es la vida, a qué se dedican, qué inquietudes tienen las personas de los pueblos que vamos a recorrer.

Rumi: ¡Qué interesante!

#¥c%:語頭が子音の単語の数を調べます。

検索式 頻度

¥c{3} 2

(%r)(¥L)=><_$1_>$2 7

¥wまたは¥l(エル)で文字数、&で単語数、[.?!]+で文数を計算します。+をつけて「1 回以上」とする理由は、...や!!, ??などで終わる行を1文として検索するためです。

¥l

&

[.?!]+

検索式 頻度

¥l 483

& 104 [.?!]+ 10

Sub ■分析() '************************************************

検索式配列$ = Split(txt分析, vbCrLf)

選択範囲$ = Replace(Selection.Text, vbTab, " ") 'タブ→空白 段落配列$ = Split(選択範囲$, vbCr) '改行で分けた配列

If opt検索頻度 Then Call 検索頻度 If opt鍵語頻度 Then Call 鍵語頻度

85 If opt鍵語外置 Then Call 鍵語外置 If opt鍵語内置 Then Call 鍵語内置 End Sub

テキストボックス内の(複数の)検索式を開業でスプリットして検索式配列に格納し ます。選択範囲のタブを空白に変換し、改行でスプリットして段落配列に格納します。

以下、それぞれのオプションにしたがってサブルーチンを呼びます。

Sub 検索頻度()

追加文字列$ = "検索式" & vbTab & "頻度" & vbCr 'タイトル

Call 高速文字列作成

obj連想配列.RemoveAll '連想配列のキーとアイテムを削除

For Each 検索式 v In 検索式配列$

If 検索式v = "" Then Exit For

Call 検索式準備

選択範囲$ = 正規表現置換$(選択範囲$, 検索$, 置換$, False)

obj正規表現.Pattern = 拡張正規表現$(検索$) Set Matches = obj正規表現.Execute(選択範囲$) obj連想配列(検索式v) = Matches.Count '一致数 Next

Call 検索頻度出力 End Sub

はじめにタイトル行を作成し、次に個々の検索式について、選択範囲を置換し、検索 文字列の一致数を連想配列に格納します。検索式を置換式に置き換えて、改めて検索 文字列を取り出しているのは、以下の「鍵語頻度」「鍵語外置」「鍵語内置」とテキ ストボックスの書き方とプログラムの処理を統一させるためです。

Sub 検索式準備()

検索式$ = IIf(InStr(検索式v, "=>"), 検索式v, 検索式 v & "=><_$&_>") '検索の場合=><_$&_>を追加

検索$ = Left$(検索式$, InStr(検索式$, "=>") - 1) 検索$ = 拡張正規表現$(検索$)

86 If 正規表現文法違反(検索$) Then Exit Sub 置換$ = Mid$(検索式$, InStr(検索式$, "=>") + 2) End Sub

対象となるテキストを置換するための検索式を準備します。「=>」がない検索式には、

<_$&_>を追加し、「=>」の前を検索文字列とし、「=>」の後を置換文字列とします。

Sub 検索頻度出力()

For Each 単語v In obj連想配列.Keys

追加文字列$ = 単語v & vbTab & obj連想配列(単語v) & vbCr Call 高速文字列作成

Next

If Mid$(出力文字列$, 出力文字数& - 2, 2) = "頻度" _ Then MsgBox "出力がありません。": Exit Sub

objクリップボード.SetText Left$(出力文字列$, 出力文字数&) objクリップボード.PutInClipboard

With objエクセル

.WorkBooks.Add 'ワークブックを追加 .ActiveSheet.Paste 'データペースト .Columns(1).AutoFit '列幅を自動調整 .Columns(2).AutoFit '列幅を自動調整

.Range("A2").Select: .ActiveWindow.FreezePanes = True 'ウィンドー枠固定

If chkソート Then .ActiveSheet.UsedRange.Sort Header:=True, Key1:=.Cells(2, 1)

.Visible = True 'エクセルを表示 End With

End Sub

クリップボードを介して、エクセルシートに出力します。

関連したドキュメント