• ベストアンサー

文章を末尾から並べ替え

何らかのソフトや関数を使い、多種多様な文章を、語尾から50音順に並べ替えることはできるでしょうか? たとえば、 1.花は赤い(はなはあかい) 2.空は青い(そらはあおい) 3.雲は白い(くもはしろい) 4.雪は白い(ゆきはしろい) という文章があったとして、語尾から50音順で 1.空は青い(そらはあおい) 2.花は赤い(はなはあかい) 3.雪は白い(ゆきはしろい) 4.雲は白い(くもはしろい) と並べ替える手段を探しています。 使用目的は、書籍や報告書等の文章の塊から、 どんな言葉や動詞が使われているか、等を分析したいためです。 どうぞよろしくお願いいたします。

  • naogo
  • お礼率72% (39/54)

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.5

[Sheet1(コード)]に関して 1、[Sheet1]のタグを右クリック[コードの表示]を更にクリック。 2、以下のコードをコピペ。 Private Sub CommandButton1_Click()   Dim I    As Integer   Dim N    As Integer   Dim Datas() As String      Datas() = FileReadArray("C:\temp\test.txt")   DatasReverse Datas()   QuickSort Datas()   DatasReverse Datas()   N = UBound(Datas())   For I = 0 To N     FileAppend "C:\Temp\testII.txt", Datas(I)   Next I   FileAppend "C:\Temp\testII.txt", ""   ' 閉じるためのコード End Sub Public Sub DatasReverse(ByRef Datas() As String)   Dim I    As Integer   Dim N    As Integer      N = UBound(Datas())   For I = 0 To N     Datas(I) = StrReverse(Datas(I))   Next I End Sub 今回は、[Test.txt]を並びかえて[TestII.TXT]に書き出しています。 今回は、逆順入れ替えをサブルーチンにしています。 [標準モジュール]に関して 1、[Sheet1]のタグを右クリック[コードの表示]を更にクリック。 2、メニューの[挿入]-[標準モジュール]をクリック。 3、以下の関数をコピペ。 留意事項は、 FileAppend "", "" でも構いませんのでファイルシステムオブジェクトを破棄するコードを忘れないことです。 なお、クイックソートにルーチンは高速のそれではありません。 もっとも、初歩的で判りやすいルーチンとされるものです。 Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray    Dim fso    As Object    Dim strTexts() As String       Set fso = CreateObject("Scripting.FIleSystemObject")    strTexts() = Split(fso.OpenTextFile(FileName).ReadAll, vbCrLf) Exit_FileReadArray:    FileReadArray = strTexts()    Exit Function Err_FileReadArray:    MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"    strTexts() = Split("")    Resume Exit_FileReadArray End Function Public Function FileAppend(ByVal FileName As String, ByVal TEXT As String) As Boolean On Error GoTo Err_FileAppend   Static isOpen As Boolean   Static fso  As Object   Static txs  As Object      If Not isOpen Then     isOpen = True     Set fso = CreateObject("Scripting.FIleSystemObject")     Set txs = fso.CreateTextFile(FileName, True)   End If   If Len(TEXT) > 0 Then     txs.WriteLine TEXT   End If   FileAppend = True Exit_FileAppend: On Error Resume Next   If Len(TEXT) = 0 Then     isOpen = False     Set txs = Nothing     Set fso = Nothing   End If   Exit Function Err_FileAppend:   Resume Exit_FileAppend End Function Public Sub QuickSort(ByRef Datas() As String)   QSort Datas(), 0, UBound(Datas()) End Sub Public Sub QSort(ByRef Datas() As String, _          ByVal intTop As Integer, _          ByVal intLast As Integer)   Dim I As Integer            ' ループの索引   Dim J As Integer            ' ループの索引   Dim R As Integer            ' 分割した右側の配列の要素数   Dim N As Integer            ' 比較する配列の総数   Dim Temp As String           ' 配列を一時的に保存する   Dim Part As String           ' 配列を分割するテストに選ばれた要素   N = intLast - intTop + 1   If N < 2 Then     Exit Sub   End If   '  intTop = 0, N = 5 ---> 0 + 5 / 2 = 2   '  intTop = 1, N = 3 ---> 1 + 3 / 2 = 2   '  テスト値には、対象となる配列の真ん中を選ぶ   Part = Datas(intTop + Int(N / 2))   I = intTop - 1   J = intLast + 1   Do     ' 左から比較する     Do       I = I + 1     Loop While (StrComp(Datas(I), Part) = -1)     ' 右から比較する     Do       J = J - 1     Loop While (StrComp(Datas(J), Part) = 1)     ' 左右の比較作業が出会わなかったら、     ' I と J の要素を入れ替える     If (I < J) Then       Temp = Datas(I): Datas(I) = Datas(J): Datas(J) = Temp     End If   Loop Until (I >= J)   R = N - I   QSort Datas(), 0, I - 1     ' 左側部分の配列をソート   QSort Datas(), I, I + R - 1   ' 右側部分の配列をソート End Sub ところで、全てのコードは、VB6.0 でもそのまま動作します。 ですから、VB6.0で書くのがお勧め。 その際にファイル名を指定するように改造すれば、小さなフリーソフトまがいが出来上がります。 どなたか知人にでも頼まれるとチャッチャと作ってくれませんかね。

