2022年4月16日土曜日

にほんごであそぼ

 4月のNHKの番組改編では例年より大幅なものとなった。その中でも,Eテレのにほんごであそぼの評判が極めて悪かったので,録画を飛ばし飛ばしちょっとだけチェックしてみた。

うーん,頭にポットをつけたお姉さんが,百発百中の説明というかゲームに無駄な時間を費やすだけで時間が過ぎてゆく。部分的に以前のフレーバーが残っているものの,伝統芸能のかけらもなく,貴重だった織太夫,清介,勘十郎の文楽のコーナーも見当たらなかった。

1979年に福音館書店から出版された「にほんご」は,安野光雅,大岡信, 谷川俊太郎,松居直によって,小学校低学年の国語の教科書に代わるものとしてデザインされた労作だった。子供が小学校にあがるまで,ふとんの中でよく読んだものだ。そのフレーバーやコンセプトがふんだんに盛り込まれたのが,NHKの「にほんごであそぼ」だったが,番組改編で大変残念なことにそれが失われてしまった。

NHKはニュース系がひどくても,Eテレがあるからと我慢していた。この調子だと本当に全部がダメになりそうで怖い。まあ,あの優等生的で擬似中立主義的な総体による隠れた洗脳が問題だというのであれば,Eテレの優良番組だってどうなのよということかもしれないが。


写真:福音館のにほんごの書影(福音館書店から引用)

2022年4月15日金曜日

Wボソンの質量

4月7日付のScienceに,CERMのCDF実験によるWボソン質量の精密測定の結果が報告された。アブストラクトを訳すと次のようになる。

素粒子間の弱い力の媒介となるWボソンの質量は,素粒子物理学の標準模型の対称性によって厳しい制約を受けている。ヒッグス粒子は,この標準模型の最後の欠落部分であった。ヒッグス粒子が観測された後,Wボソンの質量を測定することで,標準模型を厳密に検証することができる。

私たちは,フェルミ国立研究所テバトロン加速器のCDFII検出器を用いて,重心エネルギー1.96 TeVの陽子・反陽子衝突で収集した8.8 /fb の積分光度に相当するデータを用いてWボゾンの質量M_Wを測定した。約400万個のWボゾン候補のサンプルを用いて,M_W = 80,433.5 ± 6.4 stat ± 6.9 syst = 80,433.5 ± 9.4 MeV/c^2 を求め,その精度はこれまでのすべての測定値を合わせたものを超える。この測定は、標準模型の予想と大きく異なる(注:標準理論では,M_W = 80,357 ± 6 MeV/c^2,7σの食い違い)。

標準理論の綻びは,ミューオンの異常磁気能率 のところにも現れていたので,いよいよ新しい物理が見えそうな期待感が高まる。ただ,野尻さんは論文のアペンディックスを見て懐疑的な感想を述べているので,まだどうなるかわからない。Wボソンの質量とニューオンの異常磁気能率の組み合わせが,標準理論の矛盾を大きくする方向に働いているようだ。

早速,様々な理論が話題になっているけれど,レプトクォークよりヒッグス粒子のダブレットの方が無難なのかもしれない。

 


写真:CDF 検出器(FNALから引用)

2022年4月14日木曜日

うさみ亭マツバや

大阪のきつねうどんの起源には諸説あるが,うさみ亭マツバやが元祖だというのがなんとなく有力らしい。一度行こうと思っていたので,午後の文楽のついでによってみた。

心斎橋筋を北に向かい,ちょっと右に折れると間口の狭いこじんまりした店があった。11:00開店で,11:30ごろについたが,既にお客さんがかなり入っている。早速きつねうどんとミニ親子丼のセットを注文した。

感想:味は普通。麺はやや太めでもっちゃりする。うどんの断面が丸くて箸から滑りました。油揚げも普通だ。これならば自宅で食べるスーパーの30円の生麺(断面は四角)+市販の味付け油揚げと大差ない。ただ,ミニ親子丼は昔ながらの玉子とじ状態でおいしかった。

食べているうちにも次々にお客さんが入ってきて,2階の席にも案内されている。隣の席ではおじさんが大阪弁で商売の話をしつつ「僕はしっぽくうどんにするわ」。お二人さんは,しっぽくうどんときつねとじうどんであり,なかなか味のある会話が流れてくる。

