LoginSignup
7
7

More than 5 years have passed since last update.

WSLでMeCabとJupyter Notebookを動かす

Last updated at Posted at 2019-02-11

WSLでMeCabとJupyter Notebookを動かす

PythonはWindowsでも動きますが、いざ色々やろうとするとUbuntu対応だってことが多いですね。
(そんな時のために?)Windows10ではWindows Subsystem for Linux(WSL)があるのですが、今回MeCabを入れて、Jupyter Notebookで動かしてみるのにそこそこ苦労したので、ご紹介します。
たぶんもう一回やろうとしても難しいので、備忘録です。

尚、MeCabについては、下記を参考にしています。
https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

WSLインストール

下記リンクの手順なのですが、UbuntuはUbuntu 18.04 LTSを入れました。
尚、一度入れていたUbuntuではMeCabのインストールが行かなかった(MeCabが見つからなかった)ので、アンインストールしてやり直しました。
リンクの手順ではPower ShellでWSLを有効にしていますが、コントロールパネルからでも(おそらく)同じだと思います。
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

2019-02-11.png

Ubuntu起動

スタートメニューからUbuntu 18.04を最初に起動すると、下記のようにusernameとpasswordを設定します。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: XXXXXXXX
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

aptitudeインストール

手順ではaptitudeを使うとありますが、aptitude: command not foundと怒られるので、インストールします。
尚、sudoコマンドを最初に使うときには、passwordを求めらます。

sudo apt-get install aptitude
[sudo] password for XXXXXXXX:
Do you want to continue? [Y/n] y

installが終わったら、手順の通りupdateとupgradeします。

sudo aptitude update
sudo aptitude upgrade
Do you want to continue? [Y/n] y

MeCabインストール

手順の通りMeCabその他をインストールします。Ubuntuを再インストールする前はここでエラーが出てました。

sudo aptitude install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file
Do you want to continue? [Y/n] y
sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config

mecab-ipadic-NEologd をインストール

~$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

Cloning into 'mecab-ipadic-neologd'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 75 (delta 5), reused 55 (delta 0), pack-reused 0
Unpacking objects: 100% (75/75), done.
~$ cd mecab-ipadic-neologd
~/mecab-ipadic-neologd$ ./bin/install-mecab-ipadic-neologd -n
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes

インストール先はオプション未指定の場合 mecab-config に従って決まります。
以下のコマンドを実行すると確認できます。

~/mecab-ipadic-neologd$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

テスト

~$ echo "8月3日に放送された「中居正広の金曜日のスマイルたちへ」(TBS系)で、1日たった5分でぽっこ りおなかを解消するというダイエット方法を紹介。キンタロー。にも密着。" | mecab
8       名詞,数,*,*,*,*,*
月      名詞,一般,*,*,*,*,月,ツキ,ツキ
3       名詞,数,*,*,*,*,*
日      名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送    名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ      動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「      記号,括弧開,*,*,*,*,「,「,「
中居    名詞,固有名詞,人名,姓,*,*,中居,ナカイ,ナカイ
正広    名詞,固有名詞,人名,名,*,*,正広,マサヒロ,マサヒロ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
金曜日  名詞,副詞可能,*,*,*,*,金曜日,キンヨウビ,キンヨービ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
スマイル        名詞,一般,*,*,*,*,スマイル,スマイル,スマイル
たち    名詞,接尾,一般,*,*,*,たち,タチ,タチ
へ      助詞,格助詞,一般,*,*,*,へ,ヘ,エ
」(     名詞,サ変接続,*,*,*,*,*
TBS     名詞,一般,*,*,*,*,*
系      名詞,接尾,一般,*,*,*,系,ケイ,ケイ
)       名詞,サ変接続,*,*,*,*,*
で      助詞,格助詞,一般,*,*,*,で,デ,デ
、      記号,読点,*,*,*,*,、,、,、
1       名詞,数,*,*,*,*,*
日      名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
たっ    動詞,自立,*,*,五段・タ行,連用タ接続,たつ,タッ,タッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
5       名詞,数,*,*,*,*,*
分      名詞,接尾,助数詞,*,*,*,分,フン,フン
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ぽ      形容詞,接尾,*,*,形容詞・アウオ段,ガル接続,ぽい,ポ,ポ
っ      動詞,非自立,*,*,五段・カ行促音便,連用タ接続,く,ッ,ッ
こり    動詞,自立,*,*,一段,連用形,こりる,コリ,コリ
おなか  名詞,一般,*,*,*,*,おなか,オナカ,オナカ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消    名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する    動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という  助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット      名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット
方法    名詞,一般,*,*,*,*,方法,ホウホウ,ホーホー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介    名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。      記号,句点,*,*,*,*,。,。,。
キンタロー      名詞,一般,*,*,*,*,*
。      記号,句点,*,*,*,*,。,。,。
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
も      助詞,係助詞,*,*,*,*,も,モ,モ
密着    名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。      記号,句点,*,*,*,*,。,。,。
EOS

