#author("2023-07-19T01:45:11+00:00","default:ogiwiki","ogiwiki") #author("2023-07-19T01:45:38+00:00","default:ogiwiki","ogiwiki") [[日本語テキスト処理基礎講座2023]] *①テキストエディタと正規表現 [#ib1d732d] **テキストファイルとテキストエディタ [#d348fb77] ***準備:VS Codeのインストールと設定 [#n73b9aa1] +VS codeのインストール --https://code.visualstudio.com/ +拡張機能 Japanese Language Packの追加 --参考:https://web.yokkaichi-u.ac.jp/yucc/archives/1542 +ファイルオープン時にエンコーディングを自動判別するよう設定 --参考:https://www.javadrive.jp/vscode/setting/index3.html **テキストデータと文字コード [#v3cba73c] ***テキストデータ [#we791f5c] -すべての基本となる文字が並ぶだけのデータ -[[授業資料/テキストデータとは]] --バイナリデータとテキストデータ --テキストデータとテキストファイル -テキストデータの種類:TXT,CSV,HTM… --ファイルの種類と拡張子 参考:[[拡張子辞典>http://www.7key.jp/data/ext_new/]] --[[拡張子(wikipedia)>http://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E5%AD%90]] -[[授業資料/テキストエディタ]] -[[授業資料/文字コード関連リンク]] -[[授業資料/テキストデータ紹介]] **テキストエディタを使ってみる [#uafc54a2] -サンプルテキスト(青空文庫の夏目漱石「こころ」) --練習用サンプルデータ[[kokoto.txt>https://www.dropbox.com/s/r89ahi6goxy5a2c/kokoro.txt?dl=1]] +ダウンロードしてVS codeで開き、UTF-8で保存しなおす +検索 +置換 +Grep(マッチする行の抽出):VS codeではアクティビティーバーの「検索」アイコンからファイルを検索 -サンプルテキスト2(青空文庫の夏目漱石作品) --[[soseki2.zip>https://www.dropbox.com/s/gw1j25svf2s9tki/soseki2.zip?dl=1]] -ディレクトリのgrep ***ショートカットキー [#da449f25] -Windowsの主なショートカットキー[[授業資料/覚えておきたいショートカットキー]] --Macのショートカットキー https://support.apple.com/ja-jp/HT201236 ***正規表現とは [#d216d4e0] -''正規表現'' [[>用語>http://e-words.jp/w/E6ADA3E8A68FE8A1A8E78FBE.html]] --文字を表すための特殊な文字(メタ文字)を使って文字列のパターンを表現する --テキストエディタでは置換・検索・grepで利用できる (エディタ以外にもさまざまなアプリケ-ションやコンピュータ言語で利用されている) --特殊な文字(メタ文字)はすべて半角 //--特殊な文字そのものを表す場合には\でエスケープする(特殊な意味を打ち消す) 例:1\+2 ***正規表現のいろいろ [#q514651f] -[[授業資料/正規表現]] --文字クラス [ ] --文字クラスの否定(補集合)[^ ] --繰り返し ? + * --グループ化 () --or(論理和) | --文頭 ^、文末 $ ***正規表現の応用 [#c7a3ea2d] -カタカナ語 --カタカナ(外来語)の形容動詞語幹 -送りがなの揺れ(行う/行なう) -会話文中("「"で始まる文中)の用例を検索する -同一文中での共起 --全然~ない。 --もし~なら(ば) ***タグ付き正規表現(キャプチャ) [#z9ef50e5] -走[らりるれろ] でgrepした結果を置換するにはどうしたらいいか --次のように置換するととんでもないことに… ---検索文字列:走[らりるれろっ] ---置換文字列:★走[らりるれろっ] -タグ付き正規表現:カッコ(半角丸カッコ)と1($2,$3…)を使う -[[授業資料/タグつき正規表現]] ***最長一致の原則(greedy matching) [#y047e9bd] -正規表現は、パターンが一致する最も長い範囲にマッチする --例:''あ+'' → ''【$1】'' ---ああああああああ → 【ああああああああ】 そのせいで… --例:''「(.+)」'' → ''【$1】'' ---「こんにちは」「さようなら」 → 【こんにちは」「さようなら】 --括弧の組ごとに置換するためには''「([^」]+)」'' → ''【$1】'' のように書かなければならない ---「こんにちは」「さようなら」 → 【こんにちは】【さようなら】 -よりかんたんに指定するには(最短一致,ものぐさ指定) --''「(.+?)」「(.*?)」''のように、繰り返し指定の+や*の後に?をつけて+?、*?とする --''「(.+?)」「(.*?)」''のように、繰り返し指定の+や*の後に?をつけて「+?」「*?」とする ***検索文字列の中での後方参照 [#ra28185d] -検索語の中で\1を使う --(..)\1 「ころころ」「毎日毎日」など二文字の繰り返しにマッチ --(.ろ)\1 「ころころ」「どろどろ」「へろへろ」などにマッチ --(..)\1\1 --(...)\1 ***正規表現に関する参考資料 [#w86de08b] - -正規表現に関する本 [[amazonで検索>https://www.amazon.co.jp/s?k=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE]] ***ゲームの紹介 [#k337bfef] -正規表現を学ぶ狩りに出ようRegex Hunting --https://www.regex-hunting.com/ -【課題3】VS Codeで正規表現を使ってサンプルテキストのふりがなタグを置換で削除 //---|?(\P{sc=Han}+)《(.+?)》