プロが教えるわが家の防犯対策術!

関数、VBAとも6年ほど前から扱っていますが、多忙で技術が向上しません。今回、英語と日本語のかみ合わせのデータを単語ごとに分解する作業が発生しました。
[例]
東日本旅客鉄道株式会社・・・East Japan Railway Company

英語は空欄がありますので、何とかなりそうですが、漢字(送り仮名などのひらがなも含まれます)は続いていますので、分解できるのでしょうか。
希望の結果は、
[日本語]
東日本
旅客
鉄道
株式会社
[英語]
East
Japan
Railway
Company
です。英語は自分で作ってここで見てもらおうと思いましたが、ちょっと稚拙ですので思いとどまりました。
関数またはマクロを使って、多くのデータを分解したいのです。
とくに漢字については、関数・マクロでは不可能でしょうか。人工知能のようなプログラムがないと無理でしょうか。

それから、英語の分類についても見本を示して頂ければ有難いです。
データはA列に漢字B列に英語が1行から1000行まであります。
よろしくお願いします。

A 回答 (5件)

これは仮名漢字変換方式の難しさから考えても、サンデープログラマ程度のスキルでは、ろくなものができないと思います。


出来合いのソフトがないか探すことでしょう。
例えば、ジャストシステムのようなところの技術者・経験者でないと、無理でしょう。辞書があること、自由に操れることも必要でしょう。
エクセル関数ごときでは、もちろん歯が立ちません。
私もできたらいいなと夢想したことがあります。
ーーーー
私のアイデアは、文字コード(帯)から、漢字、ひらがな、カタカナかの区別方のプログラムを勉強する。
漢字続き+カタカナ続き(連続2文字以上)の文字列を、セルにリストアップする。
質問の文章の一部では、英語 自分 稚拙 関数 マクロ 分解 漢字 関数 マクロ 分解 に分離する。
ダブりの、分解、マクロは除く、仕掛けにする。
(「有難い」が有難になるなどの欠点もありますが)
これを人間が一読して、自分 稚拙 などビジネス見地から捨てるものにサインを立てる。
捨てるものはプログラムで後刻に、一斉削除。
表現の規則性に乗っかった、あいまいな面のある方法ですが、事実上
使えるものになるような気がする。
ーー
もうひとつ、既回答にも出てますが、ワードに文章を貼り付け、WordVBAで
Sub tst16()
For Each para In ActiveDocument.Paragraphs
For i = 1 To para.Range.Words.Count
MsgBox para.Range.Words(i).Text
Next i
Next para
End Sub
の結果を何か処理できないか考えるのも途かも知れません。
細かく(助詞まで)分解して表示しますが、人間が見て、NOを応答して捨てる仕組みでやれば、一読する時間+アルファの時間で要素語が抜き出せる気がします。
    • good
    • 0

cherry_islandさん、はじめまして。



VBA で任意の文字列を分割されたいようですが、
どんな環境を想定されていますか?


実行環境をExcel 2000/XP/2003として回答します。
違っていたらゴメンなさい。


(案)
区切り文字(カンマなど)で区切られていない日本語
の文字列を区切るには、自前の辞書などを用意して
処理しないと、ExcelのVBAだけでは難しいと思いま
す。
そこで、Wordの単語を切り出す機能を利用する案で
サンプルを紹介したいと思います。
こちらも完全にはご期待にそえる結果にはならない
と思いますが、自前の辞書を駆使するよりはかなり
楽になると思います。

1. ExcelのVBAに参照設定を追加する

VBAの[ツール]メニューから「参照設定...」を選択し、
参照設定画面のリストから以下の項目にチェックして
[OK]ボタンをクリックします。

 Microsoft Word 11.0 Object Library

 ※"11.0" の部分はインストールしているWordの
  バージョンによって表示が異なります。
  "11.0" は、Word2003です。


Sub Sample()
Dim docObj As Word.Document
Dim myObj As Variant
Dim jpStr As String
Dim enStr As String

jpStr = "東日本旅客鉄道株式会社"
enStr = "East Japan Railway Company"

Set docObj = New Word.Document

'Wordのオブジェクトに文字列を設定する(日本語)
docObj.Paragraphs(1).Range.Text = jpStr

'Wordのオブジェクトから単語を切り出す
For Each myObj In docObj.Paragraphs(1).Range.Words
If myObj.Text <> jpStr Then
Debug.Print myObj.Text
End If
Next


'Wordのオブジェクトに文字列を設定する(英語)
docObj.Paragraphs(1).Range.Text = enStr

'Wordのオブジェクトから単語を切り出す
For Each myObj In docObj.Paragraphs(1).Range.Words
If myObj.Text <> enStr Then
Debug.Print myObj.Text
End If
Next

End Sub


出力結果は以下の通りになります。
---------------------------------------------
東日本
旅客
鉄道
株式
会社


East
Japan
Railway
Company
    • good
    • 0

漢字部分の分割ルールを、そちらの業界に通じていない人(例えば私)に、口で説明出来ますか?


それならば、なにかしらプログラミング化のヒントを差し上げられる可能性があるかも知れませんので、
補足してみてください。

 それが出来ない(ルールに例外が多過ぎ、論理的でない)のであれば、手でやった方が早いです。
 特殊な例外処理用のデータベースが必要となるでしょうから、おそらく、そのデータベースを
構築する時間で、元の作業を手で出来てしまうことでしょう。

 それよりも発想を変えて、分解の区切りは人が入れるけれど、その他の部分を自動化した、
「作業補佐ツール」を開発したほうがいいかも知れませんね。

(一例)
「漢字部分が表示される」
「人がマウスなどで、チェックを入れる」
「OKボタンをクリックすると、文字列をチェックの入った所から分解して、各セルにコピーする」
「次の漢字文字列が表示される」
(以下、くりかえし)
    • good
    • 0

スーツのデザイナーでプログラマではありません。


よって、あくまでも、参考意見として...

英語と日本語の対応をデータベース化するしかないと思います。

East Japan=東日本

ただし、

East=東

も登録される可能性を前提に検索ルーチンを組むべきかも知れません。

1、英語部分は split関数 を使えば、簡単に配列に代入できます。

(1) ピリオド、ビックリマーク等をブランクに置換する。
(2) ブランクで分割して配列に取り込む。

2、日本語部分は、英語の配列を手掛かりにして分割する。

この方式の難点は、予め既知の字句しか分割できないことです。
が、

東、日本、旅客、鉄道、株式、会社
東日本、旅客鉄道、株式会社
東日本旅客鉄道、株式会社

のどれが正しいか異論のある所でしょう。
よって、任意分割と看做さざるをえません。
<データベース辞書>を推奨する理由です。
    • good
    • 0

英単語の方は、VBAを使わなくとも、スペースで区切られているので、分割したいデータの範囲を選択し、メニューのデータ~区切り位置で、カンマやスペースなど…で、スペースにチェックを付けて完了です。



でも漢字の方は無理なのでは?
ととえば大日本多村産業株式会社は、
大日本、多村、産業?
大日、本多村、産業?  誰も区別できないですよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!