[2011-11-25-1]の記事「#942. LAEME Index of Sources の検索ツール」で SQL による検索用 CGI を公開した.最近,研究で LAEME を本格的に使う機会があり,検索用のデータベースに少しく情報を追加した.そこで,上位互換となる Ver. 2 を作ったので,公開する.
追加した情報は,PERIOD, COUNTY, DIALECT の3フィールド.PERIOD は,もともとの IOS で与えられていたテキストの DATE をもとに,半世紀区切りで大雑把に区分しなおしたもの.C13b2--C14a1 など区分をまたがる場合には,早いほうをとって C13b と読み替えた."ca. 1300" なども同様に,早いほうへ倒して C13b とした.DATE において C13, C14 など半世紀で区切れない年代が与えられている場合には,C13, C14 のようにそのまま残した.
COUNTY は,LOC に与えられていた情報をもとに,3文字の略字表記で示した.DIALECT は,所属する州 (county) をもとに大雑把に N (Northern), NWM (North-West Midland), NEM (North-East Midland), SEM (South-East Midland), SWM (South-West Midland), SW (Southwestern), SE (Southeastern) の7方言に区分したものである.方言線は州境と一致しているわけではないし,方言線そのものの選定も,「#130. 中英語の方言区分」 ([2009-09-04-1]) や「#1030. England の現代英語方言区分 (2)」 ([2012-02-21-1]) で見たように,難しい.したがって,今回の DIALECT の付与も,[2009-09-04-1]の中英語方言地図に大雑把に照らしての仮のものである.参考までに,COUNTY と DIALECT の対応表はこちら.
# 各 PERIOD に振り分けられたテキストの数[ 固定リンク | 印刷用ページ | コメント ]
select distinct PERIOD, count(*) from ios group by PERIOD;
# 各 COUNTY に振り分けられたテキストの数
select distinct COUNTY, count(*) from ios group by COUNTY;
# 各 DIALECT に振り分けられたテキストの数
select distinct DIALECT, count(*) from ios group by DIALECT;
# DIALECT/PERIOD ごとに,所属するテキストの多い順にリストアップ
select distinct DIALECT, PERIOD, count(*) from ios group by DIALECT, PERIOD order by count(*) desc;
# Worcestershire のテキストを取り出し,PERIOD 順に諸情報を羅列
select TEXT_ID, FILE, MS, COUNTY, PERIOD, TAGGED_WORDS from ios where COUNTY = 'WOR' order by PERIOD;
##953,954,955 の記事で,最近公開された COCA ( Corpus of Contemporary American English ) の n-gram データベースを利用してみた.COCA に現われる 2-grams, 3-grams, 4-grams, 5-grams について,それぞれ最頻約100万の表現を羅列したデータベースで,手元においておけば,工夫次第で COCA のインターフェースだけでは検索しにくい共起表現の検索が可能となる.
ただし,各 n-gram のデータベースは,数十メガバイトの容量のテキストファイルで,直接検索するには重たい.そこで,SQLite データベースへと格納し,SQL 文による検索が可能となるように検索プログラムを組んだ.以下は,検索結果の最初の10行だけを出力する CGI である.
# 1-grams で,前置詞を頻度順に取り出す(ただし,case-sensitive なので再集計が必要)
select * from one where pos1 like "i%" order by freq desc;
# 2-grams で,ハンサムなものを頻度順に取り出す
select * from two where word1 = "handsome" and pos1 = "jj" and pos2 like "nn_" order by freq desc;
# 2-grams で,"absolutely (adj.)" で強調される形容詞を頻度順に取り出す([2011-03-12-1]の記事「#684. semantic prosody と文法カテゴリー」を参照)
select * from two where word1 = "absolutely" and pos2 = "jj" order by freq desc;
# 3-grams で,高頻度の as ... as 表現を取り出す
select * from three where word1 = "as" and word3 = "as" order by freq desc;
# 4-grams で,高頻度の from ... to ... 表現を取り出す
select * from four where word1 = "from" and pos1 = "ii" and word3 = "to" and pos3 = "ii" order by freq desc;
# 5-grams で,死因を探る; "die of" と "die from" の揺れを観察する
select * from five where word1 in ("die", "dies", "died", "dying") and pos1 like "vv%" and word2 in ("of", "from") and pos2 like "i%" order by word3;
n-gram データベースを最大限に使いこなすには,このようにして得られた検索結果をもとにさらに条件を絞り込んだり,複数の検索結果を付き合わせるなどの工夫が必要だろう.
LAEME で Auxiliary Data Sets -> Index of Sources とメニューをたどると,LAEME が対象としているテキストソースのリスト (The LAEME Index of Sources) を,様々な角度から検索して取り出すことができる.LAEME のテキストデータベースを年代別,方言別,Grid Reference 別などの基準で分析したい場合に,適切なテキストの一覧を得られるので,LAEME 使いこなしのためには非常に重要な機能である.
しかし,もう少し検索式に小回りを利かせられたり,一覧の出力がコンパクトに表形式で得られれば使い勝手がよいだろうと思っていた.そこで,Index of Sources を独自にデータベース化し,SQL を用いて検索可能にしてみた.LAEME の使用者で,かつSQLを扱える人以外には何も役に立たないのだが,せっかく作ったので公開.
# Ancrene Wisse/Riwle のテキスト情報の取り出し
select TEXT_ID, MS, FILE, GRID, LOC, DATE, TEXT from ios where FILE like "%ar%t.tag" and TEXT like "%Ancrene%";
# Poema Morale のテキスト情報の取り出し
select TEXT_ID, MS, FILE, GRID, LOC, DATE, TEXT from ios where FILE like "%pm%t.tag" and TEXT like "%Poema%";
# Grid Reference の与えられているテキストの取り出し
select TEXT_ID, MS, FILE, GRID from ios where GRID != "000 000";
# DATE に "C13a" を含むテキストの取り出し
select TEXT_ID, DATE from ios where DATE like "%C13a%";
# 年代ごとに集計
select DATE, count(DATE) from ios group by DATE order by DATE;
# タグ付けされている語数をテキストごとに確認
select TEXT_ID, TAGGED_WORDS, PLACE_NAMES, PERSONAL_NAMES from ios;
# 全テキスト情報へのリンク集
select TEXT_ID, MS, FILE, URL from ios;
中英語の方言を研究していると,LALME の Dot Map 風のイングランド地図を描けると便利だと思う機会がある.LALME の地図を用いるのであればコピーしたりスキャンしたりすればよいし,オンラインの LAEME であれば "Mapping" 機能から "Feature Maps" で特に注目すべき言語項目に関する地図はデジタル画像で得られる.後者では,"Create a Feature Map" なるユーザーによる地図作成機能もおいおい追加されるとのことで,中英語方言学のヴィジュアル化は今後も進展して行くと思われる.
しかし,それでも様々な困難や不便はある.例えば,LAEME でも,自分の関心のある言語項目が LAEME 自体で扱われていなければ地図作成機能は役に立たないし(例えば,私の中英語名詞複数の研究では名詞の歴史的な文法性が重要だが,LAEME text database では性がタグ付けされていないのでフルには活用できなかった),LALME についてはそもそも地図がデジタル化されていず応用しにくい(地図のデジタル化,少なくともテキスト情報や座標情報のデジタル化が一刻も早く望まれる).
それでも,手をこまねいて待っているわけには行かない.既存のツールと自分の関心は大概ずれているものであり,自ら研究環境を作る必要に迫られるのが常だからだ.中英語の方言地図に関する限り,LALME や LAEME からテキストの方言付与情報さえ得られれば,自ら集めた言語項目に関するデータを地図上にプロットすることは十分に可能である.(需要は少ないと思われるが)その作業を少しでも簡便化するために,HelMapperUK なる CGI を作成してみた.英国のベースマップ上にデータポイントをプロットするという単機能に特化しており,凡例をつけるなどの付加機能はないが,ヴィジュアル化して概観をつかむという用途には十分と思われる.
本ブログでは,古英語,中英語,現代フランス語の引用や,IPA 「国際音標文字」などの発音記号を入力する機会が多いのだが,量が多いと,特殊文字や特殊記号の打ち込みが患わしくなってくる.この際だからと思い,ASCII文字だけで入力できる記法を定義し,それを目的の文字・記号へ変換するツールを作成してみた.英語史の周辺で用いることの多い文字・記号だけを変換の対象にしたので,名付けて hel typist.仕様,入力例,記法一覧はこちら.
以下に,汎用の Log-Likelihood Tester, Ver. 2 を公開.(後に説明するように,入力データのフォーマットに不備がある場合や,モードが適切に選択されていない場合にはサーバーでエラーが生じる可能性があるので注意.)
| though | although | |
|---|---|---|
| Natural and pure sciences | 56.3 | 80.13 |
| Applied science | 37.36 | 68.31 |
| World affairs | 45.81 | 68.2 |
| Social science | 48.98 | 63.38 |
| Commerce and finance | 46.18 | 57.21 |
| Arts | 74.07 | 52.93 |
| Leisure | 45.85 | 49.46 |
| Belief and thought | 70.78 | 46.75 |
| Imaginative prose | 80.2 | 26.37 |
何らかの基準で集めた英単語のリストを,一般的な頻度の順に並び替えたいことがある.例えば,[2011-03-22-1]で論じたように,頻度と不規則な振る舞いとの関係を調べたいときに,注目する語(群)の一般的な頻度を知る必要がある.この目的には,[2010-03-01-1]で紹介したような大規模な汎用コーパスに基づく頻度表が有用である.BNC lemma-pos list (122KB) や ANC word-tagset list (7.2MB) などで問題の語を一つひとつ検索し,頻度数や頻度順位を調べてゆけばよいが,語数が多い場合には面倒だ.そこで,上記2つの頻度表から,入力した語(群)の頻度と順位を取り出す CGI を作成した.
改行でもスペースでもカンマでもよいのだが,区切られた単語リストを以下のボックスに入力し,"Frequency Sort Go!" をクリックする.出力結果を頻度順位の高い順にソートする場合には,"sort by rank?" をオンにする(デフォルトでオン.オフにすると,入力順に出力される).例えば,現代標準英語に残る純粋に i-mutation を示す複数形は以下の7語のみである(複合語,二重複数,[2011-04-01-1]で話題にした sister(e)n は除く).これをコピーしてボックスに入力する.
foot, goose, louse, man, mouse, tooth, woman
昨日の記事[2011-03-24-1]で Log-Likelihood Test を話題にした.計算には Rayson 氏の Log-likelihood calculator を利用すればよいと述べたが,実際の検定の際に作業をもう少し自動化したいと思ったので CGI を自作してみた.細かい不備はあると思うが,とりあえず公開.
BNC_Male_Speakers BNC_Female_Speakers new 149 91 good 408 310 free 173 75 fresh 84 118 delicious 12 34 full 210 107 sure 532 328 clean 197 223 wonderful 270 258 special 177 82 crisp 10 16 fine 347 215 big 470 415 great 203 96 real 163 80 easy 326 157 bright 113 110 extra 347 203 safe 182 92 rich 120 45 #-------- corpus_size 4949938 3290569
男女間で有意差の特に大きいのは,対応行が赤で塗りつぶされた fresh, delicious, clean, wonderful, big で,いずれも期待度数に基づいて計算された Diff_Co ( "Difference Coefficient" 「差異係数」 ) がマイナスであることから,女性に特徴的な形容詞ということになる.big は意外な気がしたが,おもしろい結果である.一方,男性に偏って有意差を示すのは黄色で示した easy や rich である.この結果はいろいろと読み込むことができそうだし,より詳細に調べることもできる.広告の形容詞という観点からは,話者ではなく聞き手の性別,年齢,社会階級などを軸に調査してもおもしろそうだ.いろいろと応用できる.
[2011-01-03-1], [2011-01-04-1]の記事で,OED 検索語彙を初出世紀ごとに分類して数え上げるという作業を行なった.よく考えてみると,このような作業はこれまでにも様々な調査・研究で繰り返し行なってきたことである.通時的語彙研究の基礎作業として今後も繰り返し行なう作業だと思われるので,OED の出力結果をもとに世紀ごとに数え上げるためのツールを作っておくことにした.名付けて "OED Century-by-Century Sorter".
以下は使用方法の説明だが,The Oxford English Dictionary. 2nd ed. CD-ROM. Version 3.1. Oxford: OUP, 2004. での作業を前提としている.ヴァージョンが異なると動かないかもしれないのであしからず.
(1) OED の ADVANCED SEARCH 等により,特定の条件に該当する語彙リストを出力させる.
(2) 下のテキストボックスに,(1) の検索に適当につけた簡便なタイトルを,ピリオド1文字の後に続けて入力する.例えば ".alchemy" .これが見出し行となる.
(3) テキストボックスで改行後に,(1) の出力結果を丸ごとコピーして貼り付ける.OED での出力結果が1画面に収まらない場合には次ページに進んで累積コピーし,テキストボックスに累積して貼り付けてゆく.年代順にソートされていなくても可.
(4) 続けて別の検索を行なう場合には (1), (2), (3) の作業を繰り返す.テキストボックスには,貼り付けたテキストが累積されてゆくことになる.
(5) Go をクリックすると,各検索結果について世紀ごとにカウントされた表が現われる.
説明するよりも実例を見るのが早いので,こちらのテキストファイルを用意した.これは,OED の ADVANCED SEARCH で "language names" にそれぞれ Japanese, Chinese, Malay, Korean, Vietnamese を入れて検索した結果の語彙リストを上記の仕様で納めたもの.これらの言語からの借用語数を世紀ごとに把握するのが狙いである.もっとも,OED の検索機能の限界で,それなりの数の雑音が結果リストに混じっているのでその点には注意.この(ような仕様に則った)テキストをコピーして,以下のテキストボックスに貼り付け,Go をクリックすれば表が出力される.
CGI スクリプトは大雑把な仕様なので,およその傾向を知るためのツールとして参考までに.特に以下の点に注意.
・ 初出年が "a1866", "c1629", "15..", "?c1400" などとなっている語はそれぞれ19, 17, 16, 14世紀へ振り分けられる
・ 初出年の記載のない語は一括して「0世紀」として振り分けられる
(後記 2011/04/24(Sun):OED Online の Timeline 表示では,初出世紀の頻度をグラフ化までしてくれるので,今回の CGI よりも使い勝手がよい.ただし,CD-ROM版の OED で作業するときや,設定に細かいチューニングが必要な場合のために自作した.)
[2010-04-03-1]の語源情報抜きだしCGIの改良版.情報源は同じ Online Etymology Dictionary.今回の「一括版」は複数の語の語源を一覧したいときに便利.1行1語で入力された単語リストを用意し,それを以下のテキストエリアに入れて Go するだけ.1語だけでも使えるので,事実上,前回の版の上位互換.語数が多いと時間がかかるし,サーバに負担がかかるので注意.
こうしてますます面倒くさがりになってゆく.
電子辞書はもちろんのこと,今ではWeb上で利用できる英語辞書も数え切れないほど出ており,紙の辞書を引く時代に育ったものとしては驚きの世の中になった.あまたあるWeb辞書のなかでも,個人的に使う機会の多い英英辞書が Dictionary.com である.複数の辞書を横断しての「串刺し検索」が可能である.また,簡便な語源情報が "Word Origin & History" という項で得られるので,これだけのために参照することもある.語源と例文が特に有用なので,私は毎日ランダムに単語情報を自動配信してくれるサービス "Word of the Day" にも登録している.
もっとも,語源情報だけを参照したいのであれば,"Word Origin & History" の提供元である Online Etymology Dictionary を直接検索するのがはやい.(c) 2001-2010 Douglas Harper による英語語源のサイトで,簡単便利.これだけでも十分に簡単便利なのだが「辞書の雑多な情報はいらない,とりあえず語源情報だけを今すぐ欲しい,早く早く!」という(私だけの?)喫緊のニーズに対応し,一発スクリプトを作って使っている.特に初出年やどの言語から来ているかを即座に知りたいときに重宝している.
そのスクリプトのCGI版を以下に作ってみた.単に Online Etymology Dictionary の検索結果から語源記述の部分をぬきだすだけのもの.電子検索が可能になると,どんどん面倒くさがりにになってゆく・・・.
Powered by WinChalow1.0rc4 based on chalow