そういえば,金沢にいたころは,甘く炊いた大判の揚げのきつねうどんは存在しておらず,刻んだ揚げがのったいなりうどんだった。近所のうどん屋お多福の出前で,土曜の午後に天ぷらうどんとセットで食べていた。夏休みには泉丘高校のESSの部室に集まって勉強していたが,高橋君らと向かいのうどんやで大盛りのいなりうどんとかき氷を食べるのが日課だった。

入るときは気づかなかったが,大将がレジに座ってお会計をしていた。


写真:うさみ亭マツバや(撮影 2022.4.11)

2022年4月13日水曜日

摂州合邦辻

国立文楽劇場の四月文楽公演には,豊竹咲太夫文化功労者顕彰記念・文楽座命名150年のタイトルがついていた。第一部が義経千本桜,第二部が摂州合邦辻,第三部が嬢景清八嶋日記と契情倭荘子だ。コロナ流行が始まってからは,以前のような三部通しの観劇がしんどいので,今回は第二部を見ることに。

住吉大社万代池や天王寺界隈が舞台である摂州合邦辻。その万代池の段は,三輪太夫,希太夫,南都太夫,津國太夫,咲寿太夫,清友が並ぶ。公演記録の録画カメラが入っていたので,皆さん気合が入っていたようだ。最後に,吉田玉也の合邦道心によって,高安次郎丸の鬼若が,万代池に投げ込まれるのだが,池から可愛らしい顔を覗かせながら幕となる。

合邦住家の段は,中:睦太夫・清馗,前:呂勢太夫・清治,切:呂太夫・清介だった。今日は睦太夫が良かったと,家人と意見が一致した。声もはっきりと大きく変な癖がない。呂勢太夫と清治のコンビはうまいのだろうが,どうも自分にはピンとこない。一番良かったのは,呂太夫と清介だった。三味線の迫力やテクニックもすごくて(三の糸が切れた?),呂太夫も清介も熱演だった。

後半の玉手御前と浅香姫の激しいバトルでのキックには思わず笑ってしまった。この段は何度か見ているはずだけれど,百万遍の大数珠のイメージはすっかり消えていた。奴入平の吉田玉勢が,玉手御前の肝を取り出すのをビビって拒む当たりも面白い。

物語では,寅年,寅の月,寅の日,寅の刻に生まれた女の生肝の血が俊徳丸の毒を消すための薬になるという設定になっている。今年は寅年である。寅の月は旧暦の正月であり,2022年では,2月4日から3月4日までだ。寅の日は,12日ごとに巡ってきて,この度では,2月6日(日),2月18日(金),3月2日(水)。寅の刻は,24時間を12で割った3番目なので,午前3時から5時となる。


写真:浪速区下寺西方寺にある合邦辻閻魔堂(Wikipediaより引用)

2022年4月12日火曜日

真木悠介

 4月10日の夜7:00のNHKニュースで,見田宗介(1937-2022)の訃報が流れた。そういえば昔よく読んだものだと本棚を探したけれど見あたらなかった。何度か本の断捨離をしたときに,寄付に回してしまったようだ。

テレビでは,「現代社会の理論 −情報化・消費化社会の現在と未来−」を見田の代表作の一つとしてあげていた。調べてみたらこれは1995年の岩波新書であり,そのころには読む気がしなくなっていたので買わなかった・・・たぶん。大学1,2年の頃に,筑摩書房の箱入りのシリーズで,真木悠介名義の「人間解放の理論のために」とか,見田宗介名義の「現代日本の心情と論理」を買って愛読していた。いずれも,1971年の出版である。

当時は,ディヴィッド・リースマンの「孤独な群衆」から始まって,社会学の本を何冊か読んでいた。大学の教養の人文科学・社会科学では,哲学,倫理学,心理学,政治学,経済学は履修したが,社会学は取らなかったので,その埋め合わせもあり,「社会学のすすめ」から始まって色々と読みあさった・・・たぶん。

社会学といえば,1972年に阪大教養部の助教授だった井上俊(1938-)の「死にがいの喪失(1973)」はまだ本棚で生き延びていた。当時は真木悠介の本の方が良いと思っていたはずなのだけれど。

2022年4月11日月曜日

Wordle(8)

Wordle(7)からの続き

Wordle支援プログラム word.py を改良して,出現しない文字を含む単語をとり除く処理を1行加えた。第3引数に出現しない文字を連結して並べたものを与える。

# usage: warp.py w.txt a.b.c def

import sys
import re

f = open(sys.argv[1], 'r')
datalist = f.readlines()
arg1 = sys.argv[2]
arg2 = sys.argv[3]

for data in datalist:
  if(re.search(r'\d* '+arg1, data) != None):
    if(re.search('['+arg2+']', data) == None):
      print(data, end="")

f.close()

2022年4月10日日曜日

Wordle(7)

Wordle(6)からの続き

wiki-5.txtは,WIkipediaデータセットのWikiText-103 word から5文字単語を取り出したものだった。これに対して,n-gramの出現頻度を,1-gram, 2-gram, 3-gramに対して求めるpythonプログラム ngrm.py を作る。1-gramはアルファベット1文字,2-gramは連続するアルファベット2文字,3-gramは連続するアルファベット3文字を表している。

ngrm.pyの出力結果は , を区切り文字として,出現回数とn-gramパターンの組なので,sort で区切り文字を , 数値として解釈した逆順をリダイレクトして適当なファイルに格納すると,1-gramから3-gramまで混ぜた出現頻度順のファイルが出来上がる。
# usage: ngrm.py wiki-5.txt | sort -n -r -t , >! alphabet 
import sys

a=[0 for i in range(26)]
b=[[0 for i in range(26)] for j in range(26)]
c=[[[0 for i in range(26)] for j in range(26)] for k in range(26)]

def n_gram(target, n):
  return [ target[idx:idx + n] for idx in range(len(target) -n + 1) ]

f = open(sys.argv[1], 'r')
datalist = f.readlines()

for data in datalist:
  for l in range(5):
    x = data[l]
    i = ord(x) - 97
    a[i] = a[i] + 1
    if l in range(4):
      y = data[l+1]
      j = ord(y) - 97
      b[i][j] = b[i][j] + 1
      if l in range(3):
        z = data[l+2]
        k = ord(z) -97
        c[i][j][k] = c[i][j][k] + 1

for i in range(26):
  if a[i] > 49:
    print(a[i],",",chr(i + 97))

for l in range(26*26):
  i = l // 26
  j = l % 26
  if b[i][j] > 49:
    print(b[i][j],",",chr(i+97)+chr(j+97))

