今回はエックスサーバーにMecabをインストールして形態素解析をおこないます。
以前、Mecabを使って形態素解析をするアプリを作成しました。
しかし今は面白いアプリを作ったからダウンロードして試してくれと言っても誰も相手にしてくれません。ダウンロードは面倒くさいしインストールも面倒くさいです。だからurlがわかればあとはアクセスするだけのWebアプリを作らなければなりません。そこで今回はエックスサーバーにMecabをインストールして形態素解析をおこないます。
サーバーにMecabをインストールする
まずはサーバーにMecabをインストールしましょう。VPSのような上級者向けのものでなくても通常のレンタルサーバーでOKです。SSH接続できるものであれば使えるはずです。
まずはMecabをダウンロードしましょう。
https://taku910.github.io/mecab/
そして適当なディレクトリにアップロードします。SSH接続したらファイルをアップロードしたディレクトリ(ここではtempとする)に移動し、一行ずつコマンドを入力して実行していきます(先頭の$は不要)。
1 2 3 4 5 6 |
$ cd temp $ tar xvfz mecab-0.996.tar.gz $ cd mecab-0.996 $ ./configure --with-charset=utf-8 --enable-utf8-only --prefix=/home/<アカウント名>/opt/mecab $ make $ make install |
辞書をインストールする
これでMecab本体のインストールは完了です。続いて辞書をインストールします。
1 2 3 4 5 6 |
$ cd temp $ tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz $ cd mecab-ipadic-2.7.0-20070801 $ ./configure --with-charset=utf-8 --enable-utf8-only --prefix=/home/<アカウント名>/opt/mecab --with-mecab-config=/home/<アカウント名>/opt/mecab/bin/mecab-config $ make $ make install |
パスを通す
インストールしたらパスを通します。ホームディレクトリにある.bash_profileを編集します。
.bash_profile
1 2 3 4 5 6 7 |
export PATH=$HOME/opt/mecab/bin:$PATH # 他にも通しているパスがある場合は最後のほうに追加する # 例 export PATH=$HOME/opt/dotnet:$HOME/miniconda3/bin:$HOME/opt/mecab/bin:$PATH # 編集が終わったら以下のコマンドで反映させる $ source ~/.bash_profile |
これでMecabが使えるようになったはずです。mecab -vとすればバージョンが表示されます。されない場合はどこかが間違っています。やりなおしましょう。mecabと入力して適当な文章を入力すると形態素解析の結果が表示されます。
アプリをつくってみる
このかんASP.NET Coreを使っているので今回もこれを使います。C#プログラマとして誇りを持ちましょう。絶対にPythonなんかには負けません(言っていること意味不明)。
Mecabを使うためにNMeCabNetStandardを使います。NuGetでNMeCabNetStandardをインストールします。
そしてC#で以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using NMeCab; namespace MecabNamespace { public class IndexModel : PageModel { static MeCabTagger? _mecab = null; [BindProperty] public string InputText { get; set; } public string ResultText { get; set; } public void OnPost() { if (_mecab == null) { string path = "/home/<アカウント名>/opt/mecab/lib/mecab/dic/ipadic"; // string path = "C:\\Program Files (x86)\\MeCab\\dic\\ipadic"; // ローカルでテストするときはPCのインストールパスを指定する _mecab = MeCabTagger.Create(new MeCabParam { DicDir = path, }); } ResultText = _mecab.Parse(InputText); } } } |
Pageフォルダ配下に適当にcshtmlファイルを作成します。ここではPage\Mecabフォルダ内にIndex.cshtmlを作成しています。
テキストエリアに文章を入力して[解析]ボタンをクリックすると単語に分解するとともに、分解された単語の原型と品詞名を表示します。
Page\Mecab\Index.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
@page @model MecabNamespace.IndexModel @{ ViewData["Title"] = "Mecabの実験"; } <form method="post"> <textarea asp-for="InputText" rows="10" cols="50"></textarea> <div><input type="submit" value="解析" /></div> </form> <style> td { border:1px solid #333; padding:5px; } </style> <table> <tr> <td>単語</td> <td>原型</td> <td>品詞名</td> </tr> @if (@Model.ResultText != null) { string[] results = @Model.ResultText.Replace("\r", "").Split('\n'); foreach (string str in results) { var strings1 = str.Split(); if (strings1.Length < 2) // 最後は「EOS」だけ。2つに分割されない continue; if (strings1[0] == "") // 改行部分 continue; var strings2 = strings1[1].Split(','); if (strings2.Length < 7) // 原型が取得できない場合 continue; <tr> <td>@strings1[0]</td> <td>@strings2[6]</td> <td>@strings2[0]</td> </tr> } } </table> |
Thanks for sharingg your thoughts about ASP.NET Core.
Regards