naogo
質問者

お礼

できました!!どうもありがとうございました。 ご親切にご説明、というかコピペだけで出来るように していただいて、感謝です!!!! この並べ替えのおかげで、1ヶ月以上はかかるかな、 なんて考えていた仕事が短時間でできそうです! プログラムが書けるっていいですね。 ちょっと勉強してみようかなあ、という気持ちになりました。 本当にどうもありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

小生門外漢なれど、VBAで「空は青い」を「イオアハラソ」に直しても質問の主旨に役立たないと思います。質問標題がそれを希望するように取れますが。 やはり文章から、単語の切り出しが、まず必要であって、 空、は、青いのように分解できないと、「青い」という「ア」のソートの最初桁も割り出せないのではないでしょうか。 単語の割り出しは、過去にどなたかが作成している単語や語句辞書を参照しないと、プログラムにルールだけ乗せて、達成できるものではないと思うし、かな漢字変換の機能のようなことをせねばならず、ジャストシステムやMSなどが今まで苦労してきたことを後追う形で個人でやるのは無理でしょう。ですから#2でおっしゃっているように、専門ソフトを使わざるを得ないと思います。 ワードVBAで、ワードの文書に対しては、ややそれに近いことをやってくれますが。 ーー 単語検索 検索方法:キーワード検索(前方一致・後方一致・完全一致・部分一致)、関連 語検索(前方一致・後方一致・完全一致・部分一致)、全文検索、目次検索・・ http://www.densijiten.co.jp/news/press.php?disp=detail&nid=118 形態だけでなく 日本語シソーラス http://www.taishukan.co.jp/item/nihongo_thesaurus/thesaurus.htmlのような仕組みができるのが目的かと思いましたが。

naogo
質問者

お礼

そうですね、おっしゃっているようなことができれば理想です。 ただそれは個人では難しいのですね・・・。 言葉に関することは、なかなかコンピューターで割り切れるものでは、 ないようですね。 教えていただいた「広辞苑第五版+日本語大シソーラス」チェックしてみます。 本当に有難うございました。

noname#140971
noname#140971
回答No.3

<Test.txt> 1.花は赤い(はなはあかい) 2.空は青い(そらはあおい) 3.雲は白い(くもはしろい) 4.雪は白い(ゆきはしろい) を 2.空は青い(そらはあおい) 1.花は赤い(はなはあかい) 4.雪は白い(ゆきはしろい) 3.雲は白い(くもはしろい) と、並べてエクセルに表示するのは割りと簡単です。 Private Sub CommandButton1_Click()   Dim I    As Integer   Dim N    As Integer   Dim Datas() As String      Datas() = FileReadArray("C:\temp\test.txt")   N = UBound(Datas())   For I = 0 To N     Datas(I) = StrReverse(Datas(I))   Next I   QuickSort Datas()   For I = 0 To N     Datas(I) = StrReverse(Datas(I))     Me.Cells(I + 1, 1) = Datas(I)   Next I End Sub ここでは FileReadArray関数、QuickSort関数を利用しています。 この2つの関数は、エクセルの標準モジュールに登録する必要があります。 コード自体は、簡単です。 先ず、FileReadArray関数でDatas()という配列変数に呼び込んでいます。 次に For-Next文で文字列を逆にしています。 その後、QuickSort関数で並び替えて、また、For-Next文で文字列を逆にして元に戻しています。 ですから、数字も含めて並び代わっています。 さて、こういうVBA解決が質問者のニーズに答えているか否かは不明です。 ですから、FileReadArray関数、QuickSort関数の紹介は一応保留しておきます。 必要があれば補足します。

