Presentation is loading. Please wait.

Presentation is loading. Please wait.

文字列処理: Perl, Java 等 徃住研究室 D2 村井 源 COE21-LKR 認知的知識資源論.

Similar presentations


Presentation on theme: "文字列処理: Perl, Java 等 徃住研究室 D2 村井 源 COE21-LKR 認知的知識資源論."— Presentation transcript:

1 文字列処理: Perl, Java 等 徃住研究室 D2 村井 源 COE21-LKR 認知的知識資源論

2 講義の流れ テキストの階層構造 文字列と処理 正規表現 Perl, Java での正規表現処理 Chasen による形態素解析

3 テキストの階層構造 文字:例 あ, 山,F 文字列:例 今日, なごむ,computer 命題:例 狭い部屋、天気は晴れ 文: “ 。 ” で区切られる単位 文脈:文の連続

4 文字列と単語 単語は文法上の意味的な区切り – 名詞・動詞・形容詞・接続詞などの品詞で 分解することを形態素解析などと呼ぶ 文字列は必ずしも単語でなくてよい ただし意味処理を行う場合には実際に は単語や文節(単語の連続)レベルで の処理が行われることが多い

5 文字列とは? 基本的には文字が並んだデータ 具体的にどのような形式で文字列を情 報として持っているかは様々に異なる – 文字コードの違い( SJIS, EUC, Unicode…) – データ形式の違い( Text, HTML, Word…) – オブジェクト指向( Java の String など)

6 文字列の処理 大量テキストデータを効率よく処理し たい –Ex. 東工大の web から「認知科学」に関す るテキストを全部集めたい テキストデータに複雑な処理を施した い –Ex. 夏目漱石の全集から人の感情に関する 形容詞だけを抜き出して使用頻度を調べた い 人手ですると、とっても大変 …… コンピュータで自動化したい

7 文字列処理の基本 検索 – ある特定の条件に適合する文字列を探し出 す 置換 – ある特定の条件に適合する文字列を処理し て別の特定の文字列に置き換える

8 通常の検索・置換 例えば: – テキストから「図2-1」という文字列を 探し出してそれを全部「図3-1」という 文字列に置き換えたい – 例えば Word だと 例えば Word だと

9 通常の検索・置換の問題 図2-1を図3-1に自動的に置き換 える場合に、図2-11や図2-12 などの意図した以外の箇所も同時に置 き換えてしまう 逆に図2 - 1は置換されずに残る 検索・置換の条件を文字列そのもので はなく、もっと自由に設定したい

10 正規表現 ( Regular Expression ) 文字列の検索・置換に特化した表現形 式 多少の方言はあるものの大体統一され ている PERL, JAVA, Ruby, PHP など様々なコン ピュータ言語が対応している

11 正規表現の基本ルール A A という文字 ABC ABC という文字列 A+ 1 個以上連続した A(A, AA, AAA,...) A* 0 個以上連続した A(, A, AA, AAA,...). 1 つの任意文字 (A, B, C,...) (\n を除く ) ? 0 または 1 つの任意文字 (, A, B, C,...) ^ABC ABC で始まっていたら ABC$ ABC で終わっていたら [ABC] A,B,C のいずれか 1 文字 [A-Z] A ~ Z までのいずれか 1 文字 [A-Za-z0-9] A ~ Z, a ~ z, 0-9 までのいずれか 1 文字 [^ABC] A,B,C 以外の文字 [^A-Z] A ~ Z 以外の文字 A|B|C A または B または C とほほの WWW 入門より引用

12 正規表現の例題として 「図2-1」が含まれるテキストを検 索して「図3-1」に置換したい しかし、「図2-12」などは外した い 逆に「図2 - 1」「図2・1」などの表 記ミスは含めたい

13 例題の考え方 数字の全角と半角は両方入れたいので → [2 2 ] と [1 1 ] 「図2」のあとの記号は、-、 - 、・全部許可 → [ - \- ・ ] ( 「 - 」のような正規表現上で特別な役割を 与えられている記号は誤解されないために前 に「 \ 」をつけて「 \- 」 と表現する) 「図2-1」の後に数字が来るのは避けたい → 最後に [^0-9 0 - 9 ] をつける

14 例題の答え 図 [2 2 ][ - \- ・ ][1 1 ][^0-9 0 - 9 ]

15 正規表現だけで大丈夫? 正規表現は強力な文字列処理ツールだ が基本的には一つの検索・置換だけの 表現 条件分岐や繰り返し処理などが含まれ る複雑な文字列処理を行うためにはこ れらの正規表現を組み合わせて使う そこで正規表現を使えるプログラム言 語が必要になってくる

16 Perl ラリー・ウォールによって作られたインタプリタ方 式のプログラミング言語 多様な表現が可能で他の言語に比べて、比較的習得 が容易であるとされる。 強力な文字列演算機能 - 拡張された正規表現構文を サポート CGI やシステム管理、その他の簡単なプログラムを書 くのに広く用いられている GPL ライセンスでも提供されているので無料で利用 可能 ( Wikipedia より引 用)

