*日本語テキスト処理のためのPC基礎講座 ~言語処理やプログラミング以前の基礎知識 ------ #contents *2018/06/26 コマンドラインツール **GUIとCUI -コマンドプロンプト(cmd.exe) -Bash (Linux) ***Bash on Ubuntu on Windows -WindowsでBashを使えるようにするには -http://www.atmarkit.co.jp/ait/articles/1608/08/news039.html コマンドプロンプトでlinuxのツールを使うには -http://www.atmarkit.co.jp/ait/articles/1805/24/news022.html **ディレクトリとファイル操作 **バッチ処理 -シェルスクリプト/バッチファイル **テキスト処理ツール -head -tail -grep -wc -cat -join -sort -uniq -https://qiita.com/kenju/items/5777322e485a30aa6269 -https://orangain.hatenablog.com/entry/20100916/1284631280 **入出力とパイプ **XMLツール -xmllint (libxml2) --XML文書の検証、XPath検索 -xsltproc --XSLT ※要確認:サクラエディタの改行の取り扱い *2018/05/29 XML -[[XML>https://ja.wikipedia.org/wiki/Extensible_Markup_Language]] Extensible Markup Language(拡張可能なマーク付け言語) -参考リンク:[[たのしいXML>http://www6.airnet.ne.jp/manyo/xml/index.html]] **マークアップ言語とXML -[[HTML>https://ja.wikipedia.org/wiki/HyperText_Markup_Language]]とXML --HTML 言わずと知れたWebページ記述言語 --[[XHTML>https://ja.wikipedia.org/wiki/Extensible_HyperText_Markup_Language]] XML化したHTML --[[SGML>https://ja.wikipedia.org/wiki/Standard_Generalized_Markup_Language]] HTMLのもと、XMLの先祖 -HTMLとXMLの違い --HTMLは使えるタグやその意味(タグセット)があらかじめW3Cによって規定されているのに対し、XMLはタグの作り方・使い方などが定義されているだけで利用者が自分でタグセットを決めて使える --業界団体などであらかじめタグセットを規定したものもあり、それに則ってつかう方法も [[MusicXML>https://en.wikipedia.org/wiki/MusicXML]], [[MathML>https://en.wikipedia.org/wiki/MathML]], [[防災情報XML>http://xml.kishou.go.jp/]] ([[東京都の天気>https://www.drk7.jp/weather/xml/13.xml]])etc. --人間にも機械にも可読なデータを目指す -(参考)HTMLの構造と見た目の分離 --XHTMLは文書の構造(意味)記述に。見た目(スタイル)は[[CSS>https://ja.wikipedia.org/wiki/Cascading_Style_Sheets]]で。 --CSSはXMLのスタイル記述にも使われる -(参考)軽量マークアップ言語 人間が直接記述するのがたいへんなので、簡単な入力形式を変換 --[[Wiki>https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%AD]]((Wikipediaのことではない。Wikipediaがこの形式を採用している)) --Markdown -[[青空文庫形式>https://www.aozora.gr.jp/KOSAKU/txt_chu_kigo.html]] **XMLの基本 -タグ、要素、属性、属性値 --開始タグ <tag>、終了タグ </tag> --<タグ名 属性="属性値">テキスト<子要素/></タグ名> 例: <info date="2018/05/30"> <weather>くもりのち雨</weather> <img>http://www.drk7.jp/MT/images/MTWeather/214.gif</img> <weather_detail>東の風 のち 北東の風 くもり 昼前 から 雨</weather_detail> <wave>波 1.5メートル のち 2メートル</wave> <temperature unit="摂氏"> <range centigrade="max">23</range> <range centigrade="min">19</range> </temperature> <rainfallchance unit="%"> <period hour="00-06">20</period> <period hour="06-12">50</period> <period hour="12-18">70</period> <period hour="18-24">70</period> </rainfallchance> </info> -空要素 --<br/>と<br></br>はXMLとして''等価'' ---テキストデータとしてももちろん別のものだが、XMLを解釈するXMLアプリケーションに於いては完全に同じものとして扱われる -ルート要素 --XML宣言 <?xml version="1.0" encoding="Shift_JIS" ?> --encoding宣言 --XML宣言の省略 ---UTF-8, UTF-16で書かれている場合はXML宣言を省略できる -[[文字参照>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7]] <, >, & ---XMLのタグ等の記述に必要となる記号(<>&)のエスケープシーケンス 曽 🍺 ---文字をunicodeの文字コード番号で参照できる(曽・🍺) &#xは16進数記述 --[[ホワイトスペース>https://en.wikipedia.org/wiki/Whitespace_character#Markup_languages]] ---扱われ方に[[要注意>http://www.atmarkit.co.jp/ait/articles/0102/28/news001.html]] **(演習)テキストファイルをXML文書にしてみる -[[soseki2.zip>https://www.dropbox.com/s/gw1j25svf2s9tki/soseki2.zip?dl=1]] **[[XPath>https://ja.wikipedia.org/wiki/XML_Path_Language]] -ノード(node)と軸(Axis) --省略記法 -述語(predicate) -(参考) http://gogodiet.net/z/xml/7.htm -(参考) http://qiita.com/merrill/items/aa612e6e865c1701f43b **[[XSLT>https://ja.wikipedia.org/wiki/XSL_Transformations]] -HTMLへの変換 -[[ひまわり>http://www2.ninjal.ac.jp/lrc/index.php?%C1%B4%CA%B8%B8%A1%BA%F7%A5%B7%A5%B9%A5%C6%A5%E0%A1%D8%A4%D2%A4%DE%A4%EF%A4%EA%A1%D9]]用XSLT -(参考) http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt00.html **XMLの文書型定義と検証 -XML文書の検証(validation) -Well-formed(整形式) -Valid(妥当) --DTD --XMLスキーマ(xsd) --RELAX NG **Oxygen -XPathによる検索((なぜかXPath2.0を選ばないと検索結果が返らなかった)) -スキーマの自動生成 *2018/05/08 Excel **基本 -テキストデータとExcel --TXT, CSV, TSV --xls, xlsx -並べ替えとフィルタ --並べ替え(sort) --テキストフィルタ(≒grep) --重複の削除(uniq) **ピボットテーブル -BCCWJ中納言を例に --サンプルデータ //--https://www.ogiso.net/wiki/index.php?plugin=attach&pcmd=open&file=kwic-2500406.csv&refer=%C6%FC%CB%DC%B8%EC%A5%C6%A5%AD%A5%B9%A5%C8%BD%E8%CD%FD%A4%CE%A4%BF%A4%E1%A4%CEPC%B4%F0%C1%C3%B9%D6%BA%C22018 **文字列関数 -[[授業資料/EXCELの文字列関数]] **VLOOKUP -[[授業資料/VLOOKUP関数]] **ネ申Excel問題 -データ処理に適した表のデザインについて --https://oku.edu.mie-u.ac.jp/~okumura/SSS2013slide.pdf --参考リンク http://honeshabri.hatenablog.com/entry/vlookup *2018/04/17 テキストエディタと正規表現 **準備 ***サンプルデータ 下記のデータ(青空文庫の夏目漱石作品を整形したもの)をダウンロードし、デスクトップに展開(解凍)してください。「なつめそうせき(夏目漱石)」というフォルダができます。 -[[soseki2.zip>https://www.dropbox.com/s/gw1j25svf2s9tki/soseki2.zip?dl=1]] ***エディタ 正規表現対応のテキストエディタがない人は下記からサクラエディタ(V2)をインストールしてください。 -http://sakura-editor.sourceforge.net/download.html **なぜテキストデータか -[[授業資料/テキストデータとは]] -[[授業資料/テキストエディタ]] **[[テキストエディタ>https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF]]の基本 -検索・置換、grep・タグジャンプ --検索で初出行を調べる ---論理行番号 ---次を検索/前を検索 --置換で用例数を数える ---元に戻す・やり直し --grepで用例リストを作る --タグジャンプで文脈を確認する --フォルダ内のgrep -ショートカットキー --[[授業資料/覚えておきたいショートカットキー]] ***利用例 +動詞「日本語」の用例をgrep +grep結果を置換して表形式にする --[[CSVファイル>https://ja.wikipedia.org/wiki/Comma-Separated_Values]] **[[正規表現>https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE]] -特殊な記号文字(メタ文字)を使って文字列のパターンを表現する --特殊な記号文字はすべて半角 -エディタでは置換・検索・grepで利用できる(エディタ以外にもさまざまなアプリケ-ションやコンピュータ言語で利用されている) --正規表現を使った置換により、プログラミングなしでもかなりの程度まで、テキストの整形・形式変換・データ抽出・チェックなどができる ***基本的な正規表現 -[[授業資料/正規表現]] --文字クラス [ ] --文字クラスの否定(補集合)[^ ] --繰り返し(最長一致) ? + * ※ --繰り返し最短一致 +? *? ※ --n回以上m回以下のくり返し {n,m} ※ --グループ化 () --OR(論理和) | --文頭 ^、文末 $ --改行\n・タブ文字\tとエスケープシーケンス\ -正規表現可視化ツール https://regexper.com/ --例:https://regexper.com/#%5B%E6%9A%AE%E3%81%8F%5D%E3%82%89%3F%E3%81%97%E3%81%AE%E6%89%8B%5B%E5%B8%96%E5%B8%B3%5D ***タグ付き正規表現 走[らりるれろ] でgrepした結果を置換するにはどうしたらいいか -[[タグ付き正規表現>授業資料/タグつき正規表現]] --カッコ(半角丸カッコ)と\1(\2,\3…)を使う ---タグ付けへの応用例 (「.+?」) -> <quote>\1</quote> ※ --後方参照 ---マッチした部分を検索語の中で再利用する 例: (..)\1 -参考:[[授業資料/grepと置換でKWICを作る]] ***最長一致の原則(greedy matching) -正規表現は通常、パターンが一致する最も長い範囲にマッチする --例:''あ+'' → ''【\1】'' ---ああああああああ → 【ああああああああ】 そのせいで… --例:''「(.+)」'' → ''【\1】'' ---「こんにちは」「さようなら」 → 【こんにちは」「さようなら】 --括弧の組ごとに置換するためには''「([^」]+)」'' → ''【\1】'' のように書かなければならない ---「こんにちは」「さようなら」 → 【こんにちは】【さようなら】 -よりかんたんに指定するには(最短一致,ものぐさ指定) --''「(.+?)」「(.*?)」''のように、繰り返し指定の+*の後に「?」をつける **課題 **(検索・置換) +夏目漱石『坊ちゃん』における「山嵐」の初出行は何行目か。 +夏目漱石『坊ちゃん』における「赤シャツ」の用例数は何例か。 +サンプルデータ(夏目漱石の青空文庫全作品)における「言葉」の用例数は何例か。 **(正規表現) +次の語を検索する場合に用いる検索文字列をできるだけ簡潔な正規表現で記しなさい。 ++形容詞「暗い」(ただし、漢字「暗」で表記されるもの) ++動詞「蹴る」(漢字「蹴」またはひらがなで表記されるもの) ++「言葉」が2回出てくる行 ++「「」で始まり、「」」が現れない行 ++「○る○る」(「ぐるぐる」など) +次の問いに答えよ。 ++サンプルデータ(夏目漱石の青空文庫全作品)における動詞「笑う」および名詞「笑い」の用例数は計何例か ++サンプルデータ(夏目漱石の青空文庫全作品)における形容詞「赤い」の用例数は何例か **(正規表現によるテキスト整形) 次のデータ(「こころ」Wordファイル)をダウンロードして下記の課題を行え。 -[[kokoro.docx>https://www.dropbox.com/s/3y58lkhpgfy06ow/kokoro.docx?dl=1]] ただし、データ中に現れる記号は下記のようになっている(青空文庫形式)。 《》:ルビ (例)私《わたくし》は |:ルビの付く文字列の始まりを特定する記号 (例)先生一人|麦藁帽《むぎわらぼう》を [#]:入力者注 主に外字の説明や、傍点の位置の指定 (数字は、JIS X 0213の面区点番号、または底本のページと行数) (例)※[#「てへん+劣」、第3水準1-84-77] +注と振り仮名を削除し1文1行となる形式のテキストファイルを作成せよ。 +注を削除し、振り仮名を本文と入れ換えたテキストファイルを作成せよ。(例:「私《わたくし》は」→「わたくしは」) +1.で作成したデータから、次のような「それぎり」「それきり」のKWIC用例集のExcelデータを作成せよ。 ,kokoro.txt,225,先生も,それぎり,何ともいわなくなった。 ,kokoro.txt,244,私もその話は,それぎり,にして切り上げた。 **見た目と論理構造の話 ***どっちが「きれいなデータ」だろうか? 太陽コーパス 近代語 書き言葉 日本語話し言葉コーパス 現代語 話し言葉 現代日本語書き言葉均衡コーパス 現代語 書き言葉 日本語歴史コーパス 古代~近代語 書き言葉 太陽コーパス 近代語 書き言葉 日本語話し言葉コーパス 現代語 話し言葉 現代日本語書き言葉均衡コーパス 現代語 書き言葉 日本語歴史コーパス 古代~近代語 書き言葉 ***ちゃんとしたデータを作るために -ちゃんとしたデータ=機械処理に適したデータとして大事なのは構造。見た目は気にしないで後回しでよい。後でどうにでもなる。 -テキスト、スプレッドシート(Excel)、一般の文書(Word)、マークアップ(XML)などのデータ設計あらゆることに共通した課題 ------ **関連キーワード・リンク集 -[[テキストファイル>https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB]] -拡張子 txt,csv,tsv,htm,xml -[[文字コード>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89]]=符号化文字集合 --[[テレタイプ>https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%BF%E3%82%A4%E3%83%97%E7%AB%AF%E6%9C%AB]]の話から ---[[制御記号>https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%96%87%E5%AD%97]] ---[[改行コード>https://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89]] CR, LF, CRLF --[[文字集合(character set)>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E9%9B%86%E5%90%88]] --[[符号化方式(character encoding)>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E7%AC%A6%E5%8F%B7%E5%8C%96%E6%96%B9%E5%BC%8F]] --やや古いがよく使われる文字コード:[[Shift_JIS>https://ja.wikipedia.org/wiki/Shift_JIS]], [[CP932>https://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932]], [[EUC-JP>https://ja.wikipedia.org/wiki/EUC-JP]] --[[Unicode>https://ja.wikipedia.org/wiki/Unicode]]の符号化方式[[UTF-8>https://ja.wikipedia.org/wiki/UTF-8]], [[UTF-16>https://ja.wikipedia.org/wiki/UTF-16]] ---(LE(Little Endian), BE(Big Endian)) ---[[BOM(Byte Order Mark)>https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF]] ---[[BMP(基本多言語面)>https://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2]]とサロゲートペア --(参考) http://www.kanzaki.com/docs/jcode.html --(参考) https://codezine.jp/article/detail/1592 ※