naogo
質問者

補足

早速ご回答ありがとうございました! 実は関数についての知識があまりなく、 「FileReadArray関数、QuickSort関数」とはどんなものか? 「それらををエクセルの標準モジュールに登録」とはどうするのか? の2点がわかりません・・・。 もしよろしければ、教えていただけると大変助かります。 参考となるHP等でも結構です。 よろしくお願いいたします。

  • hukuponlog
  • ベストアンサー率52% (791/1499)
回答No.2

直接の回答にはなりませんが、もし使用目的が >書籍や報告書等の文章の塊から、どんな言葉や動詞が使われているか、等を分析したい ということであれば、形態素解析ソフトというものがあります。このソフトは、入力されたテキストデータを単語で区切り、品詞ごとに分類をしてくれるもので、必要に応じて動詞と形容詞だけ、とか、名詞だけとか指定して抽出することも出来ます。 よく自由記述のアンケートの分析に使われています。フリーソフトで大変有名なものとして http://chasen-legacy.sourceforge.jp/ 茶筌というものがあります。

naogo
質問者

お礼

おお!こんなソフトがあるのですね。 使ってみます。 ただ単語だけひっぱってくると、名詞として使われているのか 動詞の一部として使われているのかわからないですが、 これだと品詞の情報は落ちないわけですね!便利そうです。 ありがとうございました!!

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

EXCELのVBAにStrReverseという文字を反転させる関数があります。 これを使ったユーザー定義関数で可能だと思います。 VBEの標準モジュールに Function KanaReverse(MOJI) KanaReverse = StrReverse(Application.GetPhonetic(MOJI)) End Function で エクセルにて A1="空は青い" B1=KanaReverse(A1) → "イオアハラソ" になります。 ユーザー定義関数の詳細は下記を参照 http://takashixxx.blog88.fc2.com/blog-entry-21.html

naogo
質問者

お礼

そうなんです!反転できればいいのになあと考えていたのです。 VBAというのを知っていると、いろいろできるんですねえ。 ご紹介いただいたHPで勉強しようと思います。 ありがとうございました。

