Watson Explorer (WEX)での和暦⇔西暦をパターン辞書で取得する方法

#1. Watson Explorer (WEX)とは
Watson Explorer(WEX)とは、IBM製の文書分析ツールである。
WEXにCSVなどの文書を投入しWEXが文書に対して形態素解析を行うので、単語同士の関係性を見ることができ。また、ある単語で検索する場合、その単語と結びつきが強い単語が提示されるので、探していた文書の絞り込みが行いやすいといった特徴がある。

[参考]
[製品概要](https://www.ibm.com/jp-ja/products/watson-explorer)

#2. パターン辞書とは
WEXには2種類の辞書機能が存在する。
1つはユーザー辞書といい、製品名や化学物質名といった業界特有の専門用語をWEXに識別させるために登録するものである。これは、単語を登録し、単語に紐づく言い回し表現も登録することができる。
もう1つはパターン辞書といい、年月日など特定の決められたパターンの表現を識別するために登録するものである。これは、正規表現を組み込んだ形で登録できる。

#3. 和暦⇔西暦をパターン辞書
###【2019年, 2019/01/01, 2019/1/01, 2019/01/1, …などを2019年として抽出】
・[2019年]を識別

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^[2][0][1][9]$/"/>
　<w id="1" lex="/^(年)$/" />
</mi>
```


・[2019/01/01]を識別
/ は、\でエスケープする。月や日が二桁で表現されれいるものを抽出する。

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^[2][0][1][9](\/)[0-9][0-9](\/)[0-9][0-9]$/"/>
</mi>
```


・[2019/1/01]を識別
月が一桁で記述されているものを抽出する。

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^[2][0][1][9](\/)[0-9](\/)[0-9][0-9]$/"/>
</mi>
```

・[2019/12/1]を識別
日付が一桁で記述されているものを抽出する。

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^[2][0][1][9](\/)[0-9][0-9](\/)[0-9]$/"/>
</mi>
```


###【平成31年, H31.1.1,平成三十一年 …などを2019年として抽出】
・[H31年]、[平成31年]を識別

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^((H)|(平成))/"/>
　<w id="1" lex="/^[3][1]$/"/>
　<w id="2" lex="/^(年)$/" />
</mi>
```

・[H31.1.1]、[平成31.1.1]を識別

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^((H)|(平成))/"/>
　<w id="1" lex="/^[3][1](\.)[0-9](\.)[0-9]$/"/>
</mi>
```

・[平成三十一年]を識別

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^(平成)/"/>
　<w id="1" lex="/^[三][十][一]$/"/>
　<w id="2" lex="/^(年)$/" />
</mi>
```

###【‘19/01/01, ‘19, …などを2019年として抽出】
・['19/01/01]を識別
'をエスケープ。
この例ではよく見えないが、single-quoteも色々な single-quoteがあるので4つくらいパターンを作ってる。

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^((\')|(\’)|(\‘)|(\'))[1][9](\/)[0-9][0-9](\/)[0-9][0-9]$/" />
</mi>
```

・['19]を識別

```
<mi category="$.date_rule" value="2019年" >
　<w id="0" lex="/^((\')|(\’)|(\‘)|(\'))$/" />
　<w id="1" lex="/^[1][9]$/" />
</mi>
```

![year.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267162/cc815fe2-48a6-723e-bb86-d04d4f29c1f0.png)


###【2019年3月1日、2019年03月01日 …などを2019年3月1日として抽出】
・[2019年3月1日]を識別
3月は「3」と「月」ではなく「3月」としてWEXACは抽出する。

```
<mi category="$.date_rule" value="2019年3月1日" >
　<w id="0" lex="/^[2][0][1][9]$/"/>
　<w id="1" lex="/^(年)/" />
　<w id="2" lex="/^(3月)/" />
　<w id="3" lex="/^[1]$/"/>
　<w id="4" lex="/^(日)/" />
</mi>
```

・[2019年03月01日]を識別

```
<mi category="$.date_rule" value="2019年3月1日" >
　<w id="0" lex="/^[2][0][1][9]$/"/>
　<w id="1" lex="/^(年)/" />
　<w id="2" lex="/^[0][3]$/"/>
　<w id="3" lex="/^(月)/" />
　<w id="4" lex="/^[0][1]$/"/>
　<w id="5" lex="/^(日)/" />
</mi>
```

###【平成31年3月1日, H31年03年01日、 …などを2019年として抽出】
・[平成31年3月1日]、[H31年3月1日]を識別

```
<mi category="$.date_rule" value="2019年3月1日" >
　<w id="0" lex="/^((H)|(平成))/" />
　<w id="1" lex="/^[3][1]$/"/>
　<w id="2" lex="/^(年)/" />
　<w id="3" lex="/^(3月)/" />
　<w id="4" lex="/^[1]$/"/>
　<w id="5" lex="/^(日)/" />
</mi>
```

・[平成31年03月01日]を識別

```
<mi category="$.date_rule" value="2019年3月1日" >
　<w id="0" lex="/^((H)|(平成))/" />
　<w id="1" lex="/^[3][1]$/"/>
　<w id="2" lex="/^(年)/" />
　<w id="3" lex="/^[0][3]$/"/>
　<w id="4" lex="/^(月)/" />
　<w id="5" lex="/^[0][1]$/"/>
　<w id="6" lex="/^(日)/" />
</mi>
```

![date.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267162/f98800bd-de0d-81bb-524b-4584b27accb5.png)