lovit / customized_konlpy Goto Github PK
View Code? Open in Web Editor NEWCustomized KoNLPy - Korean Natural Language Processing Toolkit KoNLPy wrapping code
License: GNU General Public License v3.0
Customized KoNLPy - Korean Natural Language Processing Toolkit KoNLPy wrapping code
License: GNU General Public License v3.0
https://github.com/lovit/customized_konlpy/blob/master/ckonlpy/tag/_twitter.py#L46
def nouns(self, phrase):
tagged = self.pos(phrase)
return [w for w, t in tagged if t[0] == 'N']
tagged 를 w랑 t 로 받은 다음
t[0] 에서 == "N" 으로 명사를 추출하는 방식을 사용하면 Number도 같이 추출이 됩니다.
Konlpy 함수를 참조하면,
t == "Noun" 으로 수정해서 사용하고 있습니다.
안녕하세요 customized_konlpy를 유용하게 잘 쓰고 있는 사용자입니다.
최근에 stopwords나 replace 단어를 추가할 수 있는 API가 생겨서 더욱 활용도가 높아질 것으로 예상되는데,
아래와 같이 복합명사나 특수기호가 포함된 단어를 replace.txt에 추가할 경우 의도한 대로 잘 되지 않습니다.
(replacewords.txt에 추가한 부분)
필립w,실러 필립w실러
필립w!실러 필립w실러
필main/board mainboard
pos-pos pos
main_board Noun mainboard
main.board Noun mainboard
코드
print(postprocessor.tag("pos-pos"))
print(postprocessor.tag("필립w.실러"))
print(postprocessor.tag("필립w!실러"))
print(postprocessor.tag("필립w,실러"))
print(postprocessor.tag("main_board"))
print(postprocessor.tag("main.board"))
결과
[('pos', 'Alpha'), ('-', 'Punctuation'), ('pos', 'Alpha')]
[('필립w.실러', 'Noun')]
[('필립', 'Noun'), ('w', 'Alpha'), ('!', 'Punctuation'), ('실러', 'Noun')]
[('필립', 'Noun'), ('w', 'Alpha'), (',', 'Punctuation'), ('실러', 'Noun')]
[('main', 'Alpha'), ('_', 'Punctuation'), ('board', 'Alpha')]
[('main', 'Alpha'), ('.', 'Punctuation'), ('board', 'Alpha')]
main board와 같이 띄어쓰기가 포함된 단어를 mainboard와 같은 하나의 단어로 바꾸거나,
특수기호 포함된 단어를 치환할 수 있는 방법이 있을까요?
감사합니다.
사용자사전을 추가해 pos, token 결과 비교해보고 있는데 결과가 다른 부분이 있어 문의드립니다.
print(twitter_original.pos('육성재가 출연하는 프로그램은 집사부일체이다'))
konlpy의 기본 twitter로 위의 문장을 분석한 결과 아래와 같이 나옵니다.
[('육성재', 'Noun'), ('가', 'Josa'), ('출연', 'Noun'), ('하는', 'Verb'), ('프로그램', 'Noun'), ('은', 'Josa'), ('집사부', 'Noun'), ('일체', 'Noun'), ('이다', 'Josa')]
그리고 ckonlpy의 twitter로 분석한 결과 아래와 같이 나옵니다.
[('육성재', 'Noun'), ('가', 'Josa'), ('출', 'Verb'), ('연하', 'Noun'), ('는', 'Josa'), ('TV', 'Alpha'), ('프로그램', 'Noun'), ('은', 'Josa'), ('집', 'Noun'), ('사부일체', 'Noun'), ('이다', 'Josa')]
위의 konlpy twitter 처럼 '출연'이란 단어를 Noun으로 주고, 프로그램을 하나의 명사로 만들어주기 위해
twitter.add_dictionary(['집사부일체','TV'], 'Noun')
twitter.add_dictionary('출연', 'Noun')
위와 같이 add_dictionary를 수행했습니다.
print(twitter.pos('육성재가 출연하는 TV 프로그램은 집사부일체이다'))
그리고 결과를 보기위해 위와 같이 ckonlpy에 넣어 확인했는데 '출연' 부분이 수정되지 않았습니다.
[('육성재', 'Noun'), ('가', 'Josa'), ('출', 'Verb'), ('연하', 'Noun'), ('는', 'Josa'), ('TV', 'Noun'), ('프로그램', 'Noun'), ('은', 'Josa'), ('집사부일체', 'Noun'), ('이다', 'Josa')]
왜 반영이 되지 않는 것인지 반영하고자 하면 어떻게 바꿔줘야 하는지 궁금합니다.
미리 만들어둔 사용자 사전과 template의 save / load 기능
stopwords, replace 단어 목록을 txt 파일로 등록/관리하는 방법이 있을까요?
안녕하세요 개발자님.
개발자님께서 제공해주신 customized konlpy 정말 잘 활용하고 있습니다.
다름이 아니라, postprocessor을 활용하던 중
'AttributeError: 'Postprocessor' object has no attribute 'morphs' 에러를 보게 되어 문의 드립니다.
혹시, 'Postprocessor'는 아직 morphs를 지원하지 않는건가요?
안녕하세요, 기존에 komoranpy에 질의 남겼었습니다만, komoran 사용을 하지않고 Kkma로 사용하기로 하다가 형태소분석기 활용에 문제가 있어서 검색중 Ckonlpy 포스트를 보고 사용을 시도하게되었습니다.
konlpy에 대해 질문이 있습니다
문장 형태소를 구분하면 다음과 같이 결과가 나옵니다.
postprocessor2.pos('이번 상품 구입 갯수는 것은 100개 입니다.')
[('이번', 'Noun'), ('상품', 'Noun'), ('구입', 'Noun'), ('갯수', 'Noun'), ('는', 'Josa'), ('은', 'Josa'), **('100', 'Number'), ('개', 'Noun'),** ('입니다', 'Adjective'), ('.', 'Punctuation')]
형태소가 Number와 Unit 단위인 Noun이 만났을 때 해당 하나의 명사로 표현 될 수 있는지 궁금합니다.
예를들어 다음과 같이 나왔으면 합니다.
('100', 'Number'), ('개', 'Noun') -> ('100개', 'Noun')
('100', 'Number'), ('묶음', 'Noun') -> ('100묶음', 'Noun')
customized tagger 의 pos 함수 내에서 best score template 을 루프안에서 리턴하는 것 같습니다!
ckonlpy의 Postprocessor를 사용할 때 twitter.pos의 norm=True, stem=True 옵션을 사용할 수 있는 방법이 있을까요?
Postprocessor(
base_tagger = twitter)
Postprocessor.pos(text)
안녕하세요. tutorial을 진행하던 중 궁금한 점이 있어 질문 드립니다.
def main():
twitter = Twitter()
twitter.add_dictionary('이', 'Modifier')
twitter.add_dictionary('우리', 'Modifier')
twitter.add_dictionary('이번', 'Modifier')
twitter.add_dictionary('아이오아이', 'Noun')
twitter.add_dictionary('행사', 'Noun')
twitter.add_dictionary('아이', 'Noun')
twitter.add_dictionary('번것', 'Noun')
twitter.add_dictionary('것', 'Noun')
twitter.add_dictionary('은', 'Josa')
print(twitter._dictionary._pos2words)
print(twitter.pos('우리아이오아이는 이뻐요'))
위 코드를 실행했을 때 결과가
{'Modifier': {'이번', '이', '우리'}, 'Noun': {'번것', '것', '아이오아이', '아이', '행사'}, 'Josa': {'은'}}
[('우리', 'Noun'), ('아이오', 'Noun'), ('아이', 'Noun'), ('는', 'Josa'), ('이뻐', 'Adjective'), ('요', 'Eomi')]
위와 같이 나왔는데요. 이유를 알기 위해 내부를 본 결과, dictionary에 추가는 되었지만 Score function에서 다른 옵션에 밀리는 점수가 나오는 것을 확인할 수 있었습니다.
또 정의되어 있지 않은 태그를 새로 정의했던 경우도 비슷한 결과를 받아볼 수 있었는데요.
제가 무엇을 잘못해서 tutorial과 다른 결과값이 나오는 걸까요?
혹시 이미 저장되어있는 word에 다른 tag를 추가하면 기존에 다른 태그에 있던 내용을 삭제하지 않는 이유가 있나요?
먼저, 사용자 사전을 편리하게 구성할 수 있도록 해주신 노고에 감사드립니다.
제가 질문드리는 것은 큰 문제는 아닌데요.
예시를 따라해보다가 ngrams을 이용하여 복합 명사 혹은 여러 단어의 뭉치를 명사로 처리하는 과정에서
명사로 묶이지 않은 경우가 있어 질문드립니다. 코드는 아래와 같습니다.
-아래-
ngrams = [(('헤일리', '스테인필드'), 'Noun'), ('피치','퍼펙트')]
postprocessor = Postprocessor(twitter, ngrams = ngrams)
f = postprocessor.pos('헤일리 스테인필드, 피치 퍼펙트')
print(f)
결과 => [('헤일리', 'Noun'), ('스테', 'Noun'), ('인필드', 'Noun'), (',', 'Punctuation'), ('피치 - 퍼펙트', 'Noun')]
헤일리 스테인필드를 명사로 묶었음에도 불구하고 따로따로 나오더라구요.
혹시, 묶이지 않는 예외 경우가 있는지 궁금합니다. ^^
t = Twitter()
t.pos("총리와") 이렇게 파싱하면
[('총리와', 'Noun')] 이렇게 결과가 나오는데요,
이것을 [('총리', 'Noun'), ('와', 'Josa')] 이렇게 나눌 수 있는 방법이 있을까요??
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.