17 Perl の入手とインストール Windows/Mac の場合 http://www.activestate.com/ から Perl を選 択して Active Perl の最新版を入手し指示 に従ってインストール http://www.activestate.com/ Linux の場合 通常最初からインストールされていま す 各 Distribution のマニュアル参照

18 Perl の日本語対応 日本語文字コードにきちんと対応させ るためには、 Jperl が必要( Windows の場 合) Perl をインストールした後で、 VECTOR の http://www.vector.co.jp/soft/dl/win95/util/s e043908.html からダウンロード http://www.vector.co.jp/soft/dl/win95/util/s e043908.html

19 Perl の使い方( Windows ) テキストエディタを使って Perl のプログ ラムを書き、「 ○○.pl 」のような名前で 保存 「コマンドプロンプト」を実行し、先 に作ったプログラムをおいてあるフォ ルダに移動 >perl ○○.pl と打ち込んで実行

20 変数と文字列 変数とは値を入れたり出したりできる 入れ物のような存在 変数には数字・文字列・配列・ハッ シュなどさまざまな種類がある 変数名は前に「$」がつき、そうでな い文字列は “” で囲まれる

21 ファイルの操作 読み出し用にファイルを開く –open( ファイル変数名, “ ファイルの名前 ”); 書き込み用にファイルを開く –open( ファイル変数名, “> ファイルの名前 ”); ファイルからデータを読み出す – ファイルにデータを書き込む –print( ファイル変数名 “ 書き込む文字列 ”); ファイルを閉じる –close( ファイル変数名 );

22 Perl で正規表現・置換 Perl での正規検索(マッチング) – 変数名 = ~ / 正規表現 /; Perl での正規置換 – 変数名 = ~ s/ 正規表現 / 置換後文字列 /; – 繰り返しする場合には、 s/ 正規表現 / 置換後文字列 /g;

23 例題の Perl プログラム例 open(IN, "sample1.txt"); open(OUT, "> sample1_result.txt"); while($_ = ){ $_ =~ s/ 図 [ 2 2][ ー- ―\- ・ ][ 1 1]([^0-9 0 - 9 ])/ 図3 \- 1 \1/g; print(OUT $_); } close(OUT); close(IN);

24 例題2 HTML ファイルからテキスト部分だけ を抜き出したい 、 は改行コードに置き換えたい

25 例題2のプログラム例 open(IN, "sample2.html"); open(OUT, "> sample2_result.txt"); $buffer = ""; while($_ = ){ $buffer.= $_; } $buffer =~ s/\n//g; $buffer =~ s/ /\n/g; $buffer =~ s/ ]+>//g; print(OUT $buffer); close(OUT); close(IN);

26 Perl の弱い点 環境が OS により変わる 文法がかなり自由で書きやすいがその 分あとで読みにくく、再利用や共同開 発にはあまり向かない インタープリタなので実行が遅い オブジェクト指向が強くないので大規 模なプログラムには向かない

27 Java 基本的にプラットフォーム非依存なの で汎用性が高い Web アプリケーション開発に適してい る オブジェクト指向のため大規模プログ ラムの開発や古い資源の活用に適して いる – 逆に言うと、オブジェクト指向のありがた みがあまりない小規模プログラムには向か ない

28 JAVA での正規表現 java.util.regex.* を import する 最初に正規表現の Pattern クラスを作り、 さらにそれから検索置換用の Matcher ク ラスをつくっておくか、 String のクラス で直接 replaceAll 関数などを使う 正規検索・正規置換をそれぞれ正規表 現クラスのメソッドとして実行できる

29 単語処理 文字列を単語レベルで分解して処理す ることで意味的な処理につなげること が容易になる 英語などであれば、単語間に空白があ るので自明だが、日本語の場合には最 初に単語の切れ目を探す必要がある

30 形態素解析 自然言語で書かれた文を形態素 (言語 で意味を持つ最小単位) の列に分割し て、品詞 を見分ける作業 参照する情報源として対象言語の文法 の知識と辞書 ( 品詞等の情報付きの単語 リスト ) を用いるものが多い ( Wikipedia より)

31 日本語での形態素解析 無料で利用できるものとしては、 ChaSen (茶筌 :奈良先端科学技術大学 院大学松本研究室 で開発)が有名 商用でも検索エンジン等のために形態 素解析エンジンが開発されている

32 ChaSen http://chasen.naist.jp/hiki/ChaSen/ 参照http://chasen.naist.jp/hiki/ChaSen/

33 参考 URL とほほの WWW 入門 http://www.tohoho-web.com/www.htm http://www.tohoho-web.com/www.htm Wikipedia http://ja.wikipedia.org/ http://ja.wikipedia.org/


Download ppt "文字列処理: Perl, Java 等 徃住研究室 D2 村井 源 COE21-LKR 認知的知識資源論."

Similar presentations


Ads by Google