企業名認識の辞書「JCLdic」をMeCabに使う



# この記事のついて

この記事は企業名辞書（JCLdic）の使い方を紹介します。
開発の経緯に興味がある方はこちらにご覧んでください。
[大規模企業名辞書「JCLdic」で企業名を認識する](https://fintan.jp/?p=5325)

# 辞書紹介

- [「JCLdic」公開ページ](https://github.com/chakki-works/Japanese-Company-Lexicon)

JCLdicは800万以上の企業名とその別名を含まれています。これまでの辞書では企業名のカバレッジが低く、表記揺れで認識にくいという問題を解決するために作られました辞書です。


# 辞書の取得

- [JCLdic Download Page](https://github.com/chakki-works/Japanese-Company-Lexicon#download-links)

JCL_slimを例にして、MeCab Dicをダウンロードします。

# 環境の準備

MeCabとmecab-python3インストールはまずやってください。

ダウンロードした`jcl_slim_mecab.dic`を指定のフォルダに移動します。

```bash
$ mkdir /usr/local/lib/mecab/dic/user_dict
$ mv jcl_slim_mecab.dic /usr/local/lib/mecab/dic/user_dict
```

MeCabの設定ファイル`mecabrc`を更新して、辞書のパスを書きます。

```
$ vim /usr/local/etc/mecabrc
```
`mecabrc`の中で、`dicdir`システムの辞書パス、`userdic`はユーザー辞書のパスです。JCLdicのパスを`userdic`に書きます。

```bash
dicdir =  /usr/local/lib/mecab/dic/ipadic
;dicdir =  /usr/local/lib/mecab/dic/mecab-ipadic-neologd
;dicdir = /usr/local/lib/mecab/dic/jumandic
;dicdir = /usr/local/lib/mecab/dic/unidic

userdic = /usr/local/lib/mecab/dic/user_dict/jcl_slim_mecab.dic
; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
```

複数のユーザー辞書のパスも指定できます。

```bash
userdic = /usr/local/lib/mecab/dic/user_dict/jcl_full_mecab_1.dic,/usr/local/lib/mecab/dic/user_dict/jcl_full_mecab_2.dic
```

これで準備が整いました。



# コマンドラインでJCLdicを使う


`jcl_slim_mecab.dic`を使わない結果：

```
echo "TISインテックグループのTIS株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic（日本会社名辞書）を無償公開。" | mecab

TIS     名詞,一般,*,*,*,*,*
インテック      名詞,固有名詞,組織,*,*,*,インテック,インテック,インテック
グループ        名詞,一般,*,*,*,*,グループ,グループ,グループ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
TIS     名詞,一般,*,*,*,*,*
株式会社        名詞,一般,*,*,*,*,株式会社,カブシキガイシャ,カブシキガイシャ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
、      記号,読点,*,*,*,*,、,、,、
......
EOS
```

`jcl_slim_mecab.dic`を使う結果：

```
echo "TISインテックグループのTIS株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic（日本会社名辞書）を無償公開。" | mecab

TIS     名詞,固有名詞,組織,*,*,*,有限会社TIS,*,*
インテック      名詞,固有名詞,組織,*,*,*,株式会社インテック,*,*
グループ        名詞,一般,*,*,*,*,グループ,グループ,グループ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
TIS株式会社     名詞,固有名詞,組織,*,*,*,TIS株式会社,*,*
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
、      記号,読点,*,*,*,*,、,、,、
......
EOS
```

ユーザー辞書の指定もできます。

```
echo "TISインテックグループのTIS株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic（日本会社名辞書）を無償公開。" | mecab -u /usr/local/lib/mecab/dic/user_dict/jcl_medium_mecab.dic
```

# PythonでJCLdicを使う 

企業名を認識します。

## 方法1：`parse` メソッド

```python
import unicodedata
import MeCab

# 1 specify dictionary by option
# tagger = MeCab.Tagger('-u /usr/local/lib/mecab/dic/user_dict/jcl_slim_mecab.dic')

# 2 import multiple dictionaries by mecabrc
tagger = MeCab.Tagger('-r /usr/local/etc/mecabrc')

text = 'TISインテックグループのＴＩＳ株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic（日本会社名辞書）を無償公開。'

# convert zenkaku to hankaku
text = unicodedata.normalize('NFKC', text) 

# parse
print(tagger.parse(text))
```

結果:

```
TIS     名詞,固有名詞,組織,*,*,*,有限会社TIS,*,*
インテック      名詞,固有名詞,組織,*,*,*,株式会社インテック,*,*
グループ        名詞,一般,*,*,*,*,グループ,グループ,グループ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
TIS株式会社     名詞,固有名詞,組織,*,*,*,TIS株式会社,*,*
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
、      記号,読点,*,*,*,*,、,、,、
...
EOS
```

## 方法２：`parseToNode` メソッド

`組織`キーワードで企業名エンティティを認識します。

```python
import unicodedata
import MeCab

# 1 specify dictionary by option
# tagger = MeCab.Tagger('-u /usr/local/lib/mecab/dic/user_dict/jcl_slim_mecab.dic')

# 2 import multiple dictionaries by mecabrc
tagger = MeCab.Tagger('-r /usr/local/etc/mecabrc')

text = 'TISインテックグループのＴＩＳ株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic（日本会社名辞書）を無償公開。'

# convert zenkaku to hankaku
text = unicodedata.normalize('NFKC', text) 

# parse
node = tagger.parseToNode(text)
result = []

while node:
    # node feature map: 品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
    # example:   TIS: ['名詞', '固有名詞', '組織', '*', '*', '*', '有限会社TIS', '*', '*']
    if node.feature.split(",")[2] == '組織':
        result.append(node.surface)
    node = node.next

print(result)
# ['TIS', 'インテック', 'TIS株式会社']
```

# 参考

- https://github.com/chakki-works/Japanese-Company-Lexicon