昨年、 TP に関する思案をしていたが、本日 Ziphil(@ziphil) 氏のシャレイア語配信のさなか TP の話題が出たこともあり、改めて TP に関する思案をする流れとなった。
(昨年の思案については下記記事を参照。)
この思案のさなかで、Ziphil( @ziphil ) 氏やA.I.( @a_i )氏の助力のもと、CTWI(常用トキポナ語数計度)についてまとまった成果を得たので説明していく。
TP とは
そもそもTPとは何か、ということだが、昨年の記事でも説明しているので、ここではざっと概略を示すだけにとどめて、詳細は昨年の記事や「人工言語学Wiki」(「Migdal Conlang Wiki」に統合・移行予定)の記事を参照されたい。
TPとは、モヤ氏が提案した計算が容易かつ感覚的に測りやすい語彙数の尺度である。また、語彙数を議題とした話し合いでも用いられる。
定義
名称:TWI トキポナ語数計度 Toki-Pona Word-Count Index
単位記号:tp
計算式:
解説:従来「TP値」と呼ばれていた、語数を(トキポナの語数である)120で割った指標である。計算式が単純な反面、関数が単調増加であって、小さい語数や大きい語数、すなわちトキポナの語数120から離れた語数だと数値が直感的でなくやや使いづらいという問題がある。
名称:CTWI 常用トキポナ語数計度 Common Toki-Pona Word-Count Index
単位記号:ctp
計算式:
解説:従来log TPと呼ばれていた(「PTP」とも呼ばれていた)常用対数値に改訂を加えたものである。ただ、今回の思案で対数の底を10から120に変えたので常用対数値ではなくなったが、変わらず常用トキポナ語数計度と呼ぶことにするので、注意されたい1。
計算値
主要な語数で計算してみた結果が以下である。
言語 | 語数 | TWI | CTWI |
---|---|---|---|
基数 | 1[word] | 0.008[tp] | 0[ctp] |
二進数 | 2[word] | 0.017[tp] | 17.374[ctp] |
核 | 120[word] | 1[tp] | 120[ctp] |
常用 | 250[word] | 2.083[tp] | 138.397[ctp] |
トキポナ | 750[word] | 6.25[tp] | 165.934[ctp] |
オエル語 | 900[word] | 7.5[tp] | 170.504[ctp] |
ロジバン | 1200[word] | 10[tp] | 177.715[ctp] |
実用可 | 2500[word] | 20.833[tp] | 196.112[ctp] |
シャレイア語 | 2860[word] | 23.833[tp] | 199.484[ctp] |
低学歴N | 5000[word] | 41.667[tp] | 213.486[ctp] |
高学歴N | 10000[word] | 83.333[tp] | 230.86[ctp] |
アルカ | 12000[word] | 100[tp] | 235.43[ctp] |
著名作品 | 20000[word] | 166.667[tp] | 248.234[ctp] |
自然言語 | 120000[word] | 1000[tp] | 293.145[ctp] |
英語 | 500000[word] | 4166.667[tp] | 328.916[ctp] |
思案過程
CTWIの乗算・加算の定数が主要な思案内容であった。
Ziphil(@ziphil) 氏もこう述べるとおり、対数をとった結果の負の値の処理に悩んでおり、加算をしようということになった。
120語未満で負の数が出てくるのがちょっと気持ち悪いので、定数を加算して調整したい気持ちもある。
このとき乗算の定数が100で固まろうとしていたこともあり(経緯は前回記事の検討節を参照)、最小値である(単語数1のときの)-207.92を0以上にするキリの良い数ということで300加算にしようかなどと考えあぐねていた。
負の単語数はないと思うので、0の時に0になってくれるとうれしいかもですね
A.I.( @a_i )氏のこの提案により、思い切って底を10から120に変えることにした。こうすることで、乗算・加算したときに1語と120語のときにキリが良くなる(華氏温度のように)のである。
この後、A.I.( @a_i )氏のこの提案により、1語のとき0に、120語のとき120なるように乗算・加算定数を決めることになった。
120語の時に120にするとか?
これにより、結果として冒頭のこの計算式に至ることになった。
試算
この思案(ラウンド2)においても、例に漏れることなくDartプログラムによる試算のお世話になった。ここに用いたプログラムを掲げる。
import "dart:math";
import "package:intl/intl.dart";
void main(){
NumberFormat f = NumberFormat("###0.###", "en_US");
Map<String, int> tab = <String, int>{}
.put("基数", 1)
.put("二進数", 2)
.put("核", 120)
.put("常用", 250)
.put("トキポナ", 750)
.put("オエル語", 900)
.put("ロジバン", 1200)
.put("実用可", 2500)
.put("シャレイア語", 2860)
.put("低学歴N", 5000)
.put("高学歴N", 10000)
.put("アルカ", 12000)
.put("著名作品", 20000)
.put("自然言語", 120000)
.put("英語", 500000);
String res = pTestTWDsTable(tab,f,TableOutput.normal);
print(res);
}
double flog(num x, [num? ladix]) {
if (ladix == null) {
return log(x);
} else {
return log(x) / log(ladix);
}
}
//Common Log
double clog(num x) {
return flog(x, 10);
}
String pTestTWDsTable(Map<String, int> tab, NumberFormat f, TableOutput to){
String mdLab = "| 言語 | 語数 | TWI | CTWI |\n| --- | --- | --- | --- |\n";
switch(to){
case TableOutput.normal:
return tab.map((String lab, int data)=>MapEntry(lab,pTestTWDs(lab,data, f,to))).values.join("\n");
case TableOutput.md:
return mdLab + tab.map((String lab, int data)=>MapEntry(lab,pTestTWDs(lab,data, f,to))).values.join("\n");
}
}
String pTestTWDs(String label, int word, NumberFormat f, TableOutput to){
switch(to){
case TableOutput.normal:
return "$label: $word[word], ${f.format(calcTWD(word))}[tp], ${f.format(calcCTWD(word))}[ctp]";
case TableOutput.md:
return "| $label | $word[word] | ${f.format(calcTWD(word))}[tp] | ${f.format(calcCTWD(word))}[ctp] |";
}
}
double calcTWD(int word)=>word/120;
double calcCTWD(int word)=>flog(calcTWD(word),120)*120+120;
extension MapCtl<K, V> on Map<K, V> {
Map<K, V> put(K key, V value) {
this.putIfAbsent(key, () => value);
return this;
}
}
enum TableOutput{
normal,
md,
}
-
これについてであるが、対数の底の変換を上のように行うことにより引き続き常用対数であるものと考えることができる。 ↩
Oldest comments (14)
シャレイア語、2620語強でしたね
一桁しか合ってなくてすみません/(^o^)\
次の ZpDIC アップデートで試験的に ctp 値を表示するようにしてみます。
120log120120W+120 って 120log120W に等しいので、定義式はこっちの方が良いかも。
( log120x=log10120log10x≒0.48096log10x を利用して「常用」だと言い張る)
おお。ブラッシュアップありがとうございます!反映しておきます
そういえば、「常用トキポナ語数計度」、名前は変えたほうが良いかと思はれ
時期によって数値の意味が変わるとあまり良くないと思うので
旧定義時代に常用のを使っている人は殆ど皆無だったしそんなに影響ないと思われ
←人工言語学 Wiki で存在は知ってたんだけどね
CTWI、序盤で急激にゆっくりになるのはちょっと悲しい (?)
(1 語 → 2 語では 17.37 も上がるのに、語数が 2 桁台に入る頃には上がり幅が 3 にも満たなくなるので)
うーむ、どうだろう?
グラフ描いてみたけど、挙動的にも満たしたい性質からして妥当だと思うのだが。
@ziphil @a_i どう思います?
性質としては望ましいように見えますね(たんに造語序盤でちょっと悲しいねって言いたかっただけ)
それならもうちょい後ろに押してskewさせた版(仮称STWI; Skewed-Common TWI)作る?
おかゆさんが √(eγ W) log(eγ W) を提案してて、初期に伸びすぎる点と後で全然伸びない点を結構直感に沿う形で改善してるので、結構良いんじゃないかなと思ってます。
zenn.dev/pokapoka_jigoku/scraps/f0...
対数と人生はそういうもの(いいえ)