for l in range(26*26*26):
  i = l // (26*26)
  j = (l // 26) % 26
  k = l % 26
  if c[i][j][k] > 49:
    print(c[i][j][k],",",chr(i+97)+chr(j+97)+chr(k+97))

f.close()
wiki-5.txtにおけるベスト50は次のとおりであった(数字は出現数)。

5730707 , e

4092848 , r

3965317 , a

3759319 , t

3424032 , s

3108801 , o

3068296 , i

2603632 , h

2600893 , l

2398537 , n

1734820 , d

1574948 , c

1501211 , u

1291809 , w

1195832 , m

1086248 , g

1076779 , er

964115 , f

962898 , th

882193 , b

801081 , p

746024 , te

729576 , y

674447 , he

651813 , ou

636278 , st

604734 , ar

563176 , hi

559096 , re

556926 , v

556020 , or

533535 , in

521374 , k

521197 , es

519713 , ch

518219 , ir

514744 , al

514410 , wh

493762 , the

473288 , ea

427832 , le

417701 , ic

412433 , whi

412193 , an

409812 , il

384013 , la

372098 , at

369592 , se

364056 , ed

362684 , ter


2022年4月9日土曜日

Wordle(6)

 Wordle(5)からの続き   

Wordleを解くための支援プログラムを次のようなものとする。「5文字単語のデータベースを用意して,ワイルドカードを含む与えられた候補にマッチする単語を全て選び出して表示する」。perlでプログラムを組みたいところだったが,pythonの練習をすることにした。

5文字単語データベースとしては,前回示した WikiText-103 word Level からwords.shで処理したものを用いる。その後は,久々の python プログラミングなので,よちよち歩きながら試行錯誤する。

(1) コマンドラインの引数は,sysモジュールをimportすれば,sys.argv[n]でアクセスできる。sys.argv[0]はpythonスクリプト名,sys.argv[1] 以下で複数の引数を受け渡す。
(2) ファイルのオープンとクローズの方法は記載の通り。第1引数は先に求めてある5文字単語データファイル名である。
(3) テキストファイルを1行づつ分割して読み込むには,datalist=f.readlines() などとするとその結果のリストが 得られる。
(4) perlのようにdatalistから1行づつ取り出して処理をするのが,for data in datalist: である。
(5) 正規表現によるマッチングには,re モジュールをimportしたうえで,re.search(r'正規表現' , 原データ) という形式による。これが Noneでなければマッチしていることになる。
(6) 第2引数で入力する5文字のワイルドカードをピリオド(. )にしておけばそのまま正規表現として使えてるので便利である。
(7) データファイルは,wc -l で生成しているので,頭に頻度を表した数桁の数字が空白を区切りに付加されているため,'\d* '+arg としている。文字列の結合には,プラス(+)演算子を用いる。
(8) print文で余分の改行を削除するには,end="" をつければよい。
# usage: word.py w.txt a.b.c
import sys
import re

f = open(sys.argv[1], 'r')
datalist = f.readlines()
arg = sys.argv[2]

for data in datalist:
# print(arg, data, re.search(r'\d* '+arg, data))
  if(re.search(r'\d* '+arg, data) != None):
    print(data, end="")

f.close()

2022年4月8日金曜日

Wordle(5)

Wordle(4)からの続き

前回の復習:英文のテキストデータセットと単語の文字数 n が与えられたとする。文字数がnの単語を1行とした一時ファイルを作る。大文字は小文字に変換している。次に,wc -l によって一時ファイルの行数=n文字単語数を出力したものを並べたファイルを作る。また,上記の wc -l の前にsort | uniq フィルターをかけてユニークな n文字単語数についても同様のファイルを作る。これが,前回のwords.shプログラムのアルゴリズムだった。

具体例として,最初は手元にある数冊の英書の数千ページ(80MB)のpdfファイルからユニークにソートされた5文字単語(3万4千語)を抽出したものでテストした。もう少し大きなデータがないかと,オープンコーパスを色々探してみたが,なかなか適当なものがない。

最終的に,Wikipediaの記事を使ったデータセットにたどり着いた。多言語のWIki-40Bが前処理済で良さげだったが,TensorFlowを使えという指示が面倒であり,英語データで340万ページ2GBは大きすぎる。WikiText-103 Word Levelの方は,圧縮後181MBでそのままダウンロードできそうなので,こちらを使うことにした。

WikiText-103 Word Levelの解凍後のテキストデータは539MBあった。これをwords.shにかけると,1-20文字の単語(うちユニークな語)が約8300万語(約21万語),このうち5文字の単語(うちユニークな語)が約960万語(約2万4千語)であった。

WikiText-103 Word Level における,n文字単語(うちユニークな語)の出現頻度を下図に示す(オレンジが総語数の出現頻度,ブルーがユニーク語数の出現頻度)。n文字単語の出現ピークはn=3にあって約20%,ユニークなn文字単語の出現ピークはn=7にあって,約16%となった。5文字単語の場合は,ともに約11%となっている。


図:WikiText-103 Word Levelにおける単語出現頻度(横軸は文字数)

2022年4月7日木曜日

2022年4月6日水曜日

2022年4月5日火曜日

2022年4月4日月曜日

2022年4月3日日曜日

2022年4月2日土曜日

2022年4月1日金曜日

2022年3月31日木曜日

2022年3月30日水曜日

Wordle(4)

Wordle(3)からの続き

Wordleをやっていると,そもそも英語の文章で出てくる単語のうち5文字である確率はどんなものか,また,最もよく出現するのは何文字の単語なのか,などなどが気になるようになった。

これを調べるために,与えられたテキストファイルやpdfファイルから単語を切り出して,その文字数の分布を調べるためのシェルスクリプトを作ってみた。

case \$3 in
"txt")
echo "txt";
;;
"pdf")
echo "pdf";
pdftotext \$2.pdf;
;;
*)
echo "undefined";
;;
esac

for ((i=1 ; i<=\$1 ; i++))
do
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$i \$2.txt | tr A-Z a-z > tmp.txt
cat tmp.txt | wc -l >> \$2-\s1.txt;
cat tmp.txt | sort | uniq | wc -l >> \$2-\s2.txt;
rm tmp.txt
done
昨日のスクリプトを少しだけ修正すればよかったが,ポイントは,シェルスクリプト中の反復の記述法である。繰り返し変数は$をつけて,perlのワンライナーに受け渡すことができた。あとはこれを使って実験してみれば良いのだが,それはまた次回のお楽しみ。

2022年3月29日火曜日

Wordle(3)

Wordle(2) からの続き

Wordleは英語の勉強になる。簡単な5文字の英単語でも知らないものがたくさんあって,自分の語彙力はやはり10歳並みだということが確かめられる。そのため,辞書の助けがないと5-6回で答えに辿り着くことは出来ない。

