文件包

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被认为是Noun

ngrams = [(('미스', '함무라비'), '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_dictionaryckonlpy.tag.Twitter.use_twitter_dictionary
ckonlpy.tag.Twitter._dictionaryckonlpy.tag.Twitter.dictionary
ckonlpy.tag.Twitter._customized_taggerckonlpy.tag.Twitter.template_tagger
ckonlpy.tag.Postprocessor.tagckonlpy.tag.Postprocessor.pos
ckonlpy.custom_tag.SimpleSelectorckonlpy.custom_tag.SimpleEvalator
ckonlpy.custom_tag.SimpleSelector.scoreckonlpy.custom_tag.SimpleEvalator.evaluate
ckonlpy.tag.Twitter.set_selectorckonlpy.tag.AbstractTagger.set_evaluator
ckonlpy.custom_tag.SimpleSelector.weightckonlpy.custom_tag.SimpleEvaluator.weight
변경 후변경 이유
ckonlpy.tag.Twitter.use_twitter_dictionarykonlpy.tag.Twitter 의 사전 사용 유무
ckonlpy.tag.Twitter.dictionarypublic 으로 변환하였습니다
ckonlpy.tag.Twitter.template_taggerTemplate 기반으로 작동하는 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)] 형식으로 변경하였습니다

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否存在这样一种场景:Java7的Hashmap实现优于Java8的实现   java如何打印这些完整的数组?   java BuildException:未能执行aapt   java如何使用类。未知类型的集合返回的cast()   java准备语句返回错误的值   webview 安卓中的java显示身份验证对话框   java如何重命名列名JPA Hibernate   java查询从特定用户和特定时间段的Oracle表(通过比较原始表和备份表)中选择修改的行   java Youtube视频仅在三星S6设备上加载时自动暂停   未调用java RecyclerView getItemViewType   使用JSch setCommand执行带有源选项的java Shell ping命令时失败   java Hibernate:无法删除|删除分离的实例   Java Spring@MappedSuperclass字段作为子类中的@Id字段   java Android:确定单击了哪个按钮,因为该按钮未在xml中定义   如何计算java阵列内存使用率   使用Java查找按字母顺序排列的第一个字符串   javascript注销功能刷新页面,但页面仍已登录   当接口作为参数提供时,java依赖项注入不起作用   java中带原语的字符串扭曲