Mecab 사용자 단어 사전 추가 in R, windows 10

Page content

개요

  • Mecab에서 사용자 단어를 추가하고 직접 사용하는 예제를 만들어본다.
  • 사전에 Mecab은 설치가 되어 있다고 가정한다. 만약 처음 설치한다면, 다음 참조 링크에서 설치를 진행한다.

문제점

  • 아래그림과 같이 ‘사회적경제’라는 단어가 잡히지 않는 것을 확인할 수 있다.

Untitled

해결방법

  • 먼저, 사전 위치를 찾는다.
    • mecab > user-dic 폴더 내에 nnp.csv 파일을 찾는다.

Untitled

Untitled

  • nnp.csv 파일을 메모장으로 열고 수정한다.

Untitled

  • 사용자 사전 수정 적용하기 위해 Window PowerShell을 관리자 권한으로 연다

Untitled

  • mecab 폴더로 이동해야 하기 위해 아래와 같이 입력을 한다.
PS C:\WINDOWS\system32> cd C:\mecab\
PS C:\mecab>
  • mecab 폴더에서 아래와 같이 .\tools\add-userdic-win.ps1 실행한다. 그런데 최초 아래와 같은 에러가 나타날 것이다.
PS C:\mecab> .\tools\add-userdic-win.ps1
.\tools\add-userdic-win.ps1 :  시스템에서 스크립트를 실행할  없으므로 C:\mecab\tools\add-userdic-win.ps1 파일을 
드할  없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170) 참조하십시오
.
위치 줄:1 문자:1
+ .\tools\add-userdic-win.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
  • 이럴 경우, 보안 정책을 완화해야 하는데, 명령어로 가능하다.
    • 아래 명령어는 Restricted, 즉 제한이 걸렸다는 뜻이다.
PS C:\mecab> executionPolicy
Restricted
  • 이제 다음 명령어를 실행한다.
PS C:\mecab> Set-ExecutionPolicy Unrestricted

