ディクショナリー(辞書)について ( No.50 )
日時: 2022/10/31 00:19
名前: REDCHEEKS

クエリの次は、ディクショナリーの話をしよう。
ディクショナリーとは辞書、例えば英和辞典とかがその例である。
「spanking」と英語を入れれば「お尻たたき」と日本語が返ってくる、まさにその機能である。
英和辞典で初めて「spanking」を引いた時のドキドキ感思い出すだろ(笑)
そうなんだ「お尻を叩く」んだ! 欧米人はよくやることなんだ!

オブジェクト指向とは直接関係はないが、オブジェクト指向の枠組みのもとに、このような機能が、多数整備されているわけだ。

辞書を使って何をするかって?
それは決まっている、翻訳処理である。
もちろん本格的な翻訳は、素人にできるものではないので、ここではお遊びとして、ノムリッシュあるいはアリババ翻訳的なものを例に挙げる。

参考:アリババ翻訳とは
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=201

参考:ノムリッシュ翻訳とは
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=126

ただ今回は、単に「spanking」⇒「お尻を叩く」では面白くないので、ノムリッシュあるいはアリババ翻訳的なもっと強烈なものを考えよう。

まず、準備として、新たなプロジェクトを作ろう。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161542.png

@「新しいプロジェクトの作成(N)」をクリックする
A「C#」「Windows」「デスクトップ」を順次選択する
B 表示された一覧の中から「Windows フォーム アプリケーション(.NET Framework)」を選択する
C「次へ(N)」をクリックする
D「Superアリババ翻訳」と入力する
E「作成(C)」をクリックする

次に、画面を作成しよう。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161654.png

@ Form1 が選択されていることを確認し
A Text に「スーパーアリババ(ノムリッシュを超える翻訳がここにある)」と入力する
B TextBox をマウスでドラッグし、2つ作成する
C Button をマウスでドラッグし、1つ作成する
D button1 が選択されていることを確認し
E Text に「↓ 翻訳」と入力する
F 翻訳ボタンをダブルクリックする

さらに、プログラムを作成し、実行する。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161732.png

@ button1_Click() 内に、プログラムを記述する
A「開始」ボタンをクリックする
B「Spank me daddy please」と入力する
C「↓ 翻訳」ボタンをクリックする

「猿ビジネスたたく〜」が表示されればOK(笑)

ディクショナリー(辞書)について(プログラム解説) ( No.51 )
日時: 2022/11/05 21:11
名前: REDCHEEKS

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161732.png
とりあえず、上記の @ で書き込んだブログラムについて解説しよう。

var 変態英和辞典 = new Dictionary<string, string>();

これは、変態英和辞典を作成する処理だ。この時点では単語は全く登録されていない。
次に、変態英和辞典に単語を登録する。

変態英和辞典.Add("spank", "猿ビジネスたたく");
変態英和辞典.Add("me", "私愚かな");
変態英和辞典.Add("daddy", "とっつあん");
変態英和辞典.Add("please", "おねがい");

この例では、直接プログラム上に、"spank" とかの単語を書いているが、これはあくまでもプログラムを説明するための例であって、実際のシステムでは、エクセルなどのファイルから何千何万件のデータを読み込むようにするのが普通である。
以上で、辞書の準備はOK!

次は、辞書を使った翻訳処理である。
まず、テキストボックス1に入力された英文を、単語に分割し、さらに小文字に統一する

var tokens = textBox1.Text.Split(' ').Select(t => t.ToLower());

ここで、Split(' ')とは、空白で区切られた文字列を単語に分割する処理である。
さらに、Select(t => t.ToLower()) は、ばらばらに分割された単語それぞれを、小文字に統一する処理である。
※ Spank や spank など、大文字小文字が混じっていると、辞書が検索できないため、大文字小文字どちらかに統一する必要がある。

次に、変換した日本語の単語を、まとめて文章にしていくための作業領域を確保する。

var workBuf = new StringBuilder();

StringBuilder とは、文字列の編集を効率的に行うためのクラスである。

そして、すべての単語に対し繰り返すのが以下のプログラム

foreach (var english in tokens)

辞書に登録されているかのチェックも必要だ

if (変態英和辞典.ContainsKey(english))

そして、辞書を使い、実際に英語 ⇒ 日本語変換を行う。

var japanese = 変態英和辞典[english];

結果を追加して行き、文章としてまとめるのは、以下のプログラムである。

workBuf.Append(japanese);

最後に、翻訳内容をテキストボックス2に表示するわけだ。

textBox2.Text = workBuf.ToString();