この記事のついて
この記事は企業名辞書(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株式会社']