5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-04-28

この記事のついて

この記事は企業名辞書(JCLdic)の使い方を紹介します。
開発の経緯に興味がある方はこちらにご覧んでください。
大規模企業名辞書「JCLdic」で企業名を認識する

辞書紹介

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

辞書の取得

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

環境の準備

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

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

$ 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に書きます。

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

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

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 メソッド

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インテックグループのTIS株式会社は、自然言語処理で企業名認識を行うための辞書JCLdic(日本会社名辞書)を無償公開。'

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

# parse
print(tagger.parse(text))

結果:

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

方法2:parseToNode メソッド

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

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インテックグループの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株式会社']

参考

5
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?