関連するQ&A

  • 「霞か雲か」というタイトルを、「か」に留意して英訳したい。

    「霞か雲か」という唱歌のタイトルを、英語とドイツ語に訳そうとしています。 この「か」の持つやわらかいニュアンスを表現するには、どのように訳すのが適当でしょうか。 「か」は、やはり英語でいうor、ドイツ語のoderに相当するのでしょうか? 「mist or cloud」・・・? そうするとちょっと味気なさ過ぎるし、「か」の意味が強すぎるような気がするのですが、 他のアイディアをお持ちの方がいらしたら是非教えてください。 全体のイメージがつかみやすいように、この唱歌の歌詞を参考に載せておきます: かすみかくもか はたゆきか とばかりにおう そのはなざかり ももとりさえも うたうなり

  • 短歌の意味、老若男女あなたはどう考えるか教えてください☆

    短歌の意味、老若男女あなたはどう考えるか教えてください☆ 短歌ではないのですが(わかりやすく伝えるため短歌としました、ごめんなさい) 次の文章のかいしゃくや自分がどう思うか、どんなことを想像したか、 感想を教えてもらえればと思います。 (自分1人だと考え方に偏りが出るので) 4月下旬のことを書いた1文ですね。 文章のかいしゃくなので正しい、間違っているはないと思いますので 年代や男女を問わずさまざまな方に自由に、思うまま、色々な意見をもらえればと思います。 よろしくお願いいたします。 〔卯の花雲〕 4月のことを卯月というのは、卯の花の咲く季節だからという説が一般的です。 卯の花は空木(うつぎ)のこと。幹の中が空洞なので、こう呼ばれるようになりました。それを略して卯の花というわけです。 こぼれるように咲く白い花は、よく、雪や月、雲、波などにたとえられます。 卯月の雪、雪見草、夏雪草、潮見草、水晶花など、さまざまな異称でも呼ばれてきました。 「卯の花腐し(くたし)」といえば、この時期、卯の花を腐らせるように降る長雨のことです。 そして、この時期の曇りがちな空が「卯の花雲」です。晴れの日もよし、雨の日もよし、曇りの日もまたよし。 卯の花の背景には、どんな空模様も似合います。』 以上

  • 日本語文章の内容理解に関する質問です

    日本語の教師をしている外国人です。 授業で村上春樹の『ノルウェイの森』を取り上げているんですが、どう理解すればいいか迷っている箇所がありますので、どなたか教えていただけないでしょうか。 十八年という歳月が過ぎ去ってしまった今でも、僕はあの草原の風景をはっきりと思い出すことができる。何日かつづいたやわらかな雨に夏のあいだのほこりをすっかり洗い流された山肌は深く鮮やかな青みをたたえ、十月の風はすすきの穂をあちこちで揺らせ、細長い雲が凍りつくような青い天頂にぴったりとはりついていた。空は高く、じっと見ていると目が痛くなるほどだった。風は草原をわたり、彼女の髪をかすかに揺らせて雑木林に抜けて行った。梢の葉がさらさらと音を立て、遠くの方で犬の鳴く声が聞こえた。…… 質問1.上の段落の中には「十月の風はすすきの穂をあちこちで揺らせ、細長い雲が凍りつくような青い天頂にぴったりとはりついていた」の一文がありますが、「青い天頂にぴったり張り付いていた」のは何なのでしょうか。「十月の風」でしょうかか、それとも「細長い雲」でしょうか。 質問2.「凍りつくような」「青い天頂」なのでしょうか、それとも「長い雲が」「凍りつく」のでしょうか。文法的な関係を教えていただければ助かります。 質問3.文章には、「は」になったり、「が」になったりなのですが、直感的にどう違うのか、教えてくださいませんか。 とてもややこしい質問だと思いますが、ネイティブの方でないと理解が届かないところなので、是非お願いします。

  • 「霞か雲か」の「か」の持つニュアンスはどんなもの?

    「霞か雲か」という唱歌のタイトルを、「か」に留意して英・独語に訳そうとしています。 しかし、この「か」の持つやわらかいニュアンス、最低限の情報のみで表現された宙に浮いているようなイメージ、を どのように訳すのが適当か色々考えているのですが、わかりません。 「外国語」のカテゴリーで同じような質問をさせていただいたのですが、 回答してくださった方が 「霞なのか霧なのか(わからない)」 というような日本文をイメージし、そこから訳す、と書いてくださいまして、なるほどと思いました。 このタイトルでは、色々な情報が省かれていると思うのですが(主語であるとか、述語であるとか)、 そういうものをちゃんと表したらどのように表現できるのでしょうか。 外国語に訳すために、まずそのへんをはっきり知りたいと思うのです。 そして、この「か」というのは、やはり英語でいうor、ドイツ語のoderに相当する意味なのでしょうか? 「mist or cloud」・・・? そうするとちょっと味気なさ過ぎるし、「か」の意味が強すぎるような気がするのです。 このタイトルを例えば他の言い回しで表現したらどうなると思われますか。 アイディアがある方、是非教えてください。 全体のイメージがつかみやすいように、この唱歌の歌詞を参考に載せておきます: かすみかくもか はたゆきか とばかりにおう そのはなざかり ももとりさえも うたうなり

  • 英語以外の外国語で光・闇(など)は何ですか?

    光・闇などの単語を英語以外の外国語で何というか調べています。 下記の単語を何というか教えてください! (カタカナ表記と何語かを書いていただけると嬉しいです) 1:火   2:炎   3:太陽  4:月   5:木 6:草   7:蔓   8:水   9:氷   10:雪 11:雲  12:雷  13:吹雪 14:風  15:嵐 16:竜巻 17:翼  18:花  19:空  20:海 21:陸  22:光  23:闇 わかるものだけでいいのでお願いします。

  • 英語以外の外国語で光・闇(など)は何ですか?

    前にも質問したのですが、違うカテゴリーで質問してしまったので、こちらでもう一度質問します。 英語以外の外国語で下記の単語は何というんでしょうか? (カタカナ表記と何語かを書いていただければ嬉しいです) 1:火   2:炎   3:太陽  4:月   5:木 6:草   7:蔓   8:水   9:氷   10:雪 11:雲  12:雷  13:風  14:嵐  15:竜巻 16:翼  17:花  18:空  19:海  20:陸 21:光  22:闇 わかるものだけでいいのでお願いします。

  • 印象的だった場所・心に残る風景・景色

     いよいよゴールデンウィーク!旅行を計画されている方も多数いらっしゃると思います。  そこで皆様が今まで日本を旅行した中で、印象的だった場所や、心に残っている風景・景色というのがございましたら、ご紹介よろしくお願いいたします。  街、建物、島、海、山、川、湖、滝、峡谷、花、空、雲、虹、朝日、夕日、夜景、雪景色etc・・・何でもよろしいので、より多くの皆様方の御意見を、お待ちしております。

  • 物の名前などは、なぜそのように呼ばれるようになったのか

    手は「て」、空は「そら」と呼ばれていますが、そもそもなぜそのように呼ばれるようになったのでしょう。 象形文字ならモノの形が表現されるので納得できるのですが、 目や口、水や花など、どうやってその名称になったのか、気になります。 名詞に限らず、動詞や形容詞なども同じように不思議です。 外国語ではまた別の音で表現されるので、そのことも気になります。 このようなことは、研究されているのでしょうか。

  • SNSでの名前

     この度、とあるSNSに登録することにしました。18歳の女です。 生年月日は入力できたのですが、名前が決まりません。 目に付いたものだと愛着が沸かないので、小一時間程悩んでいますがなかなかピーンときません。 ずっと使いたいので適当に決めたくないのです。しかし、なかなか思いつきません。 ひらがなだと3文字以内、漢字だと2文字、ローマ字などでは8文字以内の予定でいます。 本名やあだ名などは避けて関係のないものにしたいです。 ただこの文章を読んで頂いても私がどういう人物で何が好きなのか全く浮かんできませんよね。 そもそもそれは自分で決めるべき、というのも承知しています。あくまで参考という形で。 好きなもの 食べ物類→お菓子、チャーハン、アイス、飴 花→桜、コスモス 動物→愛犬、兎、狐、鳥 色→白、空色、桜色、すみれ色 自然→空、雲、雨、雪、海、星 その他→和物、白樺、本、趣味は風景の写真を撮ること。アニメもちょこっと見ています。 なるべく響きが綺麗なものがいいのです。 あと「ず、だ、が」のように濁るのは好きではないです。 くだらない質問ですみません。どなたかお知恵をお貸しください。

  • 一月一日の《天声人語》

     一月一日の《天声人語》を読んでいます。http://www.asahi.com/paper/column20050101.html 分からないところについてお伺いします。 1.『夜明けを待ちながら、いわば空中の一点となって見た大自然の数々を、より遠くに、よりはるかに感じられたものから順に記す。天 星 月 空 水 雲 地。』  『より遠くに、よりはるかに感じられたものから順に記す』とは「近いところから遠いところまで」と「遠いところから近いところまで」のどちらなんでしょうか。『より遠くに、よりはるかに感じられたものから順に記す』の中で言った順番のことがよく理解できません。 2.辞書を引いてから、いくつかの単語は複数の読み方があります。この文の中で一般的に何と読むのか、教えていただけないでしょうか。  第一段落:右手の西方、灯が瞬く  第三段落:記す  第四段落:宿す、衣、大空 3.質問2の中の『第何段落』の後ろの『:』は日本語の中にないと思います。『、』を使ったらいかがでしょうか。  日本語を何年間も勉強していますが、まだまだ文章がうまく書けません。質問文の中で不自然な表現がありましたら、それも併せて指摘していただければ助かります。以上宜しくお願い致します

専門家に質問してみよう