shineware / pykomoran Goto Github PK
View Code? Open in Web Editor NEW(Beta) PyKOMORAN is wrapped KOMORAN in Python using Py4J.
Home Page: https://pydocs.komoran.kr
License: Apache License 2.0
(Beta) PyKOMORAN is wrapped KOMORAN in Python using Py4J.
Home Page: https://pydocs.komoran.kr
License: Apache License 2.0
안녕하세요. PYQT5를 이용해서 검색어에서 형태소를 추출하여 csv파일안에 있는 단어들과 대조해서 출력하는 프로그램을 만드는 중입니다.
비주얼 스튜디오 코드상으로 실행시켰을 때는 정상작동하는데 pyinstaller로 실행파일을 만든 후 실행하면
File "main.py", line 15, in
File "PyKomoran\core.py", line 52, in init
라는 메시지가 발생하고 작동하지 않습니다.
main.py 15번 째 줄은 아래 코드입니다.
komoran = Komoran('STABLE')
이렇게 바꾸어도 동일 증상이 나타납니다.
komoran = Komoran(DEFAULT_MODEL['LIGHT'])
어떤 환경에서 이 문제가 발생하였나요?
CLI에서 PyKomoran을 실행할 수 있도록 합니다.
KOMORAN과 동일하게 모델 학습과 파일 단위 분석이 가능하도록 합니다.
자바 코드가 gradle build 시 FAIL 됩니다.
java
디렉토리 밑에서 gradle build를 실행 시 재현됩니다.
build가 성공합니다.
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all files for configuration ':compileClasspath'.
> Could not find :KOMORAN-4e7b5ef:.
Searched in the following locations: file:/D:/python/PyKOMORAN/java/libs/KOMORAN-4e7b5ef.jar
Required by:
project :
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
LIGHT / FULL 모델을 사용하는 적절한 튜토리얼을 추가하고, 기존 튜토리얼에도 해당 내용을 반영합니다.
또한, tutorials 저장소에도 이 내용을 반영해야 합니다.
setup.py
를 이용한 로컬 설치 방법을 README에 업데이트해야 합니다.
python setup.py install
현재 Komoran()
객체 생성 시 기본 model_path가 DEFAULT_MODEL.FULL을 가르키고 있습니다.
KOMORAN에서는 객체 생성 시 (기본 혹은 사용자 지정) model을 명시적으로 인자로 제공해야 합니다.
이는 DEFAULT_MODEL을 기본 제공 시 사용자 사전 등이 기본 모델과 충돌하여 원하는 기능을 정확히 사용할 수 없는 상황이 발생하여 KOMORAN에서 정책을 정한 것으로, 이를 따라야 합니다.
Komoran()
객체 생성 시 model_path를 반드시 지정하도록 합니다.DEFAULT_MODELS
등의 상수를 만들어 사용자로 하여금 사용할 수 있게 합니다.분석불능범주(NA)로 태깅되는 형태소들이 자소 단위로 쪼개져서 출력되는 문제
동일한 문제를 어떻게 하면 재현할 수 있나요?
"샤인웨어에서 캡틴마블을 단체로 관람하였다"를 LIGHT 버전으로 get_plain_text() 분석 시 발생
"샤인웨어에서"가 NA로 태깅되더라도 자소 단위로 분리되어서는 안됨
안녕하세요
pykomorran 의 사용자 사전을 이용하여 키워드 분석하고 있는데
특정 단어들이 인식이 안되는 경우에 대해서 문의드립니다.
인식이 안되는 단어는 다음과 같습니다.
"플로워 와이어링이 피더케이블 장착 홀을"
사용자 단어사전으로 "플로워 와이어링"이라고 등록하였는데
"플로워/NA 와이어링/NNG 이/JKS 피/XPN 더/NNG 케이블/NNG 장착/NNG 홀/NNG"
이런식으로 되어서 원하는 인식 "플로워 와이어링/NNG" 이렇게 잘 되지 않네요
혹시 이유를 알 수 있을까요?
현재쓰고 있는 코드 일부는 아래와 같으며
excel 파일을 불러서 > 사용자사전을 만들어 CSV 파일로 특정위치에 놓고 (tab으로 구분된 user dic) > 그것을 읽어서 작업합니다.
===============================
from PyKomoran import *
komoran = Komoran("STABLE")
fileName = "C:/Users/2879019/project_text2103/user_dic/userdic_input_210429.xlsx"
user_dic_excel = pd.DataFrame()
for i in range(0,4) :
tmp = pd.read_excel(fileName, names=['category', 'word','oriYn','no'], sheet_name=i, header=None )
user_dic_excel = user_dic_excel.append(tmp)
user_dic_excel.reset_index(inplace=True)
user_dic_excel['part'] = 'NNG'
user_dic_excel1 = user_dic_excel[['word','part']]
user_dic_path = 'C:/Users/2879019/project_text2103/user_dic/userdic_210415_utf8_test.txt'
user_dic_excel1.to_csv(user_dic_path,index=False, sep='\t', encoding='utf-8-sig', header = None)
Version 및 Author를 반영하여 0.1.4를 PyPI에 릴리즈합니다.
없음
현재 docker-compose를 이용하여 nginx+gunicorn+flask를 이용하여 형태소분석용 API서버를 하나 띄웠습니다.
워커와 쓰레드를 하나 이상의 값으로 설정하고 Jmeter로 request 테스트를 해봤는데 아래와 같은 에러들이 뜹니다.
어떻게 하면 동일한 문제가 계속 발생하나요?
"러너웨이는 정규시즌 4위를 기록하며 이전 시즌의 강력함을 보여주지 못했지만 플레이오프에서 난적들을 모두 꺾고 우승을 차지하며 명문 팀의 저력을 보여줬다" 이 문장을 가지고 동시에 여러 요청을 넣으면 발생합니다.
Apache Jmeter로 ThreadGroup (user : 10, period : 1s, Loop Count : 10)으로 총 100번 요청 넣었습니다.
정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?
[러너웨이/NNP(0,4), 는/JX(4,5), 정규/NNP(6,8), 시즌/NNP(8,10), 4/SN(11,12), 위/NNB(12,13), 를/JKO(13,14), 기록/NNG(15,17), 하/XSV(17,18), 며/EC(18,19), 이전/NNG(20,22), 시즌/NNP(23,25), 의/JKG(25,26), 강력/XR(27,29), 하/XSA(29,30), ㅁ/ETN(29,30), 을/JKO(30,31), 보여주/VV(32,35), 지/EC(35,36), 못하/VX(37,39), 았/EP(37,39), 지만/EC(39,41), 플레이오프/NNP(42,47), 에서/JKB(47,49), 난적/NNP(50,52), 들/XSN(52,53), 을/JKO(53,54), 모두/MAG(55,57), 꺾/VV(58,59), 고/EC(59,60), 우승/NNP(61,63), 을/JKO(63,64), 차지/NNG(65,67), 하/XSV(67,68), 며/EC(68,69), 명문/NNP(70,72), 팀/NNG(73,74), 의/JKG(74,75), 저력/NNP(76,78), 을/JKO(78,79), 보이/VV(80,83), 어/EC(80,83), 주/VX(80,83), 었/EP(80,83), 다/EC(83,84)]
이런식의 형태소 분석 결과가 나와야합니다.
어떤 환경에서 이 문제가 발생하였나요?
스크린샷이나 에러 로그 등, 추가 정보가 있다면 남겨주세요.
어떤 상황에서, 무엇을 추가하거나 / 변경하길 원하시나요?
테스트 코드를 비롯하여 코드 상에 번경된 기본 모델명을 반영합니다.
참고할 수 있는 다른 정보가 있다면 남겨주세요.
#36 과 관련있습니다.
PyKOMORAN 프로젝트의 이슈 템플릿을 변경합니다.
PyKOMORAN 프로젝트의 PR 템플릿을 추가합니다.
없음
'최순실'을 명사로 분석하기 위해 사용자 사전을 추가하여 적용시켜보았지만 최순/NNP, 실/NNP로 분석합니다 . IDE는 파이참 2019.1 을 사용하였고 파이썬 3.7 버전을 사용하고있습니다.
파이참 프로젝트 안에 dic 디렉토리를 만든 뒤 dic.user라는 user파일을 추가해주었습니다.
dic.user 파일의 내용은 다음과 같습니다.
최순실 NNP
from PyKomoran import *
komoran = Komoran(DEFAULT_MODEL['FULL'])
komoran.set_user_dic('dic/dic.user')
s = komoran.get_list('최순실씨가 민주주의를 외칠 때')
print(s)
이렇게 komoran 객체를 생성한 뒤 사용자 사전을 적용시키고 형태소 분석을 시행한 결과
[최순/NNP, 실/NNP, 씨/NNB, 가/JKS, 민주주의/NNG, 를/JKO, 외치/VV, ㄹ/ETM, 때/NNG]
위처럼 최순실이 아닌 최순/실로 사용자 사전이 적용되지 않은 결과가 나옵니다. dic.user에 다른 명사를 넣어봐도 적용되지 않은 결과가 나옵니다.
혹시 사용자 사전이 있어야하는 경로가 정해져있나요?
최순/실이 아닌 최순실로 분석 되었으면 합니다.
어떤 환경에서 이 문제가 발생하였나요?
PyKOMORAN 문서 사이트 내에 잘못된 링크를 수정해야 합니다.
잘못된 링크의 수정 또는 삭제가 필요합니다.
어떤 상황에서, 무엇을 추가하거나 / 변경하길 원하시나요?
nosetest
를 이용한 테스트를 Travis-CI에 추가
참고할 수 있는 다른 정보가 있다면 남겨주세요.
Komoran.analyze(List<String>, int)
메소드를 지원하도록 합니다.
없음
안녕하세요 현재 데이터 분석을 공부하고 있는 학생입니다. 다름이 아니라 Mac 환경에서 Komoran 패키지에 있는 메소드를 사용할때 아무런 값도 출력되지 않는 문제가 있어서 이렇게 문의를 남깁니다.
현재 저는 Window 10과 Mac Catalina (10.15.7) 환경을 번갈아서 사용중입니다. 그런데 Window 10에서는 작동이 원활하게 되는 것을 확인했으나 Mac에서만 문제가 발생합니다. 밑에도 비슷한 이슈가 있었으나 저는 두 환경 모두 사용해야 하는 상황이여서 골치가 아프네요 ㅠ
테스트 코드는 PyKomoran 문서에 있는 소스코드를 그대로 사용했습니다.
하지만 결과는 get_plain_text 를 제외하면 아무것도 출력하지 못합니다.
정상적으로 메소드를 실행하면 의도한대로 문장의 품사를 반환해야 할텐데요... ㅠㅠ
어떤 환경에서 이 문제가 발생하였나요?
PyKomoran에 있는 core.py
의 main이 실행되지 않습니다.
core.py
를 run 시키면 발생
komoran의 분석 결과들이 출력됩니다.
어떤 환경에서 이 문제가 발생하였나요?
Traceback (most recent call last):
File "D:/python/PyKOMORAN/python/PyKomoran/core.py", line 293, in <module>
komoran = Komoran("EXP")
File "D:/python/PyKOMORAN/python/PyKomoran/core.py", line 56, in __init__
raise KomoranError("Komoran is NOT initialized!")
__main__.KomoranError: Komoran is NOT initialized!
jvm
모듈의 init_jvm()
에서 JVM 초기화 시 Heap Size를 정할 수 있게 되어 있으나, 현실적으로 사용할 방법이 없습니다. 이는 초기 Py4J를 이용한 wrapper 작성 시 KOMORAN
객체 내에서 JVM을 띄우는 것을 가정하고 개발하여 그렇습니다. (추후 2개 이상의 KOMORAN
객체가 JVM을 사용하는 것을 고려하여 JVM을 분리하였습니다.)
KOMORAN 객체 초기화 시 Heap Size를 받은 후, 이를 init_jvm()
에 전달하도록 합니다.
현재 KOMORANDocs 저장소에서 존재하는 문서를 각 프로젝트별로 분리하려고 합니다.
없음
konlpy 이용에 익숙한 사용자를 위해 konlpy에서 제공하는 함수명을 alias로 함께 제공합니다.
morphs(phrase)¶
Parse phrase to morphemes.
nouns(phrase)
Noun extractor.
pos(phrase, flatten=True, join=False)
POS tagger.
정기 회의에서 결정한 내용을 반영합니다.
DEFAULT_MODEL['LIGHT']
및 DEFAULT_MODEL['FULL']
대신, STABLE
, EXP
를 사용하도록 변경합니다.DEFAULT_MODEL
은 0.x 버전에서만 유지합니다.STABLE
/ EXP
만 사용하도록 변경될 예정입니다.기분석 사전의 테스트 케이스가 깨지고 있어, 테스트 케이스 및 테스트 데이터를 업데이트해야 합니다.
konlpy 이용에 익숙한 사용자를 위해 konlpy에서 제공하는 함수명을 alias로 함께 제공합니다.
참고할 수 있는 다른 정보가 있다면 남겨주세요.
flask 에서 엔드포인트를 만들어서 아래와 같이 객체 생성했습니다.
ko_test = Komoran('EXP')
그 후
ko_test.get_nouns(searchWord)
엔드포인트에 요청을 주면 이부분에서 항상 어떤 문장이나 어떤 단어들을 줘도 [] 빈 리스트만 출력합니다.
근데 docker 만 단독으로 로컬에서 실행하면 동작합니다.
베이스 이미지에
RUN apt update && \
apt install build-essential -y && \
pip install uwsgi==2.0.23 && \
pip install fasttext==0.9.2 && \
pip install PyKomoran==0.1.6.post1 && \
pip install konlpy==0.6.0 && \
apt-get install -y default-jdk && \
apt-get autoclean && \
apt-get clean
어떻게 하면 동일한 문제가 계속 발생하나요?
정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?
어떤 환경에서 이 문제가 발생하였나요?
에러는 따로 발생시키지 않으나 어떤 값을 넣어도 [] 빈 문자열 리스트를 출력
안녕하세요, pykomoran을 이용하는 중 get_morphes_by_tags가 빈값을 반환하는 문제가 있는데
혼자 해결이 안되어 문의를 남깁니다.
분석하려는 문장이 무엇이든 get_morphes_by_tags()를 실행하면 결과가 뜨기까지 시간은 소요하지만
아무 값도 반환하지 않습니다.
PyKomoran을 활용한 자연어처리 뽀개기!(https://blog.shineware.co.kr/article/2019/06/04/pykomoran-usage.html)
의 코드를 그대로 복사하여 따라하던 중이었습니다.
target_tags = ['NNG','VV', 'VA']
cleansed_review_data['specific_tokens'] = cleansed_review_data['document'].map(lambda s: komoran.get_morphes_by_tags(s, tag_list=target_tags))
cleansed_review_data.sample(4)[['document', 'label', 'specific_tokens']]
실행하면
이렇게 빈값만 반환되고 아예 단일 문장으로
str_to_analyze = "① 대한민국은 민주공화국이다. ② 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다."
komoran.get_morphes_by_tags(str_to_analyze, tag_list=['NNP', 'NNG', 'SF'])
실행해봐도 [] 이렇게 반환됩니다
모델패스를 바꿔가며 해봤는데도 동일하였습니다
명사, 동사, 형용사가 반환되어야 할텐데ㅜㅜㅜ
get_plain_text만 잘 작동되고 get_nouns 등의 메소드도 작동하지 않습니다..ㅜ
무엇이 잘못된 것일까요 도움의 말씀 부탁드립니다
PyKomoran의 모든 모듈/메소드에 대해 docstring을 추가합니다.
추후 sphinx-apidoc을 이용하여 문서화를 하려고 합니다.
Google Style을 따릅니다.
안녕하세요. 형태소 분석시 PyKomoran을 잘 사용하고 있었는데 예상치 못한 에러 발생으로 문의드립니다.
무엇이, 어떻게 문제인가요?
22만개 정도의 텍스트 분석 시 처음 3만개 정도는 잘 되다가 다음과 같은 에러가 발생합니다.
`Py4JError Traceback (most recent call last)
in
5
6
----> 7 for vv in komoran.get_morphes_by_tags(t, tag_list=['VV','VX']):
8 v.add(vv+"다")
9
~\anaconda3\envs\py37\lib\site-packages\PyKomoran\core.py in wrapper(self, *args, **kwargs)
66 if not self._komoran.isInitialized():
67 raise KomoranError("Komoran is NOT initialized!")
---> 68 return func(self, *args, **kwargs)
69
70 return wrapper
~\anaconda3\envs\py37\lib\site-packages\PyKomoran\core.py in get_morphes_by_tags(self, sentence, tag_list)
177 raise KomoranError("Param tag_list should be list type")
178
--> 179 self._komoran.analyze(sentence)
180 return list(self._komoran.getMorphesByTags(tag_list))
181
~\anaconda3\envs\py37\lib\site-packages\py4j\java_gateway.py in call(self, *args)
1284 answer = self.gateway_client.send_command(command)
1285 return_value = get_return_value(
-> 1286 answer, self.gateway_client, self.target_id, self.name)
1287
1288 for temp_arg in temp_args:
~\anaconda3\envs\py37\lib\site-packages\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
330 raise Py4JError(
331 "An error occurred while calling {0}{1}{2}. Trace:\n{3}\n".
--> 332 format(target_id, ".", name, value))
333 else:
334 raise Py4JError(
Py4JError: An error occurred while calling o414272.analyze. Trace:
py4j.Py4JException: Method analyze([class java.lang.Double]) does not exist
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
at py4j.Gateway.invoke(Gateway.java:274)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.base/java.lang.Thread.run(Thread.java:832)`
어떻게 하면 동일한 문제가 계속 발생하나요?
3만개 이상의 text iterative하게 실행 시
정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?
정상적으로 해당 태그에 해당하는 형태소를 보여줌
어떤 환경에서 이 문제가 발생하였나요?
스크린샷이나 에러 로그 등, 추가 정보가 있다면 남겨주세요.
제가 사용한 코드는 다음과 같습니다.
#48 (comment)
와 같은 문제일까요?
감사합니다.
최신 버전의 KOMORAN으로 업데이트를 합니다.
아직 별도의 릴리즈가 없는 상황이므로, master branch를 jar로 말아서 넣습니다.
이 과정에서 shineware/KOMORAN#56 에 따라 내부 모델도 함께 업데이트해야 합니다.
무엇이, 어떻게 문제인가요?
현재 Java-side에서 예외 처리가 제대로 되고 있지 않습니다.
모델 생성 부분에서 예외 처리를 추가해야 합니다.
정상적인 상황에서는 어떻게 동작해야 한다고 생각하세요?
shineware/KOMORAN#51 에서 언급된 예외들을 먼저 추가하고,
해당 예외들을 사용하여 Java-side에서 예외 처리를 합니다.
어떤 상황에서, 무엇을 추가하거나 / 변경하길 원하시나요?
현재 PyKOMORAN용 문서 사이트가 자동 빌드되지 않고 있습니다.
travis-ci를 연동하여 자동으로 빌드 후 gh-pages로 배포되게 해야 합니다.
참고할 수 있는 다른 정보가 있다면 남겨주세요.
현재 PyKOMORAN에서는 별도로 DEFAULT_MODEL을 위한 파일들을 보유하고 있습니다.
하지만 KOMORAN 내에도 동일 모델/파일들이 포함되어 있어 중복으로 제공하는 것은 낭비입니다.
KOMORAN의 기본 모델을 부르는 방법을 추가하고, PyKOMORAN에서는 해당 모델 파일들을 제거하도록 합니다.
없음
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.