巷には,Wordle Word Finderなどというツールも登場しているが,これでは英語学習の役には立たない。それでも,5文字の英単語のリストを収集したいという目的のために,次のようなツールを作った。与えられたテキストファイルあるいはpdfやhtmlファイルをテキストに変換したものから,perlのワンライナーで n 文字の単語を切り出すものだ。

pandocは汎用の文書型変換ツールだけれど,pdfやhtmlからテキストを取り出すという想定がない。あくまでも整形された文書変換ツールだからだ。そこでテキストファイルの取り出しには,pdftotextやtextutilなどのコマンドに任せることにした。また,シェルスクリプトの引数はperlのワンライナーにそのまま送れないので, -- -perl_var=\$shell_varとして,perlの中で\$perl_varによって引用することになる。
#! /bin/zsh
# usage: word.sh 5 sample pdf (tst, txt, pdf, html)
# output sample-5.txt

case \$3 in
"tst")
pwd;
ls -al \$1.txt;
ls -al \$2.*;
;;
"txt")
echo "txt";
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
"pdf")
echo "pdf";
pdftotext \$2.pdf;
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
"html")
echo "html";
textutil -convert txt \$2.html;
perl -nse 'while (/\b[a-z]{\$num}\b/ig) {print "\$&\n";}' -- -num=\$1 \$2.txt | tr A-Z a-z > \$2-\$1.txt;
;;
*)
echo "undefined"
;;
esac

2022年3月28日月曜日

ロフテッド軌道(3)

 ロフテッド軌道(2)からの続き

初速度を第1宇宙速度$v=\sqrt{\frac{GM}{R}}$に固定した場合,Mathematicaによるプロットを試みる。このとき,$u(\varphi)=A(\theta) \cos \varphi + B(\theta) \sin \varphi +\frac{GM}{h^2}$,$A(\theta)= - \frac{1}{R \tan^2 \theta }$,$B(\theta) = -\frac{1}{R \tan \theta}$,$\frac{GM}{h^2}=\frac{1}{R \sin^2 \theta}$ であり,Mathematicaのコードは以下のとおり。

In[1]:= {G, R, M} = {6.67*10^-11, 6.37*10^6, 5.97*10^24}
Out[1]= {6.67*10^-11, 6.37*10^6, 5.97*10^24}
In[2]:= {g, v} = {G M /R^2, Sqrt[G M/R]}
Out[2]= {9.81344, 7906.43}

In[3]:= A[t_] := 1/R*(1 - 1/Sin[t]^2)
In[4]:= B[t_] := -1/(R*Tan[t])
In[5]:= GM[t_] := 1/(R Sin[t]^2)
In[6]:= r[s_, t_] := 1/(A[t] Cos[s] + B[t] Sin[s] + GM[t])
In[7]:=
Table[f1[i] = Plot[{r[s, i]/R, 1}, {s, 0, Pi},
GridLines -> Automatic, PlotRange -> {0, 2.0}];, {i, 0.1, 1.5, 0.2}];
In[8]:= Show[Table[f1[i], {i, 0.1, 1.5, 0.2}]]
In[9]:=
Table[f2[i] = PolarPlot[{r[s, i]/R, 1}, {s, 0, Pi},
GridLines -> Automatic, PlotRange -> {0, 2.0}];, {i, 0.05, 1.5, 0.2}];
In[10]:= Show[Table[f2[i], {i, 0.05, 1.5, 0.2}]]

In[11]:= f[t_] :=
NIntegrate[ 1/Sqrt[G M R Sin[t]^2] *1/(A[t] Cos[s] + B[t] Sin[s] + GM[t])^2, {s, 0.001, Pi/30}]
In[12]:= Plot[f[t], {t, 0, Pi/8}]



図1:ロフテッド軌道(横軸$\varphi$ラジアン,縦軸$r/R$)


図2:ロフテッド軌道(上記と同じものを極座標表示)

この近似のもとでは,6500kmの高度に達する弾道ミサイルはほぼ地球を半周するところまで到達できるので,北朝鮮から米国本土全体が射程に入ることになる。鉛直上方から60度の角度で射出すれば,地球を1/4周するので1万kmまで到達できる。

実際には,空気抵抗があることや,初速度はロケットエンジンによる一定時間の加速によって獲得されることなどから,もう少し真面目な計算をする必要がある。

[1]ロケットの運動と人工衛星の打ち上げ(冨田信之)