人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

テキスト抽出 正規表現 GREP?について質問です。

東京都/千代田区/千代田/1?1?1
東京都/中央区/日本橋/1?1?2
東京都/中野区/中央/1?1?3
東京都/渋谷区/神宮前/1?1?4

このようなテキストが並ぶファイルがあるとします。
これの「区」の箇所だけを自動的に抽出したいのです。
以上のテキストが、以下のようになるイメージです。

千代田区
中央区
中野区
渋谷区


「テキスト抽出ソフト」「正規表現」「GREP」というものを使えばできるのかもと考えております。

まず、
1.「東京都/」を消す
2.残ったテキストのうち、「/」の前までを残して後は消去
(ただし改行コードは残す)

これでできると思いますが、実際にどのソフトを使って、どういった正規表現を指定すればいいのかがわかりません。

どなたかよろしくお願い致します。

●質問者: tokyosmash
●カテゴリ:コンピュータ インターネット
✍キーワード:grep イメージ コード ソフト テキスト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● eggplantbb
●20ポイント

正規表現に対応したテキストエディタで

1.「東京都/」を「」に置換する(=消す)

2.「区/.*$」を「区」に置換する

という作業をすれば実現できるかと思います。

◎質問者からの返答

ありがとうございます!

正規表現って便利ですね。

色々と勉強してみようと思います。


2 ● bigorange
●20ポイント

GREPってのはプログラム言語の関数名のことでしょうか?(UNIXのコマンド?)


tokyosmashの知識がどの程度かわからないのでとりあえず簡単な方法を

1:Microsoft Excelでファイルから開く

2:ファイルを開くウィンドウの下にファイルの種類があるのですべてのファイルにする

3:テキストファイルを選択できるようになる(一覧に出てくる)ので選択

4:テキストファイルウィザードってのが出てくるので"元のデータ形式"をカンマやタブなどの区切り文字によってフィールドごとに区切られたデータにチェック(多分最初からなってる)

5:次へ

6:区切り文字のその他にチェックして右にあるボックスに/を入力

完了すると元のファイルが/でセルごとに区切られてるので?区の列だけ選択してコピーするなりご自由に。


自動的ってのは全部自動ですかね?だったらごめんなさい。

◎質問者からの返答

いやーこの方法は思いつきませんでした。

/を区切りに使えばいいのですね。

素晴らしい。

本当にありがとうございます。

この方法だと色々と応用が利きます!


3 ● kn1967
●20ポイント

GREPは行を表示するだけなので、部分的に抽出したいのであればPERLなどのテキスト処理スクリプトで行う必要がありますので、敷居は少し高くなりますよ。

Excelを使うなどはダメですか?

A列に住所が並んでいるとして、

B1に =MID(A1,5,SEARCH("/",A1,5)-5)

B2以下はB1をコピー

でお望みの一覧が出来ますけど、、、

◎質問者からの返答

なるほどこれでも出来ますね。

神奈川県や和歌山県の場合は微調整すれば。

GREPだと行を抽出するだけなので困っていたのです。ありがとうございます。


4 ● kurukuru-neko
●20ポイント

Windowsでの作業として

1.

Excelでそのファイルを"/"を区切り文字として読み込めば

あとは切り貼り

2. gawkを使う

http://www.vector.co.jp/soft/win95/util/se376460.html

http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/GNU/AWK/jgawk-jman/ht...

入力ファイルをaddr.txtで漢字がシフト

JISの場合

以下をファイルに保存する ku.awk

#
# BEGINは処理開始時に処理される
#
BEGIN {
 # 区切り文字を設定する。
 FS="/";
}

#
# 1行単位に処理される
#
# データ個数が N以上で N番目の文字が区で終わる文字を保存する
#
# NF: 区切り文字で区切ったときの項目数
# node: 区の住所の個数を数えて保存する 
#
{

 if( NF>=2 && match($2,".*区$") > 0 ) {
 node[$1","$2]++; 
 } else if( NF>=3 && match($3,".*区$") > 0 ) {
 node[$1","$2","$3]++; 
 } else if( NF>=4 && match($4,".*区$") > 0 ) {
 node[$1","$2","$3","$4]++; 
 };
}

#
# ENDは処理終了時に処理される
# データを抽出したものを表示する。
#

END {
 for( dat in node ) {
 printf("%s,%d\n",dat,node[dat]);
 }
}

保存したファイル ku.awkとgawkをつって抽出する

したものをソートして ku.csvに保存する

gawk -f ku.awk addr.txt |sort > ku.csv

ku.csvは、住所の区単位に件数を数えたデータ

なのでExcel等で読み込み加工する。


5 ● j_kimi
●20ポイント

こんな感じ?

http://td200wr.zapto.org/html/work/test07.cgi

貼り付けて変換押してください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