パスワードを忘れた? アカウント作成
9366187 journal
日記

WindVoiceの日記: 「読めてしまう文章」の工作

日記 by WindVoice

すらど日記は久しぶりだなぁ……

Microsoft Wordのオブジェクトを使うと、日本語の単語分解ができるという情報のをネットで見かけたので、少し前に話題になった「読めてしまう文章」を作ってくれる短いプログラムを書いてみました。

①Visual Studio 2012を起動して、Visual Basicの新しいアプリケーションを作成します。フォームにテキトボックス(TextBox1)と、ボタン(Button1)を配置します。
②「ソリューションエクスプローラー」でプロジェクトの右クリックメニューから「参照の追加..」を選択して、「COM」⇒「タイプライブラリ」にある、「Microsoft Excel xx.x Object Library」と「Microsoft Word xx.x Object Library」をチェックしてOKボタンを押します(つまり、PCにWordとExcelがインストールされていなければなりません)。
③下にあるプログラムを書きます。
④[F5]で起動してウインドウが表示されたら、テキストボックスに何か日本語の文章を書いて、ボタンを押します。
⑤あなたが書いた文章の下のほうに、シャッフル済みの文章が追記されます。

たとえば、最初の段落をシャッフルするとこんな感じになります。

Mfsrcotoi  Wrod の おぶじぇくと を つかう と 、 にほんご の たんご ぶんかい が できる と いう じほょうう の を ねっと で みかけた ので 、 すしまこえ に わだい に なった 「 よめて しまう ぶしょんう 」 を つくって くれる みかじい ぷぐろらむ を かいて みしまた 。

Visual Basicのコードは以下の通りです。
再利用はご自由にどうぞ。Visual Studio Express 2012で動作を確認しています。


Imports Microsoft.Office.Interop
Imports System.Text

Public Class Form1
        Dim wd As New Word.Document
        Dim ex As New Excel.Application

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
                TextBox1.AppendText(vbCrLf & "↑↑↑これをシャッフル↓↓↓" & vbCrLf)
                wd.Range.Text = TextBox1.Text
                For Each tango In wd.Paragraphs(1).Range.Words
                        Dim yomigana As String = StrConv(ex.GetPhonetic(tango.Text), vbHiragana)
                        If yomigana.Length > 3 Then
                                Dim moji = yomigana.ToCharArray
                                Dim temp As Char
                                For i = 1 To moji.Length - 2
                                        Dim r As Integer = (moji.Length - 3) * Rnd() + 1
                                        temp = moji(i)
                                        moji(i) = moji(r)
                                        moji(r) = temp
                                Next
                                yomigana = moji
                        End If
                        TextBox1.AppendText(yomigana & " ")
                Next
        End Sub

        Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
                wd.Close(False)
                ex.Quit()
        End Sub
End Class

この議論は、WindVoice (14680)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...