Raspberry Pi에서 Node.js에서 mecab-ipadic-NEologd 사용

다시 도전해 보면 잘 가고 있었으므로 메모적으로 엔트리합니다.

환경


  • Raspberry Pi2 ModelB
  • node.js v6.8.1
  • mecab 0.996
  • mecab-ipadic-neologd 2.0

  • mecab 설치



    솔직하게 apt-get 를 사용합니다.
    $ sudo apt-get install mecab
    $ sudo apt-get install libmecab-dev
    $ sudo apt-get install mecab-ipadic
    
    $ mecab
    サミュエルLジャクソン
    サミュエル 名詞,固有名詞,人名,名,*,*,サミュエル,サミュエル,サミュエル
    L   名詞,固有名詞,組織,*,*,*,*
    ジャクソン 名詞,固有名詞,人名,姓,*,*,ジャクソン,ジャクソン,ジャクソン
    EOS
    

    mecab-ipadic-neologd 설치



    Raspberry Pi에 직접 설치해도 오류가 발생하기 때문에 포기했습니다. (용량이 원인이라고 생각 Expand Filesystem
    Mac에는 인스톨 할 수 있었으므로, 「어라? 이것 카피하면 좋잖아?」라고 생각해 보면 잘 갔습니다.

    neologd/mecab-ipadic-neologd - GitHub

    여기에서 Mac에 설치하면 다음 디렉토리에 사전이 생성됩니다.
    /usr/local/lib/mecab/dic/mecab-ipadic-neologd
    

    이것을 zip 파일로 만듭니다.



    sftp (나는 Filezilla를 사용)를 사용하여 홈 디렉토리에 업로드.

    업로드 후 압축을 풉니다.
    $ unzip dic.zip
    

    mecab 사전의 위치로 이동합니다.
    $ sudo mv -v /home/pi/dic /usr/lib/mecab
    `/home/pi/dic' -> `/usr/lib/mecab/dic'
    

    사전을 지정하여 실행합니다. (Mac과는 계층이 다르기 때문에 조금 주의가 필요합니다)
    $ mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd
    サミュエルLジャクソン
    サミュエルLジャクソン 名詞,固有名詞,一般,*,*,*,サミュエル・L・ジャクソン,サミュエルエルジャクソン,サミュエルエルジャクソン
    EOS
    

    '사무엘 엘 잭슨'이 고유 명사로 인식되고 있습니다. 잘 갔다.

    mecab-async로 사용하기



    아래의 라이브러리를 이용하겠습니다.

    hecomi/node-mecab-async - GitHub

    이쪽도 그대로 설치하면 에러가 나오므로 다음과 같이 설치합니다.

    전역 영역에 설치합니다.
    $ sudo npm install mecab-async -g
    

    모든 폴더의 모듈로 이동합니다.
    $ sudo mv -v /usr/local/lib/node_modules/mecab-async /home/pi/mecab-async/node_modules
    `/usr/local/lib/node_modules/mecab-async' -> `/home/pi/mecab-async/node_modules/mecab-async'
    

    이제 모듈을 사용할 수 있습니다. 시험에 이런 파일을 준비했습니다.

    app.js
    var MeCab = new require('mecab-async')
    var mecab = new MeCab();
        MeCab.command = "mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd"
        var text = process.argv[2]
        //注:パースコマンドを利用する時 "MeCab.~"と大文字にしないと動かないみたいです
        MeCab.parseFormat(text, function(err, morphs) {
            if (err) throw err;
            morphs.map(function(morph) {
            if (morph.lexical === '感動詞') {
              console.log(morph.lexical + ' : ' + morph.original);
            }
            if (morph.compound === '固有名詞') {
              console.log(morph.compound + ' : ' +morph.original);
            }
        });
        });
    

    '감동사'와 '고유명사'를 추출합니다. 실행해 보겠습니다.
    $ node app.js こんにちは、サミュエルLジャクソンです。
    感動詞 : こんにちは
    固有名詞 : サミュエル・L・ジャクソン
    

    마침내 잘 어울렸습니다. 그럼.

    좋은 웹페이지 즐겨찾기