Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

キー項目の重複

関係には、キーとよばれる項目があります。 キーは、その関係の主語のようなもので、 関係のなかに、キー項目が同じで、キー以外の項目が異なる組は ないことになっています。 もし、キーが同じで、キー以外が異なる組があるときは、 「キーが重複している」ことになり、 データを解釈する上で矛盾が生じることになります。

たとえば、気象観測の結果をまとめている場面で、 ある日の最高気温が 23 ℃ という情報があり、 同じ日の同じ場所の最高気温が 28 ℃ という情報もでてきたら、 どちらかが間違っていると思うでしょう。 これは、日付と観測地点がキー項目であることを、 わたしたちが、暗黙に、前提することで、 そのような判断が導かれているといえます。

コンピュータは、通常、常識をもっていないので、 そのような判断はできません。 自分で学習するコンピュータでなければ、 どれがキー項目かを指示する必要があります。 このノートでは、そのような重複するキーを求める 演算子 duplicate をとりあげます。

まず、簡単のため、つぎのような人工的な判断集合を考えましょう。 /x/y がキー項目であるとします。

|-- A  /x 'X1  /y 'Y1  /text "aaa"
|-- A  /x 'X1  /y 'Y2  /text "bbb"
|-- A  /x 'X2  /y 'Y1  /text "ccc"   ** キー項目の重複
|-- A  /x 'X2  /y 'Y1  /text "ddd"   ** キー項目の重複
|-- A  /x 'X3  /y 'Y3  /text "eee"
|-- A  /x 'X4  /y 'Y4  /text "fff"   ** 判断の重複
|-- A  /x 'X4  /y 'Y4  /text "fff"   ** 判断の重複

まず、判断 A を読み込み、それを duplicate に通します。 duplicate の引数にキーとなる項目を与えます。 この演算子は、与えられた項目をキーとみなしたときに、 キーが重複する組のみを通過させます。

a   : source A /x /y /text
dup : a | duplicate /x /y

さらに、この dup を項目 /x /y だけの関係にしましょう。

key : dup | pick /x /y

これらを判断種 DUPKEY の判断集合として書き出します。

|== DUP : dup
|== KEY : key

これを dup.k に保存し、甲州計算機で実行すると、つぎの出力が得られます。

** -*- koshu -*-
**
**  INPUT
**    dup.k
**

|-- DUP  /x 'X2  /y 'Y1  /text 'ddd
|-- DUP  /x 'X2  /y 'Y1  /text 'ccc
|-- KEY  /x 'X2  /y 'Y1

**
**  SUMMARY
**       2 judges on DUP
**       1 judge  on KEY
**       3 judges in total
**

重複した判断

|-- A  /x 'X4  /y 'Y4  /text "fff"   ** 判断の重複
|-- A  /x 'X4  /y 'Y4  /text "fff"   ** 判断の重複

は、同じ情報が 2 度あらわれるだけなので、 データ解釈が矛盾することもなく、 単に、重複が取り除かれます。

一方、キー項目が重複している

|-- A  /x 'X2  /y 'Y1  /text "ccc"   ** キー項目の重複
|-- A  /x 'X2  /y 'Y1  /text "ddd"   ** キー項目の重複

は、データ解釈が矛盾します。 duplicate /x /y によってキーの重複が判定され、

|-- DUP  /x 'X2  /y 'Y1  /text 'ddd
|-- DUP  /x 'X2  /y 'Y1  /text 'ccc

として出力されます。

重複したキーだけを確認したいときは、 つぎの判断集合が使えます。

|-- KEY  /x 'X2  /y 'Y1

このノートの内容は,甲州計算機バーラ実装のバージョン 0.38 にもとづきます.