실행 규칙 변경
실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말
항목(https://go.microsoft.com/fwlink/?LinkID=135170) 설명된 보안 위험에 노출될  있습니다. 실행 정책을
변경하시겠습니까?
[Y] (Y)  [A] 모두 (A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "N"): Y
PS C:\mecab>
  • 그 후에 다시 executionPolicy 를 실행한다.
PS C:\mecab> executionPolicy
Unrestricted
  • 이제 다시 실패했던 명령어를 다시 실행한다.
PS C:\mecab> .\tools\add-userdic-win.ps1
generating userdic...
C:\mecab\mecab-ko-dic\model.def is not a binary model. reopen it as text mode...
reading C:\mecab\user-dic\nnp.csv ...
done!
C:\mecab\mecab-ko-dic\model.def is not a binary model. reopen it as text mode...
reading C:\mecab\user-dic\person.csv ...
done!
C:\mecab\mecab-ko-dic\model.def is not a binary model. reopen it as text mode...
reading C:\mecab\user-dic\place.csv ...
done!
reading mecab-ko-dic\unk.def ... 13
emitting double-array: 100% |###########################################|
reading mecab-ko-dic\CoinedWord.csv ... 148
reading mecab-ko-dic\EC.csv ... 2547
reading mecab-ko-dic\EF.csv ... 1820
reading mecab-ko-dic\EP.csv ... 51
reading mecab-ko-dic\ETM.csv ... 133
reading mecab-ko-dic\ETN.csv ... 14
reading mecab-ko-dic\Foreign.csv ... 11690
reading mecab-ko-dic\Group.csv ... 3176
reading mecab-ko-dic\Hanja.csv ... 125750
reading mecab-ko-dic\IC.csv ... 1305
reading mecab-ko-dic\Inflect.csv ... 44820
reading mecab-ko-dic\J.csv ... 416
reading mecab-ko-dic\MAG.csv ... 14242
reading mecab-ko-dic\MAJ.csv ... 240
reading mecab-ko-dic\MM.csv ... 453
reading mecab-ko-dic\NNB.csv ... 140
reading mecab-ko-dic\NNBC.csv ... 677
reading mecab-ko-dic\NNG.csv ... 208524
reading mecab-ko-dic\NNP.csv ... 2371
reading mecab-ko-dic\NorthKorea.csv ... 3
reading mecab-ko-dic\NP.csv ... 342
reading mecab-ko-dic\NR.csv ... 482
reading mecab-ko-dic\Person-actor.csv ... 99230
reading mecab-ko-dic\Person.csv ... 196459
reading mecab-ko-dic\Place-address.csv ... 19301
reading mecab-ko-dic\Place-station.csv ... 1145
reading mecab-ko-dic\Place.csv ... 30303
reading mecab-ko-dic\Preanalysis.csv ... 5
reading mecab-ko-dic\Symbol.csv ... 16
reading mecab-ko-dic\user-nnp.csv ... 12
reading mecab-ko-dic\user-person.csv ... 1
reading mecab-ko-dic\user-place.csv ... 2
reading mecab-ko-dic\VA.csv ... 2360
reading mecab-ko-dic\VCN.csv ... 7
reading mecab-ko-dic\VCP.csv ... 9
reading mecab-ko-dic\VV.csv ... 7331
reading mecab-ko-dic\VX.csv ... 125
reading mecab-ko-dic\Wikipedia.csv ... 36762
reading mecab-ko-dic\XPN.csv ... 83
reading mecab-ko-dic\XR.csv ... 3637
reading mecab-ko-dic\XSA.csv ... 19
reading mecab-ko-dic\XSN.csv ... 124
reading mecab-ko-dic\XSV.csv ... 23
emitting double-array: 100% |###########################################|
reading mecab-ko-dic\matrix.def ... 3822x2693
emitting matrix      : 100% |###########################################|

done!
PS C:\mecab>
  • 그러나, 이 상태에서 R 코드를 실행해도 달라지지 않는다. 왜냐하면 가중치를 수정하지 않았기 대문이다.
  • 즉, 가중치 수정은 mecab-ko-dic 폴더 내부에 있는 user-nnp.csv 파일의 가중치를 수정해야 한다.

Untitled

  • user-nnp.csv 파일을 메모장으로 열면 기본적으로 아래와 같이 등록이 되어 있을 것이다.
  • 이제 이 파일을 아래와 같이 수정한다.

Untitled

  • 수정 후, 이번에는 아래와 같이 명령어를 실행한다.
PS C:\mecab> .\tools\compile-win.ps1
reading mecab-ko-dic\unk.def ... 13
emitting double-array: 100% |###########################################|
reading mecab-ko-dic\CoinedWord.csv ... 148
reading mecab-ko-dic\EC.csv ... 2547
reading mecab-ko-dic\EF.csv ... 1820
reading mecab-ko-dic\EP.csv ... 51
reading mecab-ko-dic\ETM.csv ... 133
reading mecab-ko-dic\ETN.csv ... 14
reading mecab-ko-dic\Foreign.csv ... 11690
reading mecab-ko-dic\Group.csv ... 3176
reading mecab-ko-dic\Hanja.csv ... 125750
reading mecab-ko-dic\IC.csv ... 1305
reading mecab-ko-dic\Inflect.csv ... 44820
reading mecab-ko-dic\J.csv ... 416
reading mecab-ko-dic\MAG.csv ... 14242
reading mecab-ko-dic\MAJ.csv ... 240
reading mecab-ko-dic\MM.csv ... 453
reading mecab-ko-dic\NNB.csv ... 140
reading mecab-ko-dic\NNBC.csv ... 677
reading mecab-ko-dic\NNG.csv ... 208524
reading mecab-ko-dic\NNP.csv ... 2371
reading mecab-ko-dic\NorthKorea.csv ... 3
reading mecab-ko-dic\NP.csv ... 342
reading mecab-ko-dic\NR.csv ... 482
reading mecab-ko-dic\Person-actor.csv ... 99230
reading mecab-ko-dic\Person.csv ... 196459
reading mecab-ko-dic\Place-address.csv ... 19301
reading mecab-ko-dic\Place-station.csv ... 1145
reading mecab-ko-dic\Place.csv ... 30303
reading mecab-ko-dic\Preanalysis.csv ... 5
reading mecab-ko-dic\Symbol.csv ... 16
reading mecab-ko-dic\user-nnp.csv ... 12
reading mecab-ko-dic\user-person.csv ... 1
reading mecab-ko-dic\user-place.csv ... 2
reading mecab-ko-dic\VA.csv ... 2360
reading mecab-ko-dic\VCN.csv ... 7
reading mecab-ko-dic\VCP.csv ... 9
reading mecab-ko-dic\VV.csv ... 7331
reading mecab-ko-dic\VX.csv ... 125
reading mecab-ko-dic\Wikipedia.csv ... 36762
reading mecab-ko-dic\XPN.csv ... 83
reading mecab-ko-dic\XR.csv ... 3637
reading mecab-ko-dic\XSA.csv ... 19
reading mecab-ko-dic\XSN.csv ... 124
reading mecab-ko-dic\XSV.csv ... 23
emitting double-array: 100% |###########################################|
reading mecab-ko-dic\matrix.def ... 3822x2693
emitting matrix      : 100% |###########################################|

done!

테스트

  • 이제 R 코드를 실행한다.

Untitled

  • 정상적으로 NNP로 분류가 된 것을 확인할 수 있다.