文件包
customized-KoNL的Python项目详细描述
customized KoNLPy
可以处理韩语自然语的paySun软件包,KoNLPy的customized version。
customized KoNLPy对于明确知道的单词,不经过现场演唱,而是通过知道特定的词汇来提供谈话/品事辨别的功能。为此,执行基于template的谈话年龄。
사전: {'아이오아이': 'Noun', '는': 'Josa'}
탬플릿: Noun + Josa
如果说有像《p》上面这样的单词列表和铃鼓的话,那么“I.O.I”这个词分为【I.O.I】,“Noun”,(“Josa”)。Install
$ git clone https://github.com/lovit/customized_konlpy.git
$ pip install customized_konlpy
Requires
- JPype >= 0.6.1
- KoNLPy >= 0.4.4
Usage
Part of speech tagging
和《p》KoNLPy一样Twitter.pos输入(phrase)。如果每个单词都有用户事先知道的单词被识别的话,可以用customized tagger分离词节,由用户事先不知道的单词构成的词节由推特形态分析机处理。twitter.pos('우리아이오아이는 이뻐요')
> [('우리', 'Noun'), ('아이오', 'Noun'), ('아이', 'Noun'), ('는', 'Josa'), ('이뻐', 'Adjective'), ('요', 'Eomi')]
因为《p》、《I.O.I》并不是大家都知道的单词,所以在推特分析机上无法正确认识单词。在下面的用户词典中添加单词后,进行相同的工作,可以获得以下结果。twitter.pos('우리아이오아이는 이뻐요')
> [('우리', 'Modifier'), ('아이오아이', 'Noun'), ('는', 'Josa'), ('이뻐', 'Adjective'), ('요', 'Eomi')]
twitter.pos('트와이스tt는 좋아요')
> [('트와이스', 'Noun'), ('tt', 'Noun'), ('는', 'Josa'), ('좋', 'Adjective'), ('아요', 'Eomi')]
Add words to dictioanry
ckonlpy.tag的推特可以通过add dictionary添加str或list of str形式的用户词典。
from ckonlpy.tag import Twitter
twitter.add_dictionary('아이오아이', 'Noun')
twitter.add_dictionary(['트와이스', 'tt'], 'Noun')
如果您想添加在推特韩语分析器中不使用的词类,必须设置为force=True。twitter.add_dictionary('lovit', 'Name', force=True)
Add template to customized tagger
当前使用中的基于铃鼓的谈话年龄,可以在使用代码时添加铃鼓。当前使用中的铃鼓列表可以如下确认。
twitter.template_tagger.templates
> [('Noun', 'Josa'), ('Modifier', 'Noun'), ('Modifier', 'Noun', 'Josa')]
铃鼓以tuple of str形式输入。
twitter.template_tagger.add_a_template(('Noun', 'Noun', 'Josa'))
Set templates tagger selector
使用Templates也可以出现几个候选人。可以直接设计在多个候选人中选择best的函数。像这样制定几个分数标准,赋予各标准的weight的方式是在推特分析器中使用的方式,因为可以直观的调音,所以觉得是非常好的方式。
my_weights = [
('num_nouns', -0.1),
('num_words', -0.2),
('no_noun', -1),
('len_sum_of_nouns', 0.2)
]
def my_evaluate_function(candidate):
num_nouns = len([word for word, pos, begin, e in candidate if pos == 'Noun'])
num_words = len(candidate)
has_no_nouns = (num_nouns == 0)
len_sum_of_nouns = 0 if has_no_nouns else sum(
(len(word) for word, pos, _, _ in candidate if pos == 'Noun'))
scores = (num_nouns, num_words, has_no_nouns, len_sum_of_nouns)
score = sum((score * weight for score, (_, weight) in zip(scores, my_weights)))
return score
像上的例子一样,定义my weights和my evaluate function函数,twitter.set_evaluator()输入后,以该函数为基准选择best candidate。
twitter.set_evaluator(my_weights, my_evaluate_function)
Postprocessor
可以为passwords,stop words,passtags,单词置换进行后期处理。
只打印在passwords中的单词,(单词,词类)。
from ckonlpy.tag import Postprocessor
passwords = {'아이오아이', ('정말', 'Noun')}
postprocessor = Postprocessor(twitter, passwords = passwords)
postprocessor.pos('우리아이오아이는 정말 이뻐요')
# [('아이오아이', 'Noun'), ('정말', 'Noun')]
stopwords注册的单词,(单词,词类)无法输出。
stopwords = {'는'}
postprocessor = Postprocessor(twitter, stopwords = stopwords)
postprocessor.pos('우리아이오아이는 정말 이뻐요')
# [('우리', 'Modifier'), ('아이오아이', 'Noun'), ('정말', 'Noun'), ('이뻐', 'Adjective'), ('요', 'Eomi')]
指定特定产品,只打印该商品。
passtags = {'Noun'}
postprocessor = Postprocessor(twitter, passtags = passtags)
postprocessor.pos('우리아이오아이는 정말 이뻐요')
# [('아이오아이', 'Noun'), ('정말', 'Noun')]
将置换的单词,(单词,词类)定义为dict形式,tag中的单词被置换输出。
replace = {'아이오아이': '아이돌', ('이뻐', 'Adjective'): '예쁘다'}
postprocessor = Postprocessor(twitter, replace = replace)
postprocessor.pos('우리아이오아이는 정말 이뻐요')
# [('우리', 'Modifier'), ('아이돌', 'Noun'), ('는', 'Josa'), ('정말', 'Noun'), ('예쁘다', 'Adjective'), ('요', 'Eomi')]
您可以输入nested tuple或tuple of str形式的ngram,以便将“p”连接的单词捆绑成一个单词。以tuple of str的形式输入的ngram被认为是Nounngrams = [(('미스', '함무라비'), 'Noun'), ('바람', '의', '나라')]
postprocessor = Postprocessor(twitter, ngrams = ngrams)
postprocessor.pos('미스 함무라비는 재밌는 드라마입니다')
# [('미스 - 함무라비', 'Noun'), ('는', 'Josa'), ('재밌는', 'Adjective'), ('드라마', 'Noun'), ('입니', 'Adjective'), ('다', 'Eomi')]
Loading wordset
utils中有将stop words、passwords、replace word pair保存为文件时,容易引发的函数。
load wordset return set of str或set of tuple。示例的passwords.txt 的内容如下。单词的词性分为一个分隔写。stopwords.txt 也是同样的格式。
아이오아이
아이오아이 Noun
공연
利用load wordset的示例代码。
from ckonlpy.utils import load_wordset
passwords = load_wordset('./passwords.txt')
print(passwords) # {('아이오아이', 'Noun'), '아이오아이', '공연'}
stopwords = load_wordset('./stopwords.txt')
print(stopwords) # {'은', '는', ('이', 'Josa')}
置换的单词对分为tap。如果要替换的单词中有词类标签,可以分为一个空格。
str\tstr
str str\tstr
以下replacewords.txt 的例子。
아빠 아버지
엄마 Noun 어머니
使用load replace wordpair的示例代码。
from ckonlpy.utils import load_replace_wordpair
replace = load_replace_wordpair('./replacewords.txt')
print(replace) # {'아빠': '아버지', ('엄마', 'Noun'): '어머니'}
ngram单词的各个单词分为一个格,ngram的词性分为tap。
str str
str str\tstr
以下ngrams.txt 的例子。
바람 의 나라
미스 함무라비 Noun
利用load ngram的示例代码。
from ckonlpy.utils import load_ngram
ngrams = load_ngram('./ngrams.txt')
print(ngrams) # [('바람', '의', '나라'), (('미스', '함무라비'), 'Noun')]
0.0.6+ vs 0.0.5x
改变了0.0.5x中的变量和函数的名称,变量类型的一部分。
변경 전 | 변경 후 |
---|---|
ckonlpy.tag.Twitter._loaded_twitter_default_dictionary | ckonlpy.tag.Twitter.use_twitter_dictionary |
ckonlpy.tag.Twitter._dictionary | ckonlpy.tag.Twitter.dictionary |
ckonlpy.tag.Twitter._customized_tagger | ckonlpy.tag.Twitter.template_tagger |
ckonlpy.tag.Postprocessor.tag | ckonlpy.tag.Postprocessor.pos |
ckonlpy.custom_tag.SimpleSelector | ckonlpy.custom_tag.SimpleEvalator |
ckonlpy.custom_tag.SimpleSelector.score | ckonlpy.custom_tag.SimpleEvalator.evaluate |
ckonlpy.tag.Twitter.set_selector | ckonlpy.tag.AbstractTagger.set_evaluator |
ckonlpy.custom_tag.SimpleSelector.weight | ckonlpy.custom_tag.SimpleEvaluator.weight |
변경 후 | 변경 이유 |
---|---|
ckonlpy.tag.Twitter.use_twitter_dictionary | konlpy.tag.Twitter 의 사전 사용 유무 |
ckonlpy.tag.Twitter.dictionary | public 으로 변환하였습니다 |
ckonlpy.tag.Twitter.template_tagger | Template 기반으로 작동하는 tagger 임을 명시하고, public 으로 변환하였습니다 |
ckonlpy.tag.Postprocessor.pos | 기본 tagger 의 결과를 후처리하는 기능이기 때문에 동일한 함수명으로 통일하였습니다 |
ckonlpy.custom_tag.SimpleEvalator | 클래스 이름을 Selector 에서 Evaluator 로 변경하였습니다 |
ckonlpy.custom_tag.SimpleEvalator.evaluate | 품사열 후보의 점수 계산 부분을 score --> evaluate 로 함수명을 변경하였습니다 |
ckonlpy.tag.AbstractTagger.set_evaluator | 품사열 후보의 점수 계산 함수를 설정하는 함수의 이름을 변경하였습니다. 해당 함수는 ckonlpy.tag.Twitter 에서 ckonlpy.tag.AbstractTagger 로 이동하였습니다 |
ckonlpy.custom_tag.SimpleEvaluator.weight | {str:float} 형식의 weight 를 [(str, float)] 형식으로 변경하였습니다 |
- 项目
标签: