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

Slides:



Advertisements
Similar presentations
ウィキについて 1 1040431 1 1040431 植木貴宏 植木貴宏. ウィキとは? ウェブブラウザを利用して Web サーバ 上のハイパーテキスト文書を書き換え るシステムの一種。 ウェブブラウザを利用して Web サーバ 上のハイパーテキスト文書を書き換え るシステムの一種。 Wiki とは、ハワイ語で「速い」を意味.
Advertisements

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
1 検索 ● 検索: 特定の文字列を探す ⓪検索を行う範囲を限定するときは、範囲選択をする。 ① 「ホーム」タブ⇒「編集」⇒「検索」タブとクリックする。 ②「検索する文字列」欄に検索したい文字を入力する。 ③「次を検索する」をクリックする。 ③ ‘ 「検索された項目の強調表示」⇒「すべて強調表示」とクリックすると、
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
情報システムプロジェクト I 第2回 FileScanner.java ~ファイル入力、文字切り出し機能を持つ プログラムの作成~
T2V 技術 Web 製作ラボ 3/ hayashiLabo 2. T2V 技術 PC 操作 念のため・・・
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
大規模コーパスから獲得した 名詞の出現パターンを用いた 事態名詞の項構造解析
情報処理3 アプリケーション プログラミング 今井孝明.
プログラミング言語ADP 大藤雄久.
自然言語処理:第3回 1.前回の確認 2.構文解析 3.格文法.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
JavaScript プログラミング入門 2006/11/10 神津.
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2011年10月17日
Java I 第2回 (4/18)
1/16 卒業研究中間発表 D2553  佐藤佳代子.
Excel による データベース入門 Ver /9.
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
JavaによるCAI学習ソフトウェアの開発
C#によるWindowsFormApplication入門
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
テキストマイニング, データマイニングと 社会活動のトレース
コーパス言語学実践 2006年度2学期 第5回.
1.自然言語処理システム 2.単語と形態素 3.文節と係り受け
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
4Y-4 印象に残りやすい日本語パスワードの合成法
Debian GNU/Linux ー Linuxインストールに必要な基礎知識 ー 三上 彩 鈴木 倫太郎
(original Takagi & Saito, 2007)
形態素解析および係り受け解析・主語を判別
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
コンパイラ 2012年10月15日
Cygwin の install.
データベース設計 第9回 Webインタフェースの作成(1)
基幹理工学研究科 情報理工学専攻 後藤研究室 修士1年 魏 元
日本語解析済みコーパス管理ツール 「茶器」
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第8章 Web技術とセキュリティ   岡本 好未.
自然言語処理及び実習 第11回 形態素解析.
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
プログラミング言語論 第3回 BNF記法について(演習付き)
プログラミング言語入門.
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
7-0.SWORD Client for WEKO インストールマニュアル Version 2.2
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
コンピュータ プレゼンテーション.
テキストマイニング, データマイニングと 社会活動のトレース
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報コミュニケーション入門b 第11回 Web入門(2)
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
オブジェクト プログラミング 第2回 プログラムの基本.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
構造的類似性を持つ半構造化文書における頻度分析
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
第6回放送授業.
コンパイラ 2012年10月11日
識別子の読解を目的とした名詞辞書の作成方法の一試案
C#プログラミング実習 第1回.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

正規表現の基本ルール 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 入門より引用

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

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

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

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

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

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

Perl の日本語対応 日本語文字コードにきちんと対応させ るためには、 Jperl が必要( Windows の場 合) Perl をインストールした後で、 VECTOR の e html からダウンロード e html

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

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

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

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

例題の 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);

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

例題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);

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

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

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

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

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

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

ChaSen 参照

参考 URL とほほの WWW 入門 Wikipedia