【VB.Net】Dictionaryを使ってテキストファイル内の単語数をカウント

どうも!リョクちゃです。

今回は、あるテキストファイル内に含まれる単語の数をカウントし、

どの単語が一番多く含まれているかを判定してくれるプログラムを

作っていくうえでの考え方や実際に作ったのでコードなどを紹介していきます。

カウントする上で以前にも紹介したDictionaryを使って行うことで更なる使い方を

覚えてもらえたらなって思います。

ちなみに前回はこちら。

新たに2021年もスタートし、干支も変わったということで今回は2000年以降の年を入力することでその年の干支を計算するWindowsフォームアプリケーションを作成したので紹介していきます。



目次

準備編

スポンサーリンク




準備編:フォームの作成

以下のフォームを作成していきます。

各①~⑤のコントロールについては、以下の表になります。

Noアイテムコントロール名
1LabelLabel1
2LabelLabel2
3TextBoxTextBox1
4TextBoxTextBox2
5ButtonButton1

準備編:テキストファイルの準備

単語の数をカウントするにあたって、以下のテキストファイルを準備します。

上図のような、テキストファイルを作成しデスクトップ上に保存しておきます。

実行環境

筆者の実行環境は、

  • VisualStudio2019
  • Windows 10 64bit
  • .Net Framework 4.5.1

になります。

※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。

アプリケーションの目的

ボタンを押すことでファイルダイアログが開き、適当なテキストファイルを読込ませることで

そのテキストファイル内に含まれる単語の数をカウントし、テキストファイルに含まれる

単語の中で最も多く出現する単語と数を表示することを目的とします。

プログラム編

定数・変数の宣言

単語の数を格納する変数を用意しておきます。

処理するファイルを選択する処理

ファイルダイアログをボタンが押されたときに実行できるよう実装します。

ファイルダイアログに関しては、以下の記事をご参照ください。

簡単にまとめています。

ファイルダイアログを使って、パソコンに保存されている適当なファイルを操作する方法を紹介しています。ファイルダイアログとは、ファイルを保存する際に保存先等が設定できる小ウィンドウが開きます。このウィンドウをファイルダイアログと呼んでいます。

読込むファイルは今回は.txtのみを想定しております。

単語をカウントする関数を作成

戻り値として、単語のカウント結果をDictionary変数で返す関数を作成していきます。

流れとしては、

  1. 読込むファイルのパスを引数として渡します。
  2. 1で渡された引数のファイルを読込みます。
  3. 戻り値として返すDictionary変数を新たに宣言しておきます。
  4. 1行ずつ読み込んでいきます。
  5. 1行内に複数の単語がある場合を想定して、Splitメソッドで分割します。
  6. 単語ごとに宣言したDictionary変数に単語をキーに値を個数にして代入します。
    この時、既にDictionaryにある場合は個数をインクリメントします。

実際に関数の部分は、3~6になります。

これをコードで書くと、以下のようになります。

作成した関数をファイルが選択されてからの処理の箇所に記述していきます。

一番多く含まれている単語と個数を表示

dictWordに格納された単語と個数のペアから、

最大個数の単語を各テキストボックスに表示をします。

dictWordから最大個数を見つけるには、Maxメソッドを使用します。

今回は、個数の最大値を対象に、Maxメソッドを使います。

Dictionary.Values.Max()  ‘ 値の最大値を見つける

これを使って、以下のように処理を書きます。

Forループで最大個数のキーを変数textRecに代入していきます。

最後に、変数textRecと最大個数の値を各テキストボックスに表示をしていきます。

全体コード



実行編

作成したコードを実行していきます。

プログラム起動時の画面

テキストファイルを読込みボタン押下時

選択したテキストファイル内の単語カウント結果反映時

まとめ

あるテキストファイル内の単語をカウントし、一番多い単語の数と単語を表示する方法をDictionaryを使って解説しました。

単語やモノの数をカウントする際にDictionaryは非常に有用性のある型です。
こうした使い方もあるんだとイメージを抱いていただけたら嬉しいです。

実際にこういった処理を書く必要なケースに出くわした場合、

思い出してもらえたらなと思います。

・こちらの書籍を参考にVB.Net勉強しています。

スポンサーリンク