目录
纯Python代码用于韩国分析。它的目的是一种非映射学习方法,可以在不使用学习数据,用单词拆卸句子或区分语音的一部分的情况下找到数据中的单词。
Soynlp提供的WordExtractor或Nounextractor使用从多个文档中学到的统计信息来工作。基于统计模式的非映射学习方法提取单词,因此它们在同一文档(同质文档)中效果很好,这些文档比一个句子或文档中的单词都大。通过仅使用相同单词(例如电影评论或当今新闻文章)收集文档来学习提取器是一件好事。当异质群体一起收集它们时,异质群体的提取不佳。
在soynlp = 0.0.46之前,参数名称中没有规则,需要最小值或最大值,例如min_score,minimum_score,l_len_min。在您到目前为止工作的代码中,您可能会混淆那些直接设置参数的人,但是我们已经修改了变量的名称,以减少在稍后再稍后发生的不便。
在0.0.47之后,包含最小值和最大值的含义的变量名称减小为最小值和最大。之后,为哪个项目是阈值参数编写名称。用以下模式统一参数名称:将名称与{min,max} _ {noun,word} _ {score,threshold}统一。如果项目很明显,则可以省略它。
基因计数通常是在大豆中进行的。与频率关联的参数是统一的,而不是计数。
索引和IDX与IDX统一。
num和n(意味着数字)与num统一。
$ pip install soynlp由于提取名词,v1,新闻和V2的各种尝试,创建了三个版本。最好的性能是V2。
WordExtractor是使用统计信息学习单词的边界得分,并且不判断每个单词的各个部分。有时您需要知道每个单词的各方。此外,与语音的其他部分相比,新单词在名词中最常见。在名词的右侧,某些字母通常会出现,例如-silver,-e和 - 。如果您查看单词左侧(基于空格的标准单元)的子字母右侧的字母的分布,则可以确定它是否是名词。 Soynlp提供两种类型的名词提取器。很难说有更好的东西,因为两者都处于开发阶段,但是NewsNouneXtractor包含更多功能。将来,名词提取器将总结为一个类。
from soynlp . noun import LRNounExtractor
noun_extractor = LRNounExtractor ()
nouns = noun_extractor . train_extract ( sentences ) # list of str like
from soynlp . noun import NewsNounExtractor
noun_extractor = NewsNounExtractor ()
nouns = noun_extractor . train_extract ( sentences ) # list of str like这是从2016-10-20新闻中学到的名词的一个例子。
덴마크 웃돈 너무너무너무 가락동 매뉴얼 지도교수
전망치 강구 언니들 신산업 기뢰전 노스
할리우드 플라자 불법조업 월스트리트저널 2022년 불허
고씨 어플 1987년 불씨 적기 레스
스퀘어 충당금 건축물 뉴질랜드 사각 하나씩
근대 투자주체별 4위 태권 네트웍스 모바일게임
연동 런칭 만성 손질 제작법 현실화
오해영 심사위원들 단점 부장조리 차관급 게시물
인터폰 원화 단기간 편곡 무산 외국인들
세무조사 석유화학 워킹 원피스 서장 공범
教程中有更详细的解释。
soynlp = 0.0.46+提供名词Extractor版本2。这是一个版本,可修订以前版本的名词的准确性,合成名词识别能力以及输出信息的错误。用法类似于版本1。
from soynlp . utils import DoublespaceLineCorpus
from soynlp . noun import LRNounExtractor_v2
corpus_path = '2016-10-20-news'
sents = DoublespaceLineCorpus ( corpus_path , iter_sent = True )
noun_extractor = LRNounExtractor_v2 ( verbose = True )
nouns = noun_extractor . train_extract ( sents )提取的名词为{str:nessTuple}格式。
print ( nouns [ '뉴스' ]) # NounScore(frequency=4319, score=1.0)_compounds_components存储构成复杂名词的单个名词中的信息。它实际上是一种复杂的形式,例如“韩国”和“绿色增长”,但是如果用作单个名词,则被认为是一个名词。
list ( noun_extractor . _compounds_components . items ())[: 5 ]
# [('잠수함발사탄도미사일', ('잠수함', '발사', '탄도미사일')),
# ('미사일대응능력위원회', ('미사일', '대응', '능력', '위원회')),
# ('글로벌녹색성장연구소', ('글로벌', '녹색성장', '연구소')),
# ('시카고옵션거래소', ('시카고', '옵션', '거래소')),
# ('대한민국특수임무유공', ('대한민국', '특수', '임무', '유공')),LRGRAPH将擦除的LR结构存储在学习的语料库中。您可以使用get_r和get_l检查此内容。
noun_extractor . lrgraph . get_r ( '아이오아이' )
# [('', 123),
# ('의', 47),
# ('는', 40),
# ('와', 18),
# ('가', 18),
# ('에', 7),
# ('에게', 6),
# ('까지', 2),
# ('랑', 2),
# ('부터', 1)]更多详细信息在教程2中。
2016年10月,有一些词语,例如“两次”和“爱荷华州”。但是,我从未见过这个词。因为总是制作新单词,所以有一个未注册的单词问题(OOV)无法识别您尚未学到的单词。但是,如果您目前阅读了几篇娱乐新闻文章,您会看到诸如“两次”和“ IOI”之类的单词出现,人们可以学习它。如果我们定义文档集中经常出现的连续单词热量,则可以使用统计信息提取它。有很多方法可以根据统计来学习单词(边界)。大豆提供内聚力评分,分支熵和登录器品种。
from soynlp . word import WordExtractor
word_extractor = WordExtractor ( min_frequency = 100 ,
min_cohesion_forward = 0.05 ,
min_right_branching_entropy = 0.0
)
word_extractor . train ( sentences ) # list of str or like
words = word_extractor . extract ()单词是一个名为“得分”的命令。
words [ '아이오아이' ]
Scores ( cohesion_forward = 0.30063636035733476 ,
cohesion_backward = 0 ,
left_branching_entropy = 0 ,
right_branching_entropy = 0 ,
left_accessor_variety = 0 ,
right_accessor_variety = 0 ,
leftside_frequency = 270 ,
rightside_frequency = 0
)这是一个示例,以从2016-10-26的新闻文章中学到的“分数”一词(凝聚力 * branking熵)排序。
단어 (빈도수, cohesion, branching entropy)
촬영 (2222, 1.000, 1.823)
서울 (25507, 0.657, 2.241)
들어 (3906, 0.534, 2.262)
롯데 (1973, 0.999, 1.542)
한국 (9904, 0.286, 2.729)
북한 (4954, 0.766, 1.729)
투자 (4549, 0.630, 1.889)
떨어 (1453, 0.817, 1.515)
진행 (8123, 0.516, 1.970)
얘기 (1157, 0.970, 1.328)
운영 (4537, 0.592, 1.768)
프로그램 (2738, 0.719, 1.527)
클린턴 (2361, 0.751, 1.420)
뛰어 (927, 0.831, 1.298)
드라마 (2375, 0.609, 1.606)
우리 (7458, 0.470, 1.827)
준비 (1736, 0.639, 1.513)
루이 (1284, 0.743, 1.354)
트럼프 (3565, 0.712, 1.355)
생각 (3963, 0.335, 2.024)
팬들 (999, 0.626, 1.341)
산업 (2203, 0.403, 1.769)
10 (18164, 0.256, 2.210)
확인 (3575, 0.306, 2.016)
필요 (3428, 0.635, 1.279)
문제 (4737, 0.364, 1.808)
혐의 (2357, 0.962, 0.830)
평가 (2749, 0.362, 1.787)
20 (59317, 0.667, 1.171)
스포츠 (3422, 0.428, 1.604)
更多详细信息在“提取教程”一词中。当前版本中提供的功能如下:
如果您从WordXtractor中学到了单词分数,则可以使用它将句子分解为沿单词边界的单词热量。大豆提供三个扭矩骑士。如果您擅长间距,则可以使用ltokenizer。我认为韩语的结构是“ l + [r]”,例如“名词 +调查”。
l零件可能是名词/动词/形容词/副词。如果只有l仅识别l中的l,则其余部分为r部分。 ltokenizer进入L零件的单词分数。
from soynlp . tokenizer import LTokenizer
scores = { '데이' : 0.5 , '데이터' : 0.5 , '데이터마이닝' : 0.5 , '공부' : 0.5 , '공부중' : 0.45 }
tokenizer = LTokenizer ( scores = scores )
sent = '데이터마이닝을 공부한다'
print ( tokenizer . tokenize ( sent , flatten = False ))
#[['데이터마이닝', '을'], ['공부', '중이다']]
print ( tokenizer . tokenize ( sent ))
# ['데이터마이닝', '을', '공부', '중이다']如果使用WordExtractor计算单词分数,则可以通过选择一个单词分数来创建分数。以下仅是正向内聚力的分数。另外,可以定义和使用各种单词分数。
from soynlp . word import WordExtractor
from soynlp . utils import DoublespaceLineCorpus
file_path = 'your file path'
corpus = DoublespaceLineCorpus ( file_path , iter_sent = True )
word_extractor = WordExtractor (
min_frequency = 100 , # example
min_cohesion_forward = 0.05 ,
min_right_branching_entropy = 0.0
)
word_extractor . train ( sentences )
words = word_extractor . extract ()
cohesion_score = { word : score . cohesion_forward for word , score in words . items ()}
tokenizer = LTokenizer ( scores = cohesion_score )您也可以使用名词分数和名词提取器的内聚力。例如,如果您想将“凝聚力得分 +名词得分”作为单词分数,则可以如下工作。
from soynlp . noun import LRNounExtractor_2
noun_extractor = LRNounExtractor_v2 ()
nouns = noun_extractor . train_extract ( corpus ) # list of str like
noun_scores = { noun : score . score for noun , score in nouns . items ()}
combined_scores = { noun : score + cohesion_score . get ( noun , 0 )
for noun , score in noun_scores . items ()}
combined_scores . update (
{ subword : cohesion for subword , cohesion in cohesion_score . items ()
if not ( subword in combined_scores )}
)
tokenizer = LTokenizer ( scores = combined_scores )如果未正确观察到间距,则单位除以句子的间距为L + [R]结构。但是,人们从没有保留空间的句子中熟悉的单词中注意到了人们。将此过程移至模型的MaxScoreTokeEnizer也使用单词分数。
from soynlp . tokenizer import MaxScoreTokenizer
scores = { '파스' : 0.3 , '파스타' : 0.7 , '좋아요' : 0.2 , '좋아' : 0.5 }
tokenizer = MaxScoreTokenizer ( scores = scores )
print ( tokenizer . tokenize ( '난파스타가좋아요' ))
# ['난', '파스타', '가', '좋아', '요']
print ( tokenizer . tokenize ( '난파스타가 좋아요' , flatten = False ))
# [[('난', 0, 1, 0.0, 1), ('파스타', 1, 4, 0.7, 3), ('가', 4, 5, 0.0, 1)],
# [('좋아', 0, 2, 0.5, 2), ('요', 2, 3, 0.0, 1)]]MaxScoreTokenizer还使用WordXtractor的结果,并像上面的示例一样适当地使用得分。如果已经有已知的单词字典,那么这些单词比其他任何单词都更高,并且该单词被切成一个单词。
您也可以根据规则来宣传热量。在语言变化的程度,我们认识到单词的界限。例如,“哦,哈哈ㅜ真的吗?”这些单词很容易用[哦,哈哈,ㅜㅜ,真实,?]分开。
from soynlp . tokenizer import RegexTokenizer
tokenizer = RegexTokenizer ()
print ( tokenizer . tokenize ( '이렇게연속된문장은잘리지않습니다만' ))
# ['이렇게연속된문장은잘리지않습니다만']
print ( tokenizer . tokenize ( '숫자123이영어abc에섞여있으면ㅋㅋ잘리겠죠' ))
# ['숫자', '123', '이영어', 'abc', '에섞여있으면', 'ㅋㅋ', '잘리겠죠'] 如果词典一词已建立,则可以使用它来创建基于预先的零件 - 语音决定因素。但是,因为这不是要分析词素,do',da'',''''''''''''and and'and'and'和“都是动词。 Lemmatizer目前正在开发和组织中。
pos_dict = {
'Adverb' : { '너무' , '매우' },
'Noun' : { '너무너무너무' , '아이오아이' , '아이' , '노래' , '오' , '이' , '고양' },
'Josa' : { '는' , '의' , '이다' , '입니다' , '이' , '이는' , '를' , '라' , '라는' },
'Verb' : { '하는' , '하다' , '하고' },
'Adjective' : { '예쁜' , '예쁘다' },
'Exclamation' : { '우와' }
}
from soynlp . postagger import Dictionary
from soynlp . postagger import LRTemplateMatcher
from soynlp . postagger import LREvaluator
from soynlp . postagger import SimpleTagger
from soynlp . postagger import UnknowLRPostprocessor
dictionary = Dictionary ( pos_dict )
generator = LRTemplateMatcher ( dictionary )
evaluator = LREvaluator ()
postprocessor = UnknowLRPostprocessor ()
tagger = SimpleTagger ( generator , evaluator , postprocessor )
sent = '너무너무너무는아이오아이의노래입니다!!'
print ( tagger . tag ( sent ))
# [('너무너무너무', 'Noun'),
# ('는', 'Josa'),
# ('아이오아이', 'Noun'),
# ('의', 'Josa'),
# ('노래', 'Noun'),
# ('입니다', 'Josa'),
# ('!!', None)]教程中描述了更详细的用法,此处描述了开发过程注释。
使用扭矩旋转或使用学习的扭矩旋转将文档创建为稀疏矩阵。可以调整最低期限 /期限频率 /文档频率的期限。详细模式打印当前的矢量情况。
vectorizer = BaseVectorizer (
tokenizer = tokenizer ,
min_tf = 0 ,
max_tf = 10000 ,
min_df = 0 ,
max_df = 1.0 ,
stopwords = None ,
lowercase = True ,
verbose = True
)
corpus . iter_sent = False
x = vectorizer . fit_transform ( corpus )如果文档使用稀疏矩阵大或不立即使用,则可以将其保存为文件而无需将其放在存储器上。 fit_to_file()或to_file()函数在您获得时立即记录一个文档的术语频率向量。基础向量器中可用的参数是相同的。
vectorizer = BaseVectorizer ( min_tf = 1 , tokenizer = tokenizer )
corpus . iter_sent = False
matrix_path = 'YOURS'
vectorizer . fit_to_file ( corpus , matrix_path )您可以输出一个使用int列表而不是稀疏矩阵的文档。目前,vectorizer中未学到的单词。vocabulary_不会编码。
vectorizer . encode_a_doc_to_bow ( '오늘 뉴스는 이것이 전부다' )
# {3: 1, 258: 1, 428: 1, 1814: 1}str列表可以使用int列表。
vectorizer . decode_from_bow ({ 3 : 1 , 258 : 1 , 428 : 1 , 1814 : 1 })
# {'뉴스': 1, '는': 1, '오늘': 1, '이것이': 1}编码还可以用dict格式的单词袋获得。
vectorizer . encode_a_doc_to_list ( '오늘의 뉴스는 매우 심각합니다' )
# [258, 4, 428, 3, 333]dict格式的单词袋可以解码。
vectorizer . decode_from_list ([ 258 , 4 , 428 , 3 , 333 ])
[ '오늘' , '의' , '뉴스' , '는' , '매우' ]它为对话数据,评论以及仅留下韩语或文字的重复表情符的摘要提供了一个函数。
from soynlp . normalizer import *
emoticon_normalize ( 'ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ쿠ㅜㅜㅜㅜㅜㅜ' , num_repeats = 3 )
# 'ㅋㅋㅋㅜㅜㅜ'
repeat_normalize ( '와하하하하하하하하하핫' , num_repeats = 2 )
# '와하하핫'
only_hangle ( '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜabcd123!!아핫' )
# '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜ 아핫'
only_hangle_number ( '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜabcd123!!아핫' )
# '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜ 123 아핫'
only_text ( '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜabcd123!!아핫' )
# '가나다ㅏㅑㅓㅋㅋ쿠ㅜㅜㅜabcd123!!아핫'教程中有更详细的解释。
它提供了一个用于计算共发生矩阵的函数,以进行关联分析和依点互信息(PMI)。
您可以使用send_to_word_contexts_matrix函数在下面(word,上下文单词)创建矩阵。 x是scipy.sparse.csr_matrix,(n_vocabs,n_vocabs)大小。 IDX2VOCAB是一个str的列表,其中包含与x的每一行相对应的单词。将前后窗户单词识别为句子的上下文,仅计算出显示为min_tf或更高频率的单词。 Dynamic_weight与上下文长度相反,加权与上下文长度成反比。如果Windows为3,则将1、2和3正方形的共发生计算为1、2/3、1/3。
from soynlp . vectorizer import sent_to_word_contexts_matrix
x , idx2vocab = sent_to_word_contexts_matrix (
corpus ,
windows = 3 ,
min_tf = 10 ,
tokenizer = tokenizer , # (default) lambda x:x.split(),
dynamic_weight = False ,
verbose = True
)如果输入X(是一个共发生矩阵,在PMI中,PMI都会由行和列的每个轴计算。 pmi_dok是scipy.sparse.dok_matrix格式。仅存储min_pmi的值,并且默认值为min_pmi = 0,因此PMI(PPMI)。 Alpha是PMI(X,Y)= P(X,Y) /(P(P) *(P) *(P) + Alpha)的平滑参数输入。计算过程需要很长时间,因此将其设置为“详细信息” = true以输出当前进度。
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)教程中有更详细的解释。
它提供了净化Sejong Horse数据的功能,以进行自然语言处理模型学习。它提供了一个功能,该功能可以创建一种以词段和语音形式纯化的学习数据,该功能可以制作表并制作表格,以及简化Sejong Malm的零件和语音系统的函数。
如果存在间距错误,则可以通过删除文本来容易分析文本。基于您要分析的数据,学习间距引擎并使用它来纠正间距错误。
无需学习扭矩刀或单词提取器,您可以使用hits算法从子字符串图中提取关键字。
关键字提取器。它使用logistic回归使用模型和基于统计的模型提供了两种类型的关键字提取器。它支持scipy.sparse中稀疏的矩阵格式和文本文件格式。