日本語テキスト処理のためのPC基礎講座2018
をテンプレートにして作成
開始行:
*日本語テキスト処理のためのPC基礎講座
~言語処理やプログラミング以前の基礎知識
------
#contents
*2018/07/10 関係データベースとSQL(2)
**BCCWJデータ
use chunagon_bccwj
**関数のいろいろ
***組み込み関数
-https://msdn.microsoft.com/ja-jp/library/ms174318(v=sql....
***ユーザー定義関数
-KWIC生成
--fn前文脈(サンプルID,出現書字形開始位置,長さ)
--fn後文脈(サンプルID,出現書字形開始位置,長さ)
select top 100 dbo.fn前文脈(サンプルID,出現書字形開始位...
select top 100 サンプルID,dbo.fn前文脈(サンプルID,出現書...
where 語彙素 like '鰻'
**コーパスデータを使った実習
***補足
- select ''*'' from でテーブルの全ての列をもってくる
- select count(*) ''as 名前'' from のように名前を付けら...
***(復習)表の結合
select 作品名, count(*) as 総語数
from 短単位 as S inner join 書誌情報 as B on S.サンプル...
where S.サブコーパス名 like '平安'
group by 作品名
***CASE式
-CASE WHEN ● THEN ○○ WHEN ■ THEN □□ ELSE △ END
select 作品名, count(*) as 総語数,sum(CASE WHEN 本文種...
from 短単位 as S inner join 書誌情報 as B on S.サンプル...
where S.サブコーパス名 like '平安'
group by 作品名
***辞書の階層化された見出し表を扱う
use unidicSQL
-語彙素
--語形
---書字形
---語彙素を出力
select * from 短単位語彙素 where 語彙素 like '夏%' and ...
---語彙素の全ての語形,入力活用型を出力
SELECT 語形,入力活用型 from 短単位語形 as F inner join ...
where 語彙素 like '見る' and 語彙素読み like 'ミル'
---語彙素の全ての書字形を出力
SELECT 語形,書字形 from 短単位書字形 as O inner join 短...
where 語彙素 like '見る' and 語彙素読み like 'ミル'
***コーパスと辞書を繋ぐ
-語彙素ID, 語形ID, 書字形ID
select L.語彙素,SUW.レジスター,count(SUW.キー) from 短単...
where L.語彙素 like '夏%' and L.語彙素読み like 'ナツ%'
group by L.語彙素, SUW.レジスター
***表の結合(復習)
-内部結合 INNER JOIN
-外部結合 LEFT (OUTER) JOIN
--上と同じものを外部結合
select L.語彙素,SUW.レジスター,count(SUW.キー) from 短単...
where L.語彙素 like '夏%' and L.語彙素読み like 'ナツ%'
group by L.語彙素, SUW.レジスター
***連続する語の取り出し
-同一の表を一語ずつずらしながら結合する(前方後方共起によ...
select top 100 s1.語彙素,s1.語彙素読み,s1.品詞,dbo.fn前...
from 短単位 as s1 inner join 短単位 as s2 on s1.サンプル...
where s2.語彙素 like '鰻'
-N-gram
select top 100
s1.キー+s2.キー+s3.キー+s4.キー+s5.キー+s6.キー,
s1.語彙素+'/'+s2.語彙素+'/'+s3.語彙素+'/'+s4.語彙素+'/'+...
from 短単位 as s1
inner join 短単位 as s2 on s1.サンプルID=s2.サンプルID ...
inner join 短単位 as s3 on s2.サンプルID=s3.サンプルID ...
inner join 短単位 as s4 on s3.サンプルID=s4.サンプルID ...
inner join 短単位 as s5 on s4.サンプルID=s5.サンプルID ...
inner join 短単位 as s6 on s5.サンプルID=s6.サンプルID ...
where s1.サブコーパス名='平安'
order by s1.サンプルID, s1.連番
**サブクエリ
括弧でくくったSELECT文に名前を付けて、あたかもテーブルで...
-異なり語数
select x.サブコーパス名, count(*) from
(select サブコーパス名, count(*) as 語数 from 短単位 wh...
group by 語彙素ID,サブコーパス名) as x
group by x.サブコーパス名
-TTR(Type Token Ratio)
use chunagon
select x.サブコーパス名, count(*) as 異なり語数, sum(語...
CONVERT(float,count(*))/sum(語数) as TTR from
(select サブコーパス名, count(*) as 語数 from 短単位 wh...
group by 語彙素ID,サブコーパス名) as x
group by x.サブコーパス名
***一時テーブルの作成
#で始まるテーブル名は、DB切断後削除される一時テーブルとな...
--SELECT カラム INTO 新しい書き込み先のテーブル FROM テー...
select * into 鰻テーブル from 短単位 where 語彙素='鰻'
--CREATE TABLE テーブル名 ( 列名 データ型 , 列名2 データ...
create table #ogiso_tmp ( ID int ,調査語彙素 varchar(10)...
**受講者アンケート
-https://docs.google.com/forms/d/e/1FAIpQLSc2ffu-RdaOqtoF...
*2018/07/03 関係データベースとSQL(1)
-当面、既存のデータベースを使うことだけを説明します
**関係データベース(リレーショナルデータベース:RDB)
-あらゆるデータを表の組み合わせで表現する
-データを取り出すのが速い、データが壊れない、同時に処理で...
-(参考)[[データベース基礎中の基礎>https://thinkit.co.jp/s...
--リレーショナルデータベースの基本 https://thinkit.co.jp/...
***準備
-Microsoft SQL Server Management Studio(SSMS)のインスト...
--https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-...
--データベース(SQL Server)を利用する統合環境
-データベースアカウント(配付資料)
--参照権限のみ
***用語
-[[データベース管理システム(DBMS)>https://ja.wikipedia....
--[[''SQL Server''>https://ja.wikipedia.org/wiki/Microsof...
-データベースサーバー
-データベースインスタンス
-表(テーブル)
--列(カラム)
--レコード(行)
|>|>|>|CENTER:テーブル|h
||列名1|列名2|列名3|
|レコード1||||
|レコード2||||
-クエリ(問い合わせ):データベースに対するさまざまな処理...
-ビュー:(複数の)表の列を組み合わせて作る仮想的な表
-[[授業資料/表の正規化]]
**[[SQL>https://ja.wikipedia.org/wiki/SQL]]
データベース[[問い合わせ言語>https://ja.wikipedia.org/wik...
--SQLの基本 https://thinkit.co.jp/article/1046/1
**SELECT文
とりあえずこれだけ!覚える
-データベースからデータを選択して出力するコマンド
--SELECT 列名,列名2... FROM テーブル
---短単位表から語彙素,語彙素読みの列を(全部)出力
SELECT 語彙素,語彙素読み FROM 短単位
---短単位表から語彙素,語彙素読みの列を最初の100行出力
SELECT TOP 100 語彙素,語彙素読み FROM 短単位
-WHERE条件句
-- SELECT 列名,列名2... FROM テーブル WHERE 列名='hoge'
---短単位表から品詞が接続詞であるものの語彙素,語彙素読み...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'
-LIKE 演算子とワイルドカード
--"LIKE"は"="のようなものだが、ワイルドカードを含む完全一...
--- %:任意の文字列(文字なしでも可)
--- _:任意の一文字
---短単位表から品詞が形容詞ではじまるものの語彙素,語彙素...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形...
---短単位表から品詞が接続詞で語彙素読みがカ行で始まるもの...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形...
-ORDER BY 句(並べ替え)
--ORDER BY 列名 (DESC)
---短単位表から品詞が接続詞であるものの語彙素,語彙素読み...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'...
***集計
-グループ化 GROUP BY
-- SELECT 列名,列名2... FROM テーブル GROUP BY 列名
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'...
-count 集計関数
--集計した数を返す
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
***SQLの書式など(SQL Server)
-コマンドと記号は全て半角
-コマンドは大文字小文字の区別は(原則として)ない
-コマンドの切れ目のスペースやタブは余計に入っていて、改行...
-文字列を値として指定するときは'値'のようにシングルクオー...
--値として'を入れたいときは''としてエスケープ
- --でコメントアウト(実行対象外になる)。行の途中からで...
--/* ~ */ で複数行コメントアウト
**表の結合
-(参考)SQL素人でも分かるテーブル結合(inner joinとouter ...
-内部結合 INNER JOIN
-外部結合 LEFT (OUTER) JOIN
*2018/06/26 コマンドラインツール
**GUIとCUI
-[[GUI: Graphical User Interface>https://ja.wikipedia.org...
-[[CUI: Character User Interface >https://ja.wikipedia.or...
-コマンドプロンプト(cmd.exe) / Windowsの標準CLI
-Bash / Linuxで広く使われているCLIシェル
***Bash on Ubuntu on Windows
-WindowsでBashを使えるようにするには
--http://www.atmarkit.co.jp/ait/articles/1608/08/news039....
-コマンドプロンプトでlinuxのツールを使うには
--http://www.atmarkit.co.jp/ait/articles/1805/24/news022....
**ディレクトリとファイル操作
-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-...
-Windowsは通常大文字小文字を区別しないが、Linuxでは区別さ...
***練習
-http://flagpedia.asia/ja/download からダウンロードした国...
-参考資料:[[flags.xlsx>https://www.ogiso.net/wiki/index....
+上記のデータを使って国旗のファイル名を日本語名に変更した...
+「FIFA2018WC」ディレクトリを作成してワールドカップ出場国...
**主なテキスト処理ツール(Linux)
-head ファイルの頭を表示
-tail ファイルの尻尾を表示
-grep あのgrep
-wc 文字(行)カウント
-cat ファイルを縦に結合
-join ファイルを横に結合
-sort 並べ替え
-uniq 重複排除
-diff 差分
-iconv 文字コード変換
--nkf
-参考リンク
--https://qiita.com/kenju/items/5777322e485a30aa6269
--https://orangain.hatenablog.com/entry/20100916/1284631280
-サンプルデータ(洒落本のリスト)
--http://pj.ninjal.ac.jp/corpus_center/chj/doc/list-share...
--[[kokoro.txt>https://www.ogiso.net/wiki/index.php?plugi...
**入出力とパイプ
-< ファイルから入力
-> ファイルに出力
->> ファイルに追記
-| パイプ:処理して結果を次につなぐ
--(参考)Bashのストリーム/パイプ処理を視覚的に理解するht...
-(参考)https://news.mynavi.jp/article/20180618-647436/
**バッチ処理
-シェルスクリプト(バッチファイル)
--.sh (.bat)
**XMLツール
-xmllint (libxml2)
--XML文書の検証、XPath検索
-xsltproc
--XSLT
apt-get でインストールできる
sudo apt-get install libxml2
**形態素解析(mecab)
-mecabのインストール
sudo apt-get install mecab
-mecab-ipadic-utf8(UTF8版mecab用ipadic)のインストール
sudo apt-get install mecab-ipadic-utf8
mecab file | less
mecab file > 保存先ファイル
-unidicは別途ダウンロードしてしかるべき場所に置いて、解析...
mecab -d unidicディレクトリ file | less
------
**※前回補足:サクラエディタでの複数行にまたがる置換
→できない
--http://sakura.qp.land.to/?FAQ%2F2
*2018/05/29 XML
-[[XML>https://ja.wikipedia.org/wiki/Extensible_Markup_La...
-参考リンク:[[たのしいXML>http://www6.airnet.ne.jp/manyo...
**マークアップ言語とXML
-[[HTML>https://ja.wikipedia.org/wiki/HyperText_Markup_La...
--HTML 言わずと知れたWebページ記述言語
--[[XHTML>https://ja.wikipedia.org/wiki/Extensible_HyperT...
--[[SGML>https://ja.wikipedia.org/wiki/Standard_Generaliz...
-HTMLとXMLの違い
--HTMLは使えるタグやその意味(タグセット)があらかじめW3C...
--業界団体などであらかじめタグセットを規定したものもあり...
--人間にも機械にも可読なデータを目指す
-(参考)HTMLの構造と見た目の分離
--XHTMLは文書の構造(意味)記述に。見た目(スタイル)は[[...
--CSSはXMLのスタイル記述にも使われる
-(参考)軽量マークアップ言語
人間が直接記述するのがたいへんなので、簡単な入力形式を変換
--[[Wiki>https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3...
--Markdown
-[[青空文庫形式>https://www.aozora.gr.jp/KOSAKU/txt_chu_k...
**XMLの基本
-タグ、要素、属性、属性値
--開始タグ <tag>、終了タグ </tag>
--<タグ名 属性="属性値">テキスト<子要素/></タグ名>
例:
<info date="2018/05/30">
<weather>くもりのち雨</weather>
<img>http://www.drk7.jp/MT/images/MTWeather/214.gif</img>
<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 version="1.0" encoding="Shift_JIS" ?>
--encoding宣言
--XML宣言の省略
---UTF-8, UTF-16で書かれている場合はXML宣言を省略できる
-[[文字参照>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD...
<, >, &
---XMLのタグ等の記述に必要となる記号(<>&)のエスケープシ...
曽 🍺
---文字をunicodeの文字コード番号で参照できる(曽・&...
--[[ホワイトスペース>https://en.wikipedia.org/wiki/Whites...
---扱われ方に[[要注意>http://www.atmarkit.co.jp/ait/artic...
**(演習)テキストファイルをXML文書にしてみる
-[[soseki2.zip>https://www.dropbox.com/s/gw1j25svf2s9tki/...
**[[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_Transformation...
-HTMLへの変換
-[[ひまわり>http://www2.ninjal.ac.jp/lrc/index.php?%C1%B4...
-(参考) http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt...
**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&pc...
**文字列関数
-[[授業資料/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/...
***エディタ
正規表現対応のテキストエディタがない人は下記からサクラエ...
-http://sakura-editor.sourceforge.net/download.html
**なぜテキストデータか
-[[授業資料/テキストデータとは]]
-[[授業資料/テキストエディタ]]
**[[テキストエディタ>https://ja.wikipedia.org/wiki/%E3%83...
-検索・置換、grep・タグジャンプ
--検索で初出行を調べる
---論理行番号
---次を検索/前を検索
--置換で用例数を数える
---元に戻す・やり直し
--grepで用例リストを作る
--タグジャンプで文脈を確認する
--フォルダ内のgrep
-ショートカットキー
--[[授業資料/覚えておきたいショートカットキー]]
***利用例
+動詞「日本語」の用例をgrep
+grep結果を置換して表形式にする
--[[CSVファイル>https://ja.wikipedia.org/wiki/Comma-Separ...
**[[正規表現>https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A...
-特殊な記号文字(メタ文字)を使って文字列のパターンを表現...
--特殊な記号文字はすべて半角
-エディタでは置換・検索・grepで利用できる(エディタ以外に...
--正規表現を使った置換により、プログラミングなしでもかな...
***基本的な正規表現
-[[授業資料/正規表現]]
--文字クラス [ ]
--文字クラスの否定(補集合)[^ ]
--繰り返し(最長一致) ? + * ※
--繰り返し最短一致 +? *? ※
--n回以上m回以下のくり返し {n,m} ※
--グループ化 ()
--OR(論理和) |
--文頭 ^、文末 $
--改行\n・タブ文字\tとエスケープシーケンス\
-正規表現可視化ツール https://regexper.com/
--例:https://regexper.com/#%5B%E6%9A%AE%E3%81%8F%5D%E3%8...
***タグ付き正規表現
走[らりるれろ] で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/...
ただし、データ中に現れる記号は下記のようになっている(青...
《》:ルビ
(例)私《わたくし》は
|:ルビの付く文字列の始まりを特定する記号
(例)先生一人|麦藁帽《むぎわらぼう》を
[#]:入力者注 主に外字の説明や、傍点の位置の指定
(数字は、JIS X 0213の面区点番号、または底本のペー...
(例)※[#「てへん+劣」、第3水準1-84-77]
+注と振り仮名を削除し1文1行となる形式のテキストファイル...
+注を削除し、振り仮名を本文と入れ換えたテキストファイルを...
+1.で作成したデータから、次のような「それぎり」「それきり...
,kokoro.txt,225,先生も,それぎり,何ともいわなくなった。
,kokoro.txt,244,私もその話は,それぎり,にして切り上げた。
**見た目と論理構造の話
***どっちが「きれいなデータ」だろうか?
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
***ちゃんとしたデータを作るために
-ちゃんとしたデータ=機械処理に適したデータとして大事なの...
-テキスト、スプレッドシート(Excel)、一般の文書(Word)...
------
**関連キーワード・リンク集
-[[テキストファイル>https://ja.wikipedia.org/wiki/%E3%83%...
-拡張子 txt,csv,tsv,htm,xml
-[[文字コード>https://ja.wikipedia.org/wiki/%E6%96%87%E5%...
--[[テレタイプ>https://ja.wikipedia.org/wiki/%E3%83%86%E3...
---[[制御記号>https://ja.wikipedia.org/wiki/%E5%88%B6%E5%...
---[[改行コード>https://ja.wikipedia.org/wiki/%E6%94%B9%E...
--[[文字集合(character set)>https://ja.wikipedia.org/wiki...
--[[符号化方式(character encoding)>https://ja.wikipedia.o...
--やや古いがよく使われる文字コード:[[Shift_JIS>https://j...
--[[Unicode>https://ja.wikipedia.org/wiki/Unicode]]の符号...
---(LE(Little Endian), BE(Big Endian))
---[[BOM(Byte Order Mark)>https://ja.wikipedia.org/wiki/%...
---[[BMP(基本多言語面)>https://ja.wikipedia.org/wiki/%E...
--(参考) http://www.kanzaki.com/docs/jcode.html
--(参考) https://codezine.jp/article/detail/1592 ※
終了行:
*日本語テキスト処理のためのPC基礎講座
~言語処理やプログラミング以前の基礎知識
------
#contents
*2018/07/10 関係データベースとSQL(2)
**BCCWJデータ
use chunagon_bccwj
**関数のいろいろ
***組み込み関数
-https://msdn.microsoft.com/ja-jp/library/ms174318(v=sql....
***ユーザー定義関数
-KWIC生成
--fn前文脈(サンプルID,出現書字形開始位置,長さ)
--fn後文脈(サンプルID,出現書字形開始位置,長さ)
select top 100 dbo.fn前文脈(サンプルID,出現書字形開始位...
select top 100 サンプルID,dbo.fn前文脈(サンプルID,出現書...
where 語彙素 like '鰻'
**コーパスデータを使った実習
***補足
- select ''*'' from でテーブルの全ての列をもってくる
- select count(*) ''as 名前'' from のように名前を付けら...
***(復習)表の結合
select 作品名, count(*) as 総語数
from 短単位 as S inner join 書誌情報 as B on S.サンプル...
where S.サブコーパス名 like '平安'
group by 作品名
***CASE式
-CASE WHEN ● THEN ○○ WHEN ■ THEN □□ ELSE △ END
select 作品名, count(*) as 総語数,sum(CASE WHEN 本文種...
from 短単位 as S inner join 書誌情報 as B on S.サンプル...
where S.サブコーパス名 like '平安'
group by 作品名
***辞書の階層化された見出し表を扱う
use unidicSQL
-語彙素
--語形
---書字形
---語彙素を出力
select * from 短単位語彙素 where 語彙素 like '夏%' and ...
---語彙素の全ての語形,入力活用型を出力
SELECT 語形,入力活用型 from 短単位語形 as F inner join ...
where 語彙素 like '見る' and 語彙素読み like 'ミル'
---語彙素の全ての書字形を出力
SELECT 語形,書字形 from 短単位書字形 as O inner join 短...
where 語彙素 like '見る' and 語彙素読み like 'ミル'
***コーパスと辞書を繋ぐ
-語彙素ID, 語形ID, 書字形ID
select L.語彙素,SUW.レジスター,count(SUW.キー) from 短単...
where L.語彙素 like '夏%' and L.語彙素読み like 'ナツ%'
group by L.語彙素, SUW.レジスター
***表の結合(復習)
-内部結合 INNER JOIN
-外部結合 LEFT (OUTER) JOIN
--上と同じものを外部結合
select L.語彙素,SUW.レジスター,count(SUW.キー) from 短単...
where L.語彙素 like '夏%' and L.語彙素読み like 'ナツ%'
group by L.語彙素, SUW.レジスター
***連続する語の取り出し
-同一の表を一語ずつずらしながら結合する(前方後方共起によ...
select top 100 s1.語彙素,s1.語彙素読み,s1.品詞,dbo.fn前...
from 短単位 as s1 inner join 短単位 as s2 on s1.サンプル...
where s2.語彙素 like '鰻'
-N-gram
select top 100
s1.キー+s2.キー+s3.キー+s4.キー+s5.キー+s6.キー,
s1.語彙素+'/'+s2.語彙素+'/'+s3.語彙素+'/'+s4.語彙素+'/'+...
from 短単位 as s1
inner join 短単位 as s2 on s1.サンプルID=s2.サンプルID ...
inner join 短単位 as s3 on s2.サンプルID=s3.サンプルID ...
inner join 短単位 as s4 on s3.サンプルID=s4.サンプルID ...
inner join 短単位 as s5 on s4.サンプルID=s5.サンプルID ...
inner join 短単位 as s6 on s5.サンプルID=s6.サンプルID ...
where s1.サブコーパス名='平安'
order by s1.サンプルID, s1.連番
**サブクエリ
括弧でくくったSELECT文に名前を付けて、あたかもテーブルで...
-異なり語数
select x.サブコーパス名, count(*) from
(select サブコーパス名, count(*) as 語数 from 短単位 wh...
group by 語彙素ID,サブコーパス名) as x
group by x.サブコーパス名
-TTR(Type Token Ratio)
use chunagon
select x.サブコーパス名, count(*) as 異なり語数, sum(語...
CONVERT(float,count(*))/sum(語数) as TTR from
(select サブコーパス名, count(*) as 語数 from 短単位 wh...
group by 語彙素ID,サブコーパス名) as x
group by x.サブコーパス名
***一時テーブルの作成
#で始まるテーブル名は、DB切断後削除される一時テーブルとな...
--SELECT カラム INTO 新しい書き込み先のテーブル FROM テー...
select * into 鰻テーブル from 短単位 where 語彙素='鰻'
--CREATE TABLE テーブル名 ( 列名 データ型 , 列名2 データ...
create table #ogiso_tmp ( ID int ,調査語彙素 varchar(10)...
**受講者アンケート
-https://docs.google.com/forms/d/e/1FAIpQLSc2ffu-RdaOqtoF...
*2018/07/03 関係データベースとSQL(1)
-当面、既存のデータベースを使うことだけを説明します
**関係データベース(リレーショナルデータベース:RDB)
-あらゆるデータを表の組み合わせで表現する
-データを取り出すのが速い、データが壊れない、同時に処理で...
-(参考)[[データベース基礎中の基礎>https://thinkit.co.jp/s...
--リレーショナルデータベースの基本 https://thinkit.co.jp/...
***準備
-Microsoft SQL Server Management Studio(SSMS)のインスト...
--https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-...
--データベース(SQL Server)を利用する統合環境
-データベースアカウント(配付資料)
--参照権限のみ
***用語
-[[データベース管理システム(DBMS)>https://ja.wikipedia....
--[[''SQL Server''>https://ja.wikipedia.org/wiki/Microsof...
-データベースサーバー
-データベースインスタンス
-表(テーブル)
--列(カラム)
--レコード(行)
|>|>|>|CENTER:テーブル|h
||列名1|列名2|列名3|
|レコード1||||
|レコード2||||
-クエリ(問い合わせ):データベースに対するさまざまな処理...
-ビュー:(複数の)表の列を組み合わせて作る仮想的な表
-[[授業資料/表の正規化]]
**[[SQL>https://ja.wikipedia.org/wiki/SQL]]
データベース[[問い合わせ言語>https://ja.wikipedia.org/wik...
--SQLの基本 https://thinkit.co.jp/article/1046/1
**SELECT文
とりあえずこれだけ!覚える
-データベースからデータを選択して出力するコマンド
--SELECT 列名,列名2... FROM テーブル
---短単位表から語彙素,語彙素読みの列を(全部)出力
SELECT 語彙素,語彙素読み FROM 短単位
---短単位表から語彙素,語彙素読みの列を最初の100行出力
SELECT TOP 100 語彙素,語彙素読み FROM 短単位
-WHERE条件句
-- SELECT 列名,列名2... FROM テーブル WHERE 列名='hoge'
---短単位表から品詞が接続詞であるものの語彙素,語彙素読み...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'
-LIKE 演算子とワイルドカード
--"LIKE"は"="のようなものだが、ワイルドカードを含む完全一...
--- %:任意の文字列(文字なしでも可)
--- _:任意の一文字
---短単位表から品詞が形容詞ではじまるものの語彙素,語彙素...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形...
---短単位表から品詞が接続詞で語彙素読みがカ行で始まるもの...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞 LIKE '形...
-ORDER BY 句(並べ替え)
--ORDER BY 列名 (DESC)
---短単位表から品詞が接続詞であるものの語彙素,語彙素読み...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'...
***集計
-グループ化 GROUP BY
-- SELECT 列名,列名2... FROM テーブル GROUP BY 列名
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み FROM 短単位 WHERE 品詞='接続詞'...
-count 集計関数
--集計した数を返す
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
---短単位表から品詞が接続詞であるもののを同じ語彙素,語彙...
SELECT 語彙素,語彙素読み,count(語彙素) FROM 短単位 WHERE...
***SQLの書式など(SQL Server)
-コマンドと記号は全て半角
-コマンドは大文字小文字の区別は(原則として)ない
-コマンドの切れ目のスペースやタブは余計に入っていて、改行...
-文字列を値として指定するときは'値'のようにシングルクオー...
--値として'を入れたいときは''としてエスケープ
- --でコメントアウト(実行対象外になる)。行の途中からで...
--/* ~ */ で複数行コメントアウト
**表の結合
-(参考)SQL素人でも分かるテーブル結合(inner joinとouter ...
-内部結合 INNER JOIN
-外部結合 LEFT (OUTER) JOIN
*2018/06/26 コマンドラインツール
**GUIとCUI
-[[GUI: Graphical User Interface>https://ja.wikipedia.org...
-[[CUI: Character User Interface >https://ja.wikipedia.or...
-コマンドプロンプト(cmd.exe) / Windowsの標準CLI
-Bash / Linuxで広く使われているCLIシェル
***Bash on Ubuntu on Windows
-WindowsでBashを使えるようにするには
--http://www.atmarkit.co.jp/ait/articles/1608/08/news039....
-コマンドプロンプトでlinuxのツールを使うには
--http://www.atmarkit.co.jp/ait/articles/1805/24/news022....
**ディレクトリとファイル操作
-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-...
-Windowsは通常大文字小文字を区別しないが、Linuxでは区別さ...
***練習
-http://flagpedia.asia/ja/download からダウンロードした国...
-参考資料:[[flags.xlsx>https://www.ogiso.net/wiki/index....
+上記のデータを使って国旗のファイル名を日本語名に変更した...
+「FIFA2018WC」ディレクトリを作成してワールドカップ出場国...
**主なテキスト処理ツール(Linux)
-head ファイルの頭を表示
-tail ファイルの尻尾を表示
-grep あのgrep
-wc 文字(行)カウント
-cat ファイルを縦に結合
-join ファイルを横に結合
-sort 並べ替え
-uniq 重複排除
-diff 差分
-iconv 文字コード変換
--nkf
-参考リンク
--https://qiita.com/kenju/items/5777322e485a30aa6269
--https://orangain.hatenablog.com/entry/20100916/1284631280
-サンプルデータ(洒落本のリスト)
--http://pj.ninjal.ac.jp/corpus_center/chj/doc/list-share...
--[[kokoro.txt>https://www.ogiso.net/wiki/index.php?plugi...
**入出力とパイプ
-< ファイルから入力
-> ファイルに出力
->> ファイルに追記
-| パイプ:処理して結果を次につなぐ
--(参考)Bashのストリーム/パイプ処理を視覚的に理解するht...
-(参考)https://news.mynavi.jp/article/20180618-647436/
**バッチ処理
-シェルスクリプト(バッチファイル)
--.sh (.bat)
**XMLツール
-xmllint (libxml2)
--XML文書の検証、XPath検索
-xsltproc
--XSLT
apt-get でインストールできる
sudo apt-get install libxml2
**形態素解析(mecab)
-mecabのインストール
sudo apt-get install mecab
-mecab-ipadic-utf8(UTF8版mecab用ipadic)のインストール
sudo apt-get install mecab-ipadic-utf8
mecab file | less
mecab file > 保存先ファイル
-unidicは別途ダウンロードしてしかるべき場所に置いて、解析...
mecab -d unidicディレクトリ file | less
------
**※前回補足:サクラエディタでの複数行にまたがる置換
→できない
--http://sakura.qp.land.to/?FAQ%2F2
*2018/05/29 XML
-[[XML>https://ja.wikipedia.org/wiki/Extensible_Markup_La...
-参考リンク:[[たのしいXML>http://www6.airnet.ne.jp/manyo...
**マークアップ言語とXML
-[[HTML>https://ja.wikipedia.org/wiki/HyperText_Markup_La...
--HTML 言わずと知れたWebページ記述言語
--[[XHTML>https://ja.wikipedia.org/wiki/Extensible_HyperT...
--[[SGML>https://ja.wikipedia.org/wiki/Standard_Generaliz...
-HTMLとXMLの違い
--HTMLは使えるタグやその意味(タグセット)があらかじめW3C...
--業界団体などであらかじめタグセットを規定したものもあり...
--人間にも機械にも可読なデータを目指す
-(参考)HTMLの構造と見た目の分離
--XHTMLは文書の構造(意味)記述に。見た目(スタイル)は[[...
--CSSはXMLのスタイル記述にも使われる
-(参考)軽量マークアップ言語
人間が直接記述するのがたいへんなので、簡単な入力形式を変換
--[[Wiki>https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3...
--Markdown
-[[青空文庫形式>https://www.aozora.gr.jp/KOSAKU/txt_chu_k...
**XMLの基本
-タグ、要素、属性、属性値
--開始タグ <tag>、終了タグ </tag>
--<タグ名 属性="属性値">テキスト<子要素/></タグ名>
例:
<info date="2018/05/30">
<weather>くもりのち雨</weather>
<img>http://www.drk7.jp/MT/images/MTWeather/214.gif</img>
<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 version="1.0" encoding="Shift_JIS" ?>
--encoding宣言
--XML宣言の省略
---UTF-8, UTF-16で書かれている場合はXML宣言を省略できる
-[[文字参照>https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD...
<, >, &
---XMLのタグ等の記述に必要となる記号(<>&)のエスケープシ...
曽 🍺
---文字をunicodeの文字コード番号で参照できる(曽・&...
--[[ホワイトスペース>https://en.wikipedia.org/wiki/Whites...
---扱われ方に[[要注意>http://www.atmarkit.co.jp/ait/artic...
**(演習)テキストファイルをXML文書にしてみる
-[[soseki2.zip>https://www.dropbox.com/s/gw1j25svf2s9tki/...
**[[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_Transformation...
-HTMLへの変換
-[[ひまわり>http://www2.ninjal.ac.jp/lrc/index.php?%C1%B4...
-(参考) http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt...
**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&pc...
**文字列関数
-[[授業資料/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/...
***エディタ
正規表現対応のテキストエディタがない人は下記からサクラエ...
-http://sakura-editor.sourceforge.net/download.html
**なぜテキストデータか
-[[授業資料/テキストデータとは]]
-[[授業資料/テキストエディタ]]
**[[テキストエディタ>https://ja.wikipedia.org/wiki/%E3%83...
-検索・置換、grep・タグジャンプ
--検索で初出行を調べる
---論理行番号
---次を検索/前を検索
--置換で用例数を数える
---元に戻す・やり直し
--grepで用例リストを作る
--タグジャンプで文脈を確認する
--フォルダ内のgrep
-ショートカットキー
--[[授業資料/覚えておきたいショートカットキー]]
***利用例
+動詞「日本語」の用例をgrep
+grep結果を置換して表形式にする
--[[CSVファイル>https://ja.wikipedia.org/wiki/Comma-Separ...
**[[正規表現>https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A...
-特殊な記号文字(メタ文字)を使って文字列のパターンを表現...
--特殊な記号文字はすべて半角
-エディタでは置換・検索・grepで利用できる(エディタ以外に...
--正規表現を使った置換により、プログラミングなしでもかな...
***基本的な正規表現
-[[授業資料/正規表現]]
--文字クラス [ ]
--文字クラスの否定(補集合)[^ ]
--繰り返し(最長一致) ? + * ※
--繰り返し最短一致 +? *? ※
--n回以上m回以下のくり返し {n,m} ※
--グループ化 ()
--OR(論理和) |
--文頭 ^、文末 $
--改行\n・タブ文字\tとエスケープシーケンス\
-正規表現可視化ツール https://regexper.com/
--例:https://regexper.com/#%5B%E6%9A%AE%E3%81%8F%5D%E3%8...
***タグ付き正規表現
走[らりるれろ] で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/...
ただし、データ中に現れる記号は下記のようになっている(青...
《》:ルビ
(例)私《わたくし》は
|:ルビの付く文字列の始まりを特定する記号
(例)先生一人|麦藁帽《むぎわらぼう》を
[#]:入力者注 主に外字の説明や、傍点の位置の指定
(数字は、JIS X 0213の面区点番号、または底本のペー...
(例)※[#「てへん+劣」、第3水準1-84-77]
+注と振り仮名を削除し1文1行となる形式のテキストファイル...
+注を削除し、振り仮名を本文と入れ換えたテキストファイルを...
+1.で作成したデータから、次のような「それぎり」「それきり...
,kokoro.txt,225,先生も,それぎり,何ともいわなくなった。
,kokoro.txt,244,私もその話は,それぎり,にして切り上げた。
**見た目と論理構造の話
***どっちが「きれいなデータ」だろうか?
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
太陽コーパス 近代語 書き言葉
日本語話し言葉コーパス 現代語 話し言葉
現代日本語書き言葉均衡コーパス 現代語 書き言葉
日本語歴史コーパス 古代~近代語 書き言葉
***ちゃんとしたデータを作るために
-ちゃんとしたデータ=機械処理に適したデータとして大事なの...
-テキスト、スプレッドシート(Excel)、一般の文書(Word)...
------
**関連キーワード・リンク集
-[[テキストファイル>https://ja.wikipedia.org/wiki/%E3%83%...
-拡張子 txt,csv,tsv,htm,xml
-[[文字コード>https://ja.wikipedia.org/wiki/%E6%96%87%E5%...
--[[テレタイプ>https://ja.wikipedia.org/wiki/%E3%83%86%E3...
---[[制御記号>https://ja.wikipedia.org/wiki/%E5%88%B6%E5%...
---[[改行コード>https://ja.wikipedia.org/wiki/%E6%94%B9%E...
--[[文字集合(character set)>https://ja.wikipedia.org/wiki...
--[[符号化方式(character encoding)>https://ja.wikipedia.o...
--やや古いがよく使われる文字コード:[[Shift_JIS>https://j...
--[[Unicode>https://ja.wikipedia.org/wiki/Unicode]]の符号...
---(LE(Little Endian), BE(Big Endian))
---[[BOM(Byte Order Mark)>https://ja.wikipedia.org/wiki/%...
---[[BMP(基本多言語面)>https://ja.wikipedia.org/wiki/%E...
--(参考) http://www.kanzaki.com/docs/jcode.html
--(参考) https://codezine.jp/article/detail/1592 ※
ページ名: