見出し画像

テキスト分析の大通り#17: 環境構築と辞書登録

以下に環境構築関連で行ったことを記します。OSはWindows10です。ちなみに以下に記載されているneologd辞書、Mecabのユーザー辞書、Sudachiのユーザー辞書登録はPythonでのMecab、またはSudachiのインストール後に実施します。


Teradataの環境

以下を参照ください


Anacondaのインストール

Pythonの環境としてAnacondaを利用しました。PandasやSklearnなどはすでに入っているので楽できます。
最初に以下からインストールファイルをダウンロードして実行します。

あとは道なりに進めばインストールは終わりますが、Installation TypeではJust Meを選択しました。またインストール先のフォルダは

C:\Users\[youruserdirectoryname]\Anaconda3

を指定しました。日本語を含むディレクトリにはインストールできないそうです。
Advanced Installation Optionsのチェックは上を外し、下は入れたままにしました。パスは追加しない、デフォルトのPythonとして登録したことになります。


MeCabのインストール

以下からファイルをダウンロードして実行します。

ダウンロード時はmecab-64-0.996.2.exeというファイル名でした。これを実行し、色々聞かれるので以下の通りに:

  • 文字コード: UTF-8を選択

  • インストール先: C:\Program Files\MeCab

  • MeCab64

  • Pathを追加: Windowsのスタートから「環境変数」と入力 > 「環境変数を編集」 > 「Path」 > 「編集」 > 「新規」まで行って、以下のパスを入力

C:\Program Files\MeCab\bin

このあとcondaでインストールしますが、それはまた別途


mojimojiのインストール

mojimojiのインストールというよりはその下環境に手こずりました。一応失敗した部分も含め共有します

  • 以下から.net4.5.1の実行ファイル(記載時はNDP451-KB2858728-x86-x64-AllOS-ENU.exe)をダウンロードし、実行。手元の環境では何か別の時にすでにインストール済のようでスタック

  • 以下からWindows SDKをインストールするためのツールをダウンロード(いきなりダウンロードされます。ファイルはvisualcppbuildtools_full.exe)

https://go.microsoft.com/fwlink/?LinkId=691126

ファイルを実行し、カスタム > Windows 10 SDKをチェックして進めましたがNGでした。以下のメッセージから欲しいのはWindows 10 SDK 10.0.10240の様子
Windows 10 SDK (10.0.10240) and Microsoft Emulator for Windows 10 mobile (10.0.10240).
Released in conjunction with Windows 10, version 1507.
Note: The version will display as 10.0.26624 during setup. INSTALL SDK

  • 以下から直接Windows 10 SDKをダウンロード。バージョンからしてWindows 10の下から2番目にあるものが該当しそうなのでそれをダウンロード。ファイル名はsdksetup.exe

このファイルを実行してOSを再起動後、pipからmojimojiをインストールしたら動きました。


neologdのインストール

流行語や新語などが随時反映された辞書ファイルで、これをMecabのユーザー辞書として利用します。
以下からダウンロード(更新が止まっているらしいが、日付は異なるかも)

まずはこのファイルを解凍します。mecab-user-dict-seed.20200910.csvというファイルが解凍されます。
コマンドプロンプトに移り、解凍したファイルがあるディレクトリに移動し、以下のコマンドを実行します。余談ですが、Windowsエクスプローラーでディレクトリパスのフィールドにてcmdと打ち込むと、コマンドプロンプトがそのディレクトリ配下の状態で起動します。便利です。

コマンドプロンプトにて、以下のコマンドを実行します

mecab-dict-index -d "c:\Program Files\MeCab\dic\ipadic" -u NEologd.20200910-u.dic -f utf-8 -t utf-8 mecab-user-dict-seed.20200910.csv

これはMecabに登録する辞書ファイルを作成する作業をしているようで、最初のパスはシステム辞書フォルダの場所、次のパスは出力先、最後のファイル名は指定するcsvファイル(今回であればneologd辞書ファイル)を指定します。つまり2番目のパスに相当するNEologd.20200910-u.dicが作成されます。

続いてこのファイルを置くために以下のフォルダを作成し、ここにNEologd.20200910-u.dicをコピーまたは移動します。

C:\Program Files\MeCab\dic\NEologd\

最後に、以下にあるmecabrcファイルにパスを追加します。

C:\Program Files\MeCab\etc

ファイル内には以下の上側の記載があると思います。これがシステム辞書だそうで、そのすぐ下に以下の下側を追記します。

dicdir =  $(rcpath)..\dic\ipadic
userdic = C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic

Mecabユーザー辞書追加

Mecabに対してユーザー辞書を追加します。まず以下の列順でcsvファイルを作成します。ヘダーはなし、UTF8です。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

例えば以下のような形です。ネットで調べる限り、数字部分は面倒なことを考えなければ固定の-1,-1,1000でよさそう

