[Mecab] 은전한닢 프로젝트, Mecab 설치

Ubuntu 16.04을 기준으로 작성되었습니다.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mecab libmecab-dev
$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.0.1-20150920.tar.gz
$ tar zxvf mecab-ko-dic-2.0.1-20150920.tar.gz
$ cd mecab-ko-dic-2.0.1-20150920/
$ ./configure
$ make "(실패할 경우 sudo apt install make 후 다시 실행)"
$ sudo make install

설치가 잘 되었는지 확인해보자.

$ mecab -d .
아버지가방에들어가신다.
아버지	NNG,*,F,아버지,*,*,*,*
가	JKS,*,F,가,*,*,*,*
방	NNG,*,T,방,*,*,*,*
에	JKB,*,F,에,*,*,*,*
들어가	VV,*,F,들어가,*,*,*,*
신다	EP+EF,*,F,신다,Inflect,EP,EF,시/EP/*+ᆫ다/EF/*
.	SF,*,*,*,*,*,*,*
EOS

 

[Mecab] 영어 명사 추출

예전엔 영어 명사 분리가 잘 안되서 만들었던거 같은데, 지금은 기본 mecab으로도 잘 된다. 결과적으로 필요 없는 글이다.

아마 예전에 mecab을 잘못 설치하거나 이상하게 써서 안됐을지도…

 

dic.txt는 다운받아서 같은 경로에 두면 되며, 데이터는 http://www.114pda.com/language/dic-data/dic-ek-51873.htm에서 가져왔다.

정확도를 높이려면 사전을 추가하면 되는데, https://github.com/liks79/edic/tree/master/data에서 가져오면 될 듯 하다.

var mecab = require('mecab-ffi');
var fs = require('fs');

let tsvParser = (filePath) => {
    let data = fs.readFileSync(filePath, 'utf-8').split('\r\n');
    let result = {};
    for (let i = 0; i < data.length; i++) {
        if (!data[i]) break;
        let item = data[i].split(' /// ');

        if (!item[1] || item[1].length <= 0) {
            item[1] = '';
        }

        result[item[0]] = {eng: item[0], tag: item[1].match(/([A-Z].)/gim), kor: item[1]};
    }

    return result;
};

mecab.siyaParse = (string) => {
    result = mecab.parseSync(string);

    for (let i = 0; i < result.length; i++) {
        if (result[i][1] == 'SL') {
            if (data[result[i][0].toLowerCase()])
                result[i] = [result[i][0], data[result[i][0].toLowerCase()].tag, data[result[i][0].toLowerCase()].kor];
        }
    }

    return result;
}


var data = tsvParser('./dic.txt');

// Synchronously
result = mecab.siyaParse("It is test");
console.log(result);