目錄
純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中稀疏的矩陣格式和文本文件格式。