PIPインストール

sudo aptitude install python3-pip

mecab-python3インストール

mecab-python3をインストールするのですが、unable to execute 'swig': No such file or directoryと怒られるのでswigをインストールします。

sudo aptitude install swig
pip3 install mecab-python3

pip3でnumpyなど、他に使うライブラリをインストールします。
(尚、pipをアップグレードしようとして何かやらかしたので、以後 --user を付けないとpip3が動かなくなりました…)

Jupyter Notebookインストール

pip3 install ipython[all] --user
pip3 install jupyter --user

Jupyter Notebook起動

jupyter notebookをタイプすると、下記メッセージが出るので、ブラウザのURLにhttp://localhost:8888/?token=7517a29f9ebd226603577be161642b11961463aaf2674d05を張り付けるとjupyter notebookが起動します。やったー!

~$ jupyter notebook
[I 16:16:51.697 NotebookApp] Writing notebook server cookie secret to /home/XXXXXXXX/.local/share/jupyter/runtime/notebook_cookie_secret
[I 16:16:52.689 NotebookApp] Serving notebooks from local directory: /home/XXXXXXXX
[I 16:16:52.689 NotebookApp] The Jupyter Notebook is running at:
[I 16:16:52.690 NotebookApp] http://localhost:8888/?token=7517a29f9ebd226603577be161642b11961463aaf2674d05
[I 16:16:52.691 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

MeCabテスト

import MeCab
tagger = MeCab.Tagger("-Ochasen")
node = tagger.parse("坊主が屏風に上手に坊主の絵を描いた")
print(node)
坊主  ボウズ   坊主  名詞-一般       
が ガ が 助詞-格助詞-一般     
屏風  ビョウブ    屏風  名詞-一般       
に ニ に 助詞-格助詞-一般     
上手  ジョウズ    上手  名詞-形容動詞語幹       
に ニ に 助詞-副詞化        
坊主  ボウズ   坊主  名詞-一般       
の ノ の 助詞-連体化        
絵 エ 絵 名詞-一般       
を ヲ を 助詞-格助詞-一般     
描い  エガイ   描く  動詞-自立   五段・カ行イ音便    連用タ接続
た タ た 助動詞   特殊・タ    基本形
EOS
def tokenize(sentence):
    """日本語の文を形態素の列に分割する関数

    :param sentence: str, 日本語の文
    :return tokenized_sentence: list of str, 形態素のリスト
    """
    node = tagger.parse(sentence)
    node = node.split("\n")
    tokenized_sentence = []
    for i in range(len(node)):
        feature = node[i].split("\t")
        if feature[0] == "EOS":
            # 文が終わったら終了
            break
        # 分割された形態素を追加
        tokenized_sentence.append(feature[0])
    return tokenized_sentence
tokenize("坊主が屏風に上手に坊主の絵を描いた")
['坊主', 'が', '屏風', 'に', '上手', 'に', '坊主', 'の', '絵', 'を', '描い', 'た']

今後の抱負

Windows環境でMeCabは無理かなと思っていたのですが、なんとかできてよかったです。
MeCabとPyTorchを組み合わせてNLPをやりたいのですが、PyTorchのインストールはできていますが、WSLでGPUを有効にできていません。そもそもできるのか不明ですが…

import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device
device(type='cpu')

Bash on Ubuntuの起動設定(追記)

作業フォルダを設定したショートカットを使えば、Ubuntuからデフォルトのフォルダを参照しやすい形で起動できます。

2019-02-11 (2).png

GPUは色々やったけど、だめでした。
ネットを見ても、対応していないようですね…

7
7
0

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
7
7