データは引き続き
青空文庫からHTML版の怪人二十面相を使っています。
MeCabの通常辞書では二十面相が名詞として認識されませんでした。
これをMeCab辞書に登録して名詞として認識させられるかどうか試してみたいと思います。
MeCabの辞書登録については、
ファイルはディレクトリの他のcsvファイルと合わせてshift-jisで保存しています。
コマンドプロンプト(ここではAnaconda Promptから作業していますが)からipadicディレクトリに移動します。
青空文庫からHTML版の怪人二十面相を使っています。
MeCabの通常辞書では二十面相が名詞として認識されませんでした。
怪人 カイジン 怪人 名詞-一般 「 「 「 記号-括弧開 二 ニ 二 名詞-数 十 ジュウ 十 名詞-数 面相 メンソウ 面相 名詞-一般 」 」 」 記号-括弧閉
これをMeCab辞書に登録して名詞として認識させられるかどうか試してみたいと思います。
MeCabの辞書登録については、
- csv作成
- コスト計算
- 辞書作成
という流れになりますが、コスト計算については辞書モデルが必要で、別途設定が必要なのですが、今回は時間がないのでコストは適当に入れてしまっています。
MeCabのipadic辞書ディレクトリに登録したい単語のcsvを作成します。
私の環境ではC:\MeCab\dic\ipadic
ここに、次の形式でuserdic.csvという名前のファイルを作成しました。
MeCabのipadic辞書ディレクトリに登録したい単語のcsvを作成します。
私の環境ではC:\MeCab\dic\ipadic
ここに、次の形式でuserdic.csvという名前のファイルを作成しました。
二十面相,,,6000,名詞,固有名詞,人名,一般,*,*,二十面相,ニジュウメンソウ,ニジュウメンソウ4番目のカラムは検索コストを指定する部分ですが、辞書モデルを落としていないので勝手な数字を入れています。
ファイルはディレクトリの他のcsvファイルと合わせてshift-jisで保存しています。
コマンドプロンプト(ここではAnaconda Promptから作業していますが)からipadicディレクトリに移動します。
cd C:\MeCab\dic\ipadic
mecab-dict-indexコマンドを使って辞書を再作成します。
カレントディレクトリにdicrcが見つからない場合怒られますので忘れずに辞書ディレクトリに移動しましょう。
また、コストフィールドが空の場合ここで怒られます。
mecab-dict-indexコマンドは次の形で実行します。
mecab-dict-index -f <csvファイルの文字コード> -t <辞書ファイルの文字コード>
私は基本的にutf-8しか利用しないのでutf8で辞書を作成します。ですので
-f shift-jis -t utf8で実行します。
では、組みなおした辞書を使って同じ文章を解析してみます。
カレントディレクトリにdicrcが見つからない場合怒られますので忘れずに辞書ディレクトリに移動しましょう。
(C:\Anaconda3) c:\MeCab\bin>mecab-dict-index.exe -f shift-jis -t utf8 dictionary_compiler.cpp(82) [param.load(DCONF(DICRC))] no such file or directory: .\dicrc
また、コストフィールドが空の場合ここで怒られます。
reading .\userdic.csv ... dictionary.cpp(326) [type == MECAB_USR_DIC] cost field should not be empty in sys/unk dic.
mecab-dict-indexコマンドは次の形で実行します。
mecab-dict-index -f <csvファイルの文字コード> -t <辞書ファイルの文字コード>
私は基本的にutf-8しか利用しないのでutf8で辞書を作成します。ですので
-f shift-jis -t utf8で実行します。
(C:\Anaconda3) c:\MeCab\dic\ipadic>..\..\bin\mecab-dict-index -f shift-jis -t utf8
reading .\unk.def ... 40 emitting double-array: 100% |###########################################| .\model.def is not found. skipped. reading .\Adj.csv ... 27210 reading .\Adnominal.csv ... 135 reading .\Adverb.csv ... 3032 reading .\Auxil.csv ... 199 reading .\Conjunction.csv ... 171 reading .\Filler.csv ... 19 reading .\Interjection.csv ... 252 reading .\Noun.adjv.csv ... 3328 reading .\Noun.adverbal.csv ... 795 reading .\Noun.csv ... 60477 reading .\Noun.demonst.csv ... 120 reading .\Noun.nai.csv ... 42 reading .\Noun.name.csv ... 34202 reading .\Noun.number.csv ... 42 reading .\Noun.org.csv ... 16668 reading .\Noun.others.csv ... 151 reading .\Noun.place.csv ... 72999 reading .\Noun.proper.csv ... 27327 reading .\Noun.verbal.csv ... 12146 reading .\Others.csv ... 2 reading .\Postp-col.csv ... 91 reading .\Postp.csv ... 146 reading .\Prefix.csv ... 221 reading .\Suffix.csv ... 1393 reading .\Symbol.csv ... 208 reading .\userdic.csv ... 1 reading .\Verb.csv ... 130750 emitting double-array: 100% |###########################################| reading .\matrix.def ... 1316x1316 emitting matrix : 100% |###########################################| done!userdic.csvも読み込まれていることが解ります。
では、組みなおした辞書を使って同じ文章を解析してみます。
import MeCab m = MeCab.Tagger("-Ochasen") parsed = m.parse(resp1)変換結果を見てみます。
怪人 カイジン 怪人 名詞-一般 「 「 「 記号-括弧開 二十面相 ニジュウメンソウ 二十面相 名詞-固有名詞-人名-一般 」 」 」 記号-括弧閉 の ノ の 助詞-連体化 うわさ ウワサ うわさ 名詞-サ変接続 を ヲ を 助詞-格助詞-一般 し シ する 動詞-自立 サ変・スル 連用形 て テ て 助詞-接続助詞 い イ いる 動詞-非自立 一段 連用形 まし マシ ます 助動詞 特殊・マス 連用形 た タ た 助動詞 特殊・タ 基本形 。 。 。 記号-句点設定どおり認識できたようです。
コメント