konlpy X m1 silicon - hexists/konlpy GitHub Wiki
konlpy๋ฅผ m1 silicon์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
m1์ 2020๋
11์์ ์ถ์๋ cpu๋ก ํด๋น cpu๋ฅผ ์ฌ์ฉํ๋ ์ปดํจํฐ(mac m1 silicon)์์๋ konlpy๊ฐ ์ ๋๋ก ์คํ๋์ง ์์ต๋๋ค.
konlpy์ ๋ฌธ์ ๋ณด๋ค๋ konlpy์์ java package๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ์ด๋ jdk ํธํ์ฑ ๋ฌธ์
๊ฐ ์์ต๋๋ค.
๋ณธ ๊ธ์์๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ jdk๋ฅผ ์ฌ์ฉํ์ฌ konlpy๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํฉ๋๋ค.
๊ธฐ์กด์ konlpy๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ๋๋ก ์งํํฉ๋๋ค.
์๋ณธ ๋งํฌ์ ๋ช ๋ น์ด์ ๋๋ค.
# update pip
$ python3 -m pip install --upgrade pip
# install konlpy
$ python3 -m pip install konlpy # Python 3.x
# install mecab
$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
virtualenv๋ก ๊ฐ์ํ๊ฒฝ์ ์ค์ ํ๊ณ ์ค์นํ๋ ๋ด์ฉ์ ๋๋ค.
$ python3 -V
Python 3.8.2
$ mkdir test_konlpy_m1
$ cd test_konlpy_m1
$ virtualenv -p python3 .venv
$ source .venv/bin/activate
$ python3 -m pip install --upgrade pip
$ python3 -m pip install konlpy # Python 3.x
$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
ํฐ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์ค์น๊ฐ ์๋ฉ๋๋ค.
kkma๋ฅผ ์คํ์ ํตํด, Konlpy๊ฐ ์ ์ค์น๋๋์ง ํ์ธํด๋ด ๋๋ค.
>>> from konlpy.tag import Kkma
>>> from konlpy.utils import pprint
>>> kkma = Kkma()
>>> pprint(kkma.pos(u'์ค๋ฅ๋ณด๊ณ ๋ ์คํํ๊ฒฝ, ์๋ฌ๋ฉ์ธ์ง์ํจ๊ป ์ค๋ช
์ ์ต๋ํ์์ธํ!^^'))
์คํ์ด ์๋๋ฉด ์ข๊ฒ ์ง๋ง, ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import Kkma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/konlpy/__init__.py", line 12, in <module>
from konlpy import (
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/konlpy/stream/__init__.py", line 8, in <module>
from konlpy.stream.twitter import TwitterStreamer
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/konlpy/stream/twitter.py", line 17, in <module>
class CorpusListener(tweepy.StreamListener):
AttributeError: module 'tweepy' has no attribute 'StreamListener'
>>>
tweepy ๋ฒ์ ๋ฌธ์ ๋ก 1.4.0์ด ์ค์น๋ ๊ฒฝ์ฐ konlpy์์ ์๊ตฌํ๋ ๋ฒ์ (tweepy 3.7.0<= <3.10.0)์ผ๋ก ์ฌ์ค์นํ๋ฉด ๋ฉ๋๋ค.
$ pip install tweepy>=3.7.0,3.10.0
์ฐธ๊ณ ๋ก tweepy ๊ด๋ จ๋ ๋ด์ฉ์ konlpy master branch์ ์ด๋ฏธ ์ ๊ฑฐ๋ ์ฝ๋๋ก, pypi ํจํค์ง๋ฅผ ์ฌ์ฉํ ๋ ๋ํ๋๋ ๋ฌธ์ ์ ๋๋ค. https://github.com/konlpy/konlpy/issues/368
tweepy ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ๋ํ๋๋ ์ค๋ฅ์
๋๋ค.
m1 silicon ํธํ์ฑ์ด ํด๊ฒฐ๋์ง ์์ jdk๋ฅผ ์ฌ์ฉํ ๋ ๋ํ๋๋ฉฐ, libjli.dylib์์ jvm dll์ ์ฐพ์ง ๋ชปํ๋ค๋ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
python
Python 3.8.2 (default, Dec 21 2020, 15:06:03)
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import Kkma
>>> kkma = Kkma()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/konlpy/tag/_kkma.py", line 95, in __init__
jvm.init_jvm(jvmpath, max_heap_size)
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/konlpy/jvm.py", line 64, in init_jvm
jpype.startJVM(jvmpath, '-Djava.class.path=%s' % classpath,
File "/Users/daniellee/Develop/test_konlpy_m1/.venv/lib/python3.8/site-packages/jpype/_core.py", line 226, in startJVM
_jpype.startup(jvmpath, tuple(args),
OSError: [Errno 0] JVM DLL not found: /Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home/lib/libjli.dylib
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ m1 silicon์ด ํธํ๋๋ jdk๋ฅผ ์ฐพ์ ์ค์นํด์ผ ํฉ๋๋ค.
์ฌ๋ฌ ์๋ ๋์ oracle jdk 17์์ ๋ฌธ์ ์์ด ์คํ๋๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
-
jdk ๋ค์ด๋ก๋
oracle jdk download ์ฌ์ดํธ์์ macOS์์ arm64์ฉ jdk๋ฅผ ๋ค์ด๋ก๋ ํฉ๋๋ค.
์ ๋Arm 64 Compressed Archive
๋ฅผ ๋ค์ด๋ก๋ ํ์ต๋๋ค.
oracle jdk download
-
์์ถ ํด์ ๋ค์ด ๋ฐ์ ๊ฒฝ๋ก๋ก ์ด๋ํ์ฌ ๋ค์ด๋ก๋ ๋ฐ์ ํ์ผ์ ์์ถ ํด์ ํฉ๋๋ค.
-
์ด๋(ํธํ ๊ฒฝ๋ก์ ์์น)
jdk-17.jdk
๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ ํ ์์น๋ก ์ด๋ํฉ๋๋ค.
์ ๋/Library/Java/JavaVirtualMachines/
์ผ๋ก ์ด๋ํ์ต๋๋ค. -
.zshrc ์ค์
.zshrc์ ํ๊ฒฝ ์ค์ ์ ํฉ๋๋ค.
$ echo "export JAVA_HOME_17=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home" >> ~/.zshrc
$ echo "export JAVA_HOME=$JAVA_HOME_17" >> ~/.zshrc
$ echo "export PATH=$PATH:$JAVA_HOME/bin" >> ~/.zshrc
.zshrc๋ฅผ ํ์ฌ ํ๊ฒฝ์ ์ ์ฉํ๊ธฐ ์ํด ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
$ source ~/.zshrc
๋ชจ๋ ์ค๋ฅ๋ฅผ ์์ ํ ๋ค์์๋ ์ค๋ฅ ๋ฉ์ธ์ง ์์ด konlpy๊ฐ ์ ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
>>> from konlpy.tag import Kkma
>>> from konlpy.utils import pprint
>>> kkma = Kkma()
>>> pprint(kkma.pos(u'์ค๋ฅ๋ณด๊ณ ๋ ์คํํ๊ฒฝ, ์๋ฌ๋ฉ์ธ์ง์ํจ๊ป ์ค๋ช
์ ์ต๋ํ์์ธํ!^^'))
[('์ค๋ฅ', 'NNG'),
('๋ณด๊ณ ', 'NNG'),
('๋', 'JX'),
('์คํ', 'NNG'),
('ํ๊ฒฝ', 'NNG'),
(',', 'SP'),
('์๋ฌ', 'NNG'),
('๋ฉ์ธ์ง', 'NNG'),
('์', 'JKM'),
('ํจ๊ป', 'MAG'),
('์ค๋ช
', 'NNG'),
('์', 'JKO'),
('์ต๋ํ', 'NNG'),
('์์ธํ', 'MAG'),
('!', 'SF'),
('^^', 'EMO')]