aldente95s,-1,-1,1000,名詞,固有名詞,一般,,,,aldente95s,アルデンテナインティファイブエス,アルデンテナインティファイブエス
アルデンテ95s,-1,-1,1000,名詞,固有名詞,一般,,,,aldente95s,アルデンテナインティファイブエス,アルデンテナインティファイブエス
敵わ,-1,-1,1000,名詞,固有名詞,一般,,,,敵う,カナワ,カナワ
スベる,-1,-1,1000,名詞,固有名詞,一般,,,,スベる,スベル,スベル
一人,-1,-1,1000,名詞,固有名詞,一般,,,*,一人,ヒトリ,ヒトリ

続いて、保存したcsvファイル(ここではuserdict.csv)のディレクトリから以下を実行します。上に書いたneologdと同じ要領です。

mecab-dict-index -d "c:\Program Files\MeCab\dic\ipadic" -u userdict.dic -f utf-8 -t utf-8 userdict.csv

作成されたファイル(上記の例ならuserdict.dic)を移動します。ここではneologdで作成したディレクトリと同じ場所に置きました。

C:\Program Files\MeCab\dic\NEologd

以下にあるmecabrcファイルにパスを追加します(辞書ファイルが複数ある場合はカンマ区切りで記載)。

C:\Program Files\MeCab\etc

mecabrcファイル内の記述で以下における上側はシステム辞書で、すでに記載済みのはずです。下側を追加します。途中までは上で書いたneologdの部分で、カンマ以降が今回追記部分です。

dicdir =  $(rcpath)..\dic\ipadic
userdic = C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic,C:\Program Files\MeCab\dic\NEologd\userdict.dic

辞書ファイルに対して追加で、単語を随時登録していく際には、userdict.dicを都度作成し、中身をスイングしていけば登録されます。なのでその際はパスの追加が不要です。

辞書が効いているか確認するには、Mecab自体をPythonにインストール(別途記載)したのち、以下にて確認可能です。

import MeCab
mecab = MeCab.Tagger()
print(mecab.parse ("昨日aldente95sを買った。アルデンテ95sはピンク色。"))

Stem(類義語)や表記の揺れの統一に関しては、「表層形」列に引っ掛けたい文字列を、「原型」列に統一後の文字列を記載し、後で差し替えるとよさそうを使うとよさそうです。


Sudachiユーザー辞書追加

Mecab同様、以下の形式にのっとった形でcsvファイルを作成します。UTF8、列の構成はMecabとちょっと異なっています。
見出し,左連接ID,右連接ID,コスト,見出し,品詞1,2,3,4,品詞(活用型),品詞(活用形),読み,正規化表記,辞書形ID,分割タイプ,A単位分割情報,B単位分割情報,未使用

山里亮太,4786,4786,5000,山里亮太,名詞,固有名詞,一般,,,,ヤマサトリョウタ,山里亮太,,,,,
ぼる塾,4786,4786,5000,ぼる塾,名詞,固有名詞,一般,,,,ボルジュク,ぼる塾,,,,,
すいません,4786,4786,5000,すいません,名詞,固有名詞,一般,,,,スイマセン,すいません,,,,,

上記のような形でファイル(ここではterm.csv)を作成し、保存したら、このcsvファイルのある場所から以下を実行します。ディレクトリは適時修正ください。

"C:\Users\youruserdir\Anaconda3\Scripts\sudachipy.exe" ubuild -s "C:\Users\youruserdir\Anaconda3\Lib\site-packages\sudachidict_full\resources\system.dic" term.csv

コマンドの構成は最初が実行するSudachiのディレクトリファイル、真ん中が参照先でしょうか、最後が作成したcsvファイルです。コマンドを実行するとuser.dicが.csvファイルのある場所に作成されます。これを以下のフォルダに移動します

C:\Users\youruserdir\Anaconda3\Lib\site-packages\sudachipy\resources

同じフォルダのsudachi.jsonにパスを追記します。もともとは3行目4行目が以下の記述

"characterDefinitionFile" : "char.def",
"inputTextPlugin" : [

この3行目4行目の間に以下真ん中の行を追加します

"characterDefinitionFile" : "char.def",
"userDict" : ["C:/Users/youruserdir/Anaconda3/Lib/site-packages/sudachipy/resources/user.dic"],
"inputTextPlugin" : [

確認方法は以下の通りです。

from sudachipy import tokenizer
from sudachipy import dictionary
config_path = "C:/Users/youruserdir/Anaconda3/Lib/site-packages/sudachipy/resources/sudachi.json"
tokenizer_obj = dictionary.Dictionary(config_path=config_path, dict="full").create()
mode = tokenizer.Tokenizer.SplitMode.C
tokens = tokenizer_obj.tokenize('山里亮太とぼる塾、気品溢れる姿', mode)

Pythonライブラリのインストールは以下をご覧ください。

///

#analytics #pyhon #mecab #sudachi #mojimoji #neglogd #text #nlp #データ #分析

いいなと思ったら応援しよう!