日本語テキスト処理のためのPC基礎講座
~言語処理やプログラミング以前の基礎知識
2018/07/03 関係データベースとSQL(1)
- 当面、既存のデータベースを使うことだけを説明します
関係データベース(リレーショナルデータベース:RDB)
- あらゆるデータを表の組み合わせで表現する
- データを取り出すのが速い、データが壊れない、同時に処理できる
準備
- Microsoft SQL Server Management Studio(SSMS)のインストール
用語
テーブル |
| 列名1 | 列名2 | 列名3 |
レコード1 | | | |
レコード2 | | | |
- クエリ(問い合わせ):データベースに対するさまざまな処理コマンド
- ビュー:(複数の)表の列を組み合わせて作る仮想的な表
データベース問い合わせ言語
SELECT文
とりあえずこれだけ!覚える
- SELECT 列名,列名2... FROM テーブル
- 短単位表から語彙素,語彙素読みの列を(全部)出力
SELECT 語彙素,語彙素読み FROM 短単位
- 短単位表から語彙素,語彙素読みの列を最初の100行出力
SELECT TOP 100 語彙素,語彙素読み FROM 短単位
- WHERE条件句
- SELECT 列名,列名2... FROM テーブル WHERE 列名='hoge'
- LIKE 演算子とワイルドカード
- "LIKE"は"="のようなものだが、ワイルドカードを含む完全一致でない場合に使う
- %:任意の文字列(文字なしでも可)
- _:任意の一文字
- 短単位表から品詞が形容詞ではじまるものの語彙素,語彙素読みの列を出力
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形容詞%'
- 短単位表から品詞が接続詞で語彙素読みがカ行で始まるものの語彙素,語彙素読みの列を出力
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形容詞%' AND 語彙素読み LIKE '[カ-コ]%'
集計
- グループ化 GROUP BY
- SELECT 列名,列名2... FROM テーブル GROUP BY 列名
- count 集計関数
- 集計した数を返す
- 短単位表から品詞が接続詞であるもののを同じ語彙素,語彙素読みのものを一行にまとめて語彙素,語彙素読みの列と集計した語数を出力
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE 品詞='接続詞' GROUP BY 語彙素,語彙素読み
- 短単位表から品詞が接続詞であるもののを同じ語彙素,語彙素読みのものを一行にまとめて語彙素,語彙素読みの列と集計した語数を語彙素読み(アイウエオ)順で出力
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE 品詞='接続詞' GROUP BY 語彙素,語彙素読み ORDER BY 語彙素読み
- 短単位表から品詞が接続詞であるもののを同じ語彙素,語彙素読みのものを一行にまとめて語彙素,語彙素読みの列と集計した語数を語数の多い順で出力
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE 品詞='接続詞' GROUP BY 語彙素,語彙素読み ORDER BY count(語彙素) DESC
SQLの書式など(SQL Server)
- コマンドと記号は全て半角
- コマンドは大文字小文字の区別は(原則として)ない
- コマンドの切れ目のスペースやタブは余計に入っていて、改行を入れてもいい
- 文字列を値として指定するときは'値'のようにシングルクオーテーションで囲む
- --でコメントアウト(実行対象外になる)。行の途中からでも可
表の結合
- 内部結合 INNER JOIN
- 外部結合 LEFT (OUTER) JOIN
コーパスデータを使った実習
コーパスと辞書を繋ぐ
辞書の階層化された見出し表を扱う
連続する語の取り出し
2018/06/26 コマンドラインツール
GUIとCUI
- コマンドプロンプト(cmd.exe) / Windowsの標準CLI
- Bash / Linuxで広く使われているCLIシェル
Bash on Ubuntu on Windows
ディレクトリとファイル操作
- ls (dir) ファイル一覧
- cd ディレクトリ移動 (..で一つ上、Linuxは/、Windowsは\で階層を区切る)
- cp (copy) ファイルコピー
- rm (del) ファイル削除
- mv (move) ファイル移動
- rename (ren / rename) ファイル名変更
- mkdir (同じ) ディレクトリ作成
- rmdir (同じ) ディレクトリ削除
- less (more) ファイル表示(ページャー) qで終了
※括弧内はwindowsの同等コマンド。オプションや挙動は異なる
覚えておくべきこと
- 使い方は ls --help ( dir /?) などとすれば表示される
- 過去に実行したコマンドは↑ででてくる
- Windowsで扱うテキストはShiftJISに、Linuxで扱うときはUTF-8に統一しておくのが無難
- Windowsは通常大文字小文字を区別しないが、Linuxでは区別される (case sensitive)
練習
- 上記のデータを使って国旗のファイル名を日本語名に変更したものを作成しなさい
- 「FIFA2018WC」ディレクトリを作成してワールドカップ出場国の国旗だけをコピーしなさい
主なテキスト処理ツール(Linux)
- head ファイルの頭を表示
- tail ファイルの尻尾を表示
- grep あのgrep
- wc 文字(行)カウント
- cat ファイルを縦に結合
- join ファイルを横に結合
入出力とパイプ
- < ファイルから入力
- > ファイルに出力
- >> ファイルに追記
バッチ処理
XMLツール
- xmllint (libxml2)
- xsltproc
apt-get でインストールできる
sudo apt-get install libxml2
形態素解析(mecab)
mecab file | less
mecab file > 保存先ファイル
- unidicは別途ダウンロードしてしかるべき場所に置いて、解析時に辞書指定
mecab -d unidicディレクトリ file | less
※前回補足:サクラエディタでの複数行にまたがる置換
→できない
2018/05/29 XML
- XML Extensible Markup Language(拡張可能なマーク付け言語)
マークアップ言語とXML
- HTMLとXML
- HTML 言わずと知れたWebページ記述言語
- XHTML XML化したHTML
- SGML HTMLのもと、XMLの先祖
- HTMLとXMLの違い
- HTMLは使えるタグやその意味(タグセット)があらかじめW3Cによって規定されているのに対し、XMLはタグの作り方・使い方などが定義されているだけで利用者が自分でタグセットを決めて使える
- 業界団体などであらかじめタグセットを規定したものもあり、それに則ってつかう方法も MusicXML, MathML, 防災情報XML (東京都の天気)etc.
- 人間にも機械にも可読なデータを目指す
- (参考)HTMLの構造と見た目の分離
- XHTMLは文書の構造(意味)記述に。見た目(スタイル)はCSSで。
- CSSはXMLのスタイル記述にも使われる
- (参考)軽量マークアップ言語
人間が直接記述するのがたいへんなので、簡単な入力形式を変換
- 青空文庫形式
XMLの基本
- 空要素
- <br/>と<br></br>はXMLとして等価
- テキストデータとしてももちろん別のものだが、XMLを解釈するXMLアプリケーションに於いては完全に同じものとして扱われる
- ルート要素
<, >, &
- XMLのタグ等の記述に必要となる記号(<>&)のエスケープシーケンス
曽 🍺
- 文字をunicodeの文字コード番号で参照できる(曽・🍺) &#xは16進数記述
(演習)テキストファイルをXML文書にしてみる
- ノード(node)と軸(Axis)
- 述語(predicate)
XMLの文書型定義と検証
- XML文書の検証(validation)
- Well-formed(整形式)
- Valid(妥当)
- DTD
- XMLスキーマ(xsd)
- RELAX NG
Oxygen
2018/05/08 Excel
基本
- 並べ替えとフィルタ
- 並べ替え(sort)
- テキストフィルタ(≒grep)
- 重複の削除(uniq)
ピボットテーブル
文字列関数
VLOOKUP
ネ申Excel問題
2018/04/17 テキストエディタと正規表現
準備
サンプルデータ
下記のデータ(青空文庫の夏目漱石作品を整形したもの)をダウンロードし、デスクトップに展開(解凍)してください。「なつめそうせき(夏目漱石)」というフォルダができます。
エディタ
正規表現対応のテキストエディタがない人は下記からサクラエディタ(V2)をインストールしてください。
なぜテキストデータか
- 検索・置換、grep・タグジャンプ
- 検索で初出行を調べる
- 置換で用例数を数える
- grepで用例リストを作る
- タグジャンプで文脈を確認する
- フォルダ内のgrep
利用例
- 動詞「日本語」の用例をgrep
- grep結果を置換して表形式にする
- 特殊な記号文字(メタ文字)を使って文字列のパターンを表現する
- エディタでは置換・検索・grepで利用できる(エディタ以外にもさまざまなアプリケ-ションやコンピュータ言語で利用されている)
- 正規表現を使った置換により、プログラミングなしでもかなりの程度まで、テキストの整形・形式変換・データ抽出・チェックなどができる
基本的な正規表現
- 授業資料/正規表現
- 文字クラス [ ]
- 文字クラスの否定(補集合)[^ ]
- 繰り返し(最長一致) ? + * ※
- 繰り返し最短一致 +? *? ※
- n回以上m回以下のくり返し {n,m} ※
- グループ化 ()
- OR(論理和) |
- 文頭 ^、文末 $
タグ付き正規表現
走[らりるれろ] でgrepした結果を置換するにはどうしたらいいか
- タグ付き正規表現
- カッコ(半角丸カッコ)と\1(\2,\3…)を使う
- タグ付けへの応用例 (「.+?」) -> <quote>\1</quote> ※
- 後方参照
- マッチした部分を検索語の中で再利用する 例: (..)\1
最長一致の原則(greedy matching)
- 正規表現は通常、パターンが一致する最も長い範囲にマッチする
- 例:あ+ → 【\1】
- ああああああああ → 【ああああああああ】
そのせいで…
- 例:「(.+)」 → 【\1】
- 「こんにちは」「さようなら」 → 【こんにちは」「さようなら】
- 括弧の組ごとに置換するためには「([^」]+)」 → 【\1】 のように書かなければならない
- 「こんにちは」「さようなら」 → 【こんにちは】【さようなら】
- よりかんたんに指定するには(最短一致,ものぐさ指定)
- 「(.+?)」「(.*?)」のように、繰り返し指定の+*の後に「?」をつける
課題
(検索・置換)
- 夏目漱石『坊ちゃん』における「山嵐」の初出行は何行目か。
- 夏目漱石『坊ちゃん』における「赤シャツ」の用例数は何例か。
- サンプルデータ(夏目漱石の青空文庫全作品)における「言葉」の用例数は何例か。
(正規表現)
- 次の語を検索する場合に用いる検索文字列をできるだけ簡潔な正規表現で記しなさい。
- 形容詞「暗い」(ただし、漢字「暗」で表記されるもの)
- 動詞「蹴る」(漢字「蹴」またはひらがなで表記されるもの)
- 「言葉」が2回出てくる行
- 「「」で始まり、「」」が現れない行
- 「○る○る」(「ぐるぐる」など)
- 次の問いに答えよ。
- サンプルデータ(夏目漱石の青空文庫全作品)における動詞「笑う」および名詞「笑い」の用例数は計何例か
- サンプルデータ(夏目漱石の青空文庫全作品)における形容詞「赤い」の用例数は何例か
(正規表現によるテキスト整形)
次のデータ(「こころ」Wordファイル)をダウンロードして下記の課題を行え。
ただし、データ中に現れる記号は下記のようになっている(青空文庫形式)。
《》:ルビ
(例)私《わたくし》は
|:ルビの付く文字列の始まりを特定する記号
(例)先生一人|麦藁帽《むぎわらぼう》を
[#]:入力者注 主に外字の説明や、傍点の位置の指定
(数字は、JIS X 0213の面区点番号、または底本のページと行数)
(例)※[#「てへん+劣」、第3水準1-84-77]
- 注と振り仮名を削除し1文1行となる形式のテキストファイルを作成せよ。
- 注を削除し、振り仮名を本文と入れ換えたテキストファイルを作成せよ。(例:「私《わたくし》は」→「わたくしは」)
- 1.で作成したデータから、次のような「それぎり」「それきり」のKWIC用例集のExcelデータを作成せよ。
kokoro.txt | 225 | 先生も | それぎり | 何ともいわなくなった。 |
kokoro.txt | 244 | 私もその話は | それぎり | にして切り上げた。 |
見た目と論理構造の話
どっちが「きれいなデータ」だろうか?
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
ちゃんとしたデータを作るために
- ちゃんとしたデータ=機械処理に適したデータとして大事なのは構造。見た目は気にしないで後回しでよい。後でどうにでもなる。
- テキスト、スプレッドシート(Excel)、一般の文書(Word)、マークアップ(XML)などのデータ設計あらゆることに共通した課題
関連キーワード・リンク集