日本語テキスト処理のためのPC基礎講座

〜言語処理やプログラミング以前の基礎知識


2018/06/26 コマンドラインツール

GUIとCUI

  • コマンドプロンプト(cmd.exe) / Windowsの標準CLI
  • Bash / Linuxで広く使われているCLIシェル

Bash on Ubuntu on Windows

ディレクトリとファイル操作

  • ls (dir) ファイル一覧
  • cd ディレクトリ移動
  • cp (copy) ファイルコピー
  • rm (del) ファイル削除
  • mv (move) ファイル移動
  • rename (ren / rename) ファイル名変更
  • mkdir ディレクトリ作成
  • rmdir ディレクトリ削除
  • less (more) ファイル表示(ページャー)

使い方は ls --help ( dir /?) などとすれば表示される

※括弧内はwindowsの同等コマンド

主なテキスト処理ツール

  • head ファイルの頭を表示
  • tail ファイルの尻尾を表示
  • grep あのgrep
  • wc 文字(行)カウント
  • cat ファイルを縦に結合
  • join ファイルを横に結合
  • sort 並べ替え
  • uniq 重複排除
  • diff 差分
  • iconv 文字コード変換
    • nkf

入出力とパイプ

  • < ファイルから入力
  • > ファイルに出力
  • >> ファイルに追記

バッチ処理

  • シェルスクリプト(バッチファイル)
    • .sh (.bat)

XMLツール

  • xmllint (libxml2)
    • XML文書の検証、XPath検索
  • xsltproc
    • XSLT

apt-get でインストールできる

sudo apt-get install libxml2

※補足:サクラエディタでの複数行にまたがる置換

→できない

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の基本

  • タグ、要素、属性、属性値
    • 開始タグ <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宣言を省略できる
&lt;, &gt;, &amp;
  • XMLのタグ等の記述に必要となる記号(<>&)のエスケープシーケンス
&#x66fd;	&#127866;
  • 文字をunicodeの文字コード番号で参照できる(曽・🍺) &#xは16進数記述

(演習)テキストファイルをXML文書にしてみる

XPath

  • ノード(node)と軸(Axis)
    • 省略記法
  • 述語(predicate)

XSLT

XMLの文書型定義と検証

  • XML文書の検証(validation)
  • Well-formed(整形式)
  • Valid(妥当)
    • DTD
    • XMLスキーマ(xsd)
    • RELAX NG

Oxygen

  • XPathによる検索*2
  • スキーマの自動生成

2018/05/08 Excel

基本

  • テキストデータとExcel
    • TXT, CSV, TSV
    • xls, xlsx
  • 並べ替えとフィルタ
    • 並べ替え(sort)
    • テキストフィルタ(≒grep)
    • 重複の削除(uniq)

ピボットテーブル

  • BCCWJ中納言を例に
    • サンプルデータ

文字列関数

VLOOKUP

ネ申Excel問題

2018/04/17 テキストエディタと正規表現

準備

サンプルデータ

下記のデータ(青空文庫の夏目漱石作品を整形したもの)をダウンロードし、デスクトップに展開(解凍)してください。「なつめそうせき(夏目漱石)」というフォルダができます。

エディタ

正規表現対応のテキストエディタがない人は下記からサクラエディタ(V2)をインストールしてください。

なぜテキストデータか

テキストエディタの基本

  • 検索・置換、grep・タグジャンプ
    • 検索で初出行を調べる
      • 論理行番号
      • 次を検索/前を検索
    • 置換で用例数を数える
      • 元に戻す・やり直し
    • grepで用例リストを作る
    • タグジャンプで文脈を確認する
    • フォルダ内のgrep

利用例

  1. 動詞「日本語」の用例をgrep
  2. grep結果を置換して表形式にする

正規表現

  • 特殊な記号文字(メタ文字)を使って文字列のパターンを表現する
    • 特殊な記号文字はすべて半角
  • エディタでは置換・検索・grepで利用できる(エディタ以外にもさまざまなアプリケ−ションやコンピュータ言語で利用されている)
    • 正規表現を使った置換により、プログラミングなしでもかなりの程度まで、テキストの整形・形式変換・データ抽出・チェックなどができる

基本的な正規表現

  • 授業資料/正規表現
    • 文字クラス [ ]
    • 文字クラスの否定(補集合)[^ ]
    • 繰り返し(最長一致) ? + * ※
    • 繰り返し最短一致 +? *? ※
    • n回以上m回以下のくり返し {n,m} ※
    • グループ化 ()
    • OR(論理和) |
    • 文頭 ^、文末 $
  • 改行\n・タブ文字\tとエスケープシーケンス\

タグ付き正規表現

走[らりるれろ] でgrepした結果を置換するにはどうしたらいいか

  • タグ付き正規表現
    • カッコ(半角丸カッコ)と\1(\2,\3…)を使う
      • タグ付けへの応用例 (「.+?」) -> <quote>\1</quote> ※
    • 後方参照
      • マッチした部分を検索語の中で再利用する 例: (..)\1

最長一致の原則(greedy matching)

  • 正規表現は通常、パターンが一致する最も長い範囲にマッチする
    • 例:あ+【\1】
      • ああああああああ → 【ああああああああ】 そのせいで…
    • 例:「(.+)」【\1】
      • 「こんにちは」「さようなら」 → 【こんにちは」「さようなら】
    • 括弧の組ごとに置換するためには「([^」]+)」【\1】 のように書かなければならない
      • 「こんにちは」「さようなら」 → 【こんにちは】【さようなら】
  • よりかんたんに指定するには(最短一致,ものぐさ指定)
    • 「(.+?)」「(.*?)」のように、繰り返し指定の+*の後に「?」をつける

課題

(検索・置換)

  1. 夏目漱石『坊ちゃん』における「山嵐」の初出行は何行目か。
  2. 夏目漱石『坊ちゃん』における「赤シャツ」の用例数は何例か。
  3. サンプルデータ(夏目漱石の青空文庫全作品)における「言葉」の用例数は何例か。

(正規表現)

  1. 次の語を検索する場合に用いる検索文字列をできるだけ簡潔な正規表現で記しなさい。
    1. 形容詞「暗い」(ただし、漢字「暗」で表記されるもの)
    2. 動詞「蹴る」(漢字「蹴」またはひらがなで表記されるもの)
    3. 「言葉」が2回出てくる行
    4. 「「」で始まり、「」」が現れない行
    5. 「○る○る」(「ぐるぐる」など)
  2. 次の問いに答えよ。
    1. サンプルデータ(夏目漱石の青空文庫全作品)における動詞「笑う」および名詞「笑い」の用例数は計何例か
    2. サンプルデータ(夏目漱石の青空文庫全作品)における形容詞「赤い」の用例数は何例か

(正規表現によるテキスト整形)

次のデータ(「こころ」Wordファイル)をダウンロードして下記の課題を行え。

ただし、データ中に現れる記号は下記のようになっている(青空文庫形式)。

《》:ルビ
(例)私《わたくし》は

|:ルビの付く文字列の始まりを特定する記号
(例)先生一人|麦藁帽《むぎわらぼう》を 

[#]:入力者注 主に外字の説明や、傍点の位置の指定
   (数字は、JIS X 0213の面区点番号、または底本のページと行数)
(例)※[#「てへん+劣」、第3水準1-84-77]
  1. 注と振り仮名を削除し1文1行となる形式のテキストファイルを作成せよ。
  2. 注を削除し、振り仮名を本文と入れ換えたテキストファイルを作成せよ。(例:「私《わたくし》は」→「わたくしは」)
  3. 1.で作成したデータから、次のような「それぎり」「それきり」のKWIC用例集のExcelデータを作成せよ。
    kokoro.txt225先生もそれぎり何ともいわなくなった。
    kokoro.txt244私もその話はそれぎりにして切り上げた。

見た目と論理構造の話

どっちが「きれいなデータ」だろうか?

太陽コーパス              近代語    書き言葉
日本語話し言葉コーパス     現代語        話し言葉
現代日本語書き言葉均衡コーパス  現代語    書き言葉
日本語歴史コーパス       古代〜近代語 書き言葉
太陽コーパス	近代語	書き言葉
日本語話し言葉コーパス	現代語	話し言葉
現代日本語書き言葉均衡コーパス	現代語	書き言葉
日本語歴史コーパス	古代〜近代語	書き言葉

ちゃんとしたデータを作るために

  • ちゃんとしたデータ=機械処理に適したデータとして大事なのは構造。見た目は気にしないで後回しでよい。後でどうにでもなる。
  • テキスト、スプレッドシート(Excel)、一般の文書(Word)、マークアップ(XML)などのデータ設計あらゆることに共通した課題

関連キーワード・リンク集


*1 Wikipediaのことではない。Wikipediaがこの形式を採用している
*2 なぜかXPath2.0を選ばないと検索結果が返らなかった

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS