Inhaltsverzeichnis
Reiner Python -Code für die koreanische Analyse. Ziel ist es, ein nicht -map -Lernansatz zu sein, der Wörter in den Daten finden kann, ohne Lerndaten zu verwenden, Sätze mit Wörtern zu zerlegen oder Teile der Sprache zu unterscheiden.
WordExtractor oder NounExtractor, das von SOYNLP bereitgestellt wird, arbeitet mit statistischen Informationen, die aus mehreren Dokumenten gelernt wurden. Nicht -MAP -Lernansätze extrahieren Wörter mit statistischen Mustern, sodass sie in derselben Gruppe von Dokumenten (homogene Dokumente) gut funktionieren, die etwas größer sind als in einem Satz oder Dokument. Es ist gut, Extraktoren zu lernen, indem Sie nur Dokumente mit denselben Wörtern sammeln, z. B. Filmkommentare oder Nachrichtenartikel des Tages. Dokumente heterogener Gruppen werden nicht gut extrahiert, wenn sie sie zusammensammeln.
Bis SOYNLP = 0,0.46, gab es in den Namen von Parametern keine Regeln, die den minimalen oder maximalen Wert wie min_score, minimum_score, l_len_Min erfordern. Unter dem Code, den Sie bisher gearbeitet haben, können Sie diejenigen verwirren, die Parameter direkt festgelegt haben, aber wir haben den Namen der Variablen geändert , um die Unannehmlichkeiten zu verringern, die später vor dem späteren Fall erfolgen .
Nach 0,0.47 wird der variable Name, der die Bedeutung von Minimum und Maximum enthält, auf min und max reduziert. Schreiben Sie danach einen Namen für welches Element der Schwellenwertparameter. Vereinigen Sie den Parameternamen mit den folgenden Mustern: Entfernen Sie den Namen mit {min, max} _ {Substantiv, Word} _ {Score, Schwellenwert}. Wenn der Artikel offensichtlich ist, können Sie ihn weglassen.
Die Substring -Zählung erfolgt oft in Soynlp. Der mit der Frequenz verbundene Parameter ist mit dem Vorquadium und nicht der Zählung einheitlich.
Index und IDX sind mit IDX einheitlich.
Num und N, was Zahlen bedeutet, sind mit num vereinheitlicht.
$ pip install soynlpInfolge verschiedener Versuche, Substantive, V1, Nachrichten und V2 zu extrahieren, wurden drei Versionen erstellt. Die beste Leistung ist V2.
WordExtractor soll die Grenzwerte von Wörtern unter Verwendung von Statistiken erlernen und die Teile jedes Wortes nicht beurteilen. Manchmal müssen Sie die Parteien jedes Wortes kennen. Darüber hinaus treten neue Wörter in Substantiven am häufigsten an als andere Teile der Sprache. Auf der rechten Seite des Substantivs erscheinen häufig bestimmte Buchstaben, wie -Silver, -e und -. Wenn Sie sich die Verteilung dessen ansehen, was Buchstaben auf der rechten Seite des Substring auf der linken Seite der Wörter (Speicherplatz -Basis -Standardeinheit) erscheint, können Sie feststellen, ob es sich um ein Substantiv handelt oder nicht. Soynlp bietet zwei Arten von Substantivenextraktoren an. Es ist schwer zu sagen, dass etwas besser ist, weil beide in der Entwicklungsphase sind, aber NewsNounextractor enthält mehr Funktionen. In Zukunft wird der Substantivextraktor als eine Klasse zusammengefasst.
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 likeDies ist ein Beispiel für ein Substantiv, das aus den Nachrichten von 2016-10-20 gelernt wurde.
덴마크 웃돈 너무너무너무 가락동 매뉴얼 지도교수
전망치 강구 언니들 신산업 기뢰전 노스
할리우드 플라자 불법조업 월스트리트저널 2022년 불허
고씨 어플 1987년 불씨 적기 레스
스퀘어 충당금 건축물 뉴질랜드 사각 하나씩
근대 투자주체별 4위 태권 네트웍스 모바일게임
연동 런칭 만성 손질 제작법 현실화
오해영 심사위원들 단점 부장조리 차관급 게시물
인터폰 원화 단기간 편곡 무산 외국인들
세무조사 석유화학 워킹 원피스 서장 공범
Detailliertere Erklärungen finden Sie im Tutorial.
SOYNLP = 0.0.46+ bietet Substantivextraktorversion 2. Dies ist eine Version, die die Genauigkeit der vorherigen Version der Substantive, die Fähigkeit zur Erkennung von synthetischen Substantiven und den Fehler der Ausgabeinformationen überarbeitet. Die Verwendung ist ähnlich wie Version 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 )Die extrahierten Substantive sind {str: namedTuple} Format.
print ( nouns [ '뉴스' ]) # NounScore(frequency=4319, score=1.0)_Compounds_components speichert Informationen von einzelnen Substantiven, aus denen komplexe Substantive bestehen. Es ist tatsächlich eine komplexe Form wie "Korea" und "grünes Wachstum", aber wenn es als einzelnes Substantiv verwendet wird, wird es als einzelnes Substantiv erkannt.
list ( noun_extractor . _compounds_components . items ())[: 5 ]
# [('잠수함발사탄도미사일', ('잠수함', '발사', '탄도미사일')),
# ('미사일대응능력위원회', ('미사일', '대응', '능력', '위원회')),
# ('글로벌녹색성장연구소', ('글로벌', '녹색성장', '연구소')),
# ('시카고옵션거래소', ('시카고', '옵션', '거래소')),
# ('대한민국특수임무유공', ('대한민국', '특수', '임무', '유공')),LRGraph speichert die LR -Struktur des Lösches im gelernten Korpus. Sie können dies mit Get_r und get_l überprüfen.
noun_extractor . lrgraph . get_r ( '아이오아이' )
# [('', 123),
# ('의', 47),
# ('는', 40),
# ('와', 18),
# ('가', 18),
# ('에', 7),
# ('에게', 6),
# ('까지', 2),
# ('랑', 2),
# ('부터', 1)]Weitere Details finden Sie in Tutorial 2.
Im Oktober 2016 gibt es Wörter wie "Two Talle" und "Iowa". Ich habe diese Worte dieses Wort jedoch noch nie gesehen. Da immer neue Wörter gemacht werden, gibt es ein nicht registriertes Wortproblem (OOV), das die Wörter, die Sie nicht gelernt haben, nicht erkannt. Wenn Sie jedoch mehrere Unterhaltungsnachrichten Artikel lesen, können Sie sehen, dass Wörter wie "zweimal" und "ioi" erscheinen, und die Leute können es lernen. Wenn wir die kontinuierliche Wortwärme definieren, die häufig im Dokumentsatz erscheint, können wir sie mit Statistiken extrahieren. Es gibt viele Möglichkeiten, Wörter (Grenzen) zu lernen, die auf Statistiken basieren. SOYNLP bietet Kohäsionswert, Verzweigungsentropie und Accessor -Sorte.
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 ist ein Diktat, das einen benannten Tuple bezeichnet hat.
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
)Dies ist ein Beispiel, das nach der Wort Score (Kohäsion * Branking-Entropie) aus dem Newsartikel von 2016-10-26 sortiert ist.
단어 (빈도수, 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)
Weitere Details finden Sie im Wort Extraction Tutorial. Die in der aktuellen Version bereitgestellten Funktionen sind wie folgt:
Wenn Sie vom WordXtractor eine Wortbewertung gelernt haben, können Sie ihn verwenden, um den Satz in eine Wortwärme entlang der Grenze des Wortes zu zerlegen. Soynlp bietet drei Drehmomentritter an. Wenn Sie gut im Abstand sind, können Sie Ltokenizer verwenden. Ich denke, die Struktur der koreanischen Sprache lautet "l + [r]" wie "Nomen + Survey".
L -Teile können Substantive/Verben/Adjektive/Adverbien sein. Wenn L nur L im Wort erkennt, sind der Rest R -Teile. Ltokenizer betritt die Wortbewertung von L -Teilen.
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 ))
# ['데이터마이닝', '을', '공부', '중이다']Wenn Sie die Wortwerte mit WordExtractor berechnen, können Sie Bewertungen erstellen, indem Sie eines der Wörter -Scores auswählen. Unten finden Sie nur die Punktzahl der Vorwärtskohäsion. Darüber hinaus können verschiedene Wörter bewertet und verwendet werden.
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 )Sie können auch den Substantiv -Score und den Zusammenhalt des Substantiv -Extraktors verwenden. Wenn Sie beispielsweise die "Kohäsions -Score + Nomen -Punktzahl" als Word -Score verwenden möchten, können Sie wie folgt arbeiten.
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 )Wenn der Abstand nicht ordnungsgemäß beobachtet wird, ist die Einheit geteilt durch die Abstandsbasis des Satzes l + [r] Struktur. Menschen werden jedoch aus bekannten Wörtern in Sätzen bemerkt, die keine Räume gehalten werden. MaxScoretokeenizer, der diesen Prozess in das Modell verschoben hat, verwendet ebenfalls eine Wortbewertung.
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 verwendet auch die Ergebnisse von WordXtractor und nutzt die Werte angemessen wie das obige Beispiel. Wenn bereits bekanntes Wortwörterbuch bekannt ist, geben diese Wörter eine größere Punktzahl als jedes andere Wort, und das Wort wird in ein Wort geschnitten.
Sie können auch eine Wortwärme auf der Grundlage von Regeln vornehmen. In dem Punkt, an dem sich die Sprache ändert, erkennen wir die Grenzen von Wörtern. Zum Beispiel "Oh haha ㅜ ㅜ wirklich?" Die Wörter sind leicht mit [oh, haha, ㅜㅜ, real,?] Geteilt.
from soynlp . tokenizer import RegexTokenizer
tokenizer = RegexTokenizer ()
print ( tokenizer . tokenize ( '이렇게연속된문장은잘리지않습니다만' ))
# ['이렇게연속된문장은잘리지않습니다만']
print ( tokenizer . tokenize ( '숫자123이영어abc에섞여있으면ㅋㅋ잘리겠죠' ))
# ['숫자', '123', '이영어', 'abc', '에섞여있으면', 'ㅋㅋ', '잘리겠죠'] Wenn das Wort Dictionary gut etabliert ist, können Sie es verwenden, um eine vor -basierte Teil -Speech -Determinante zu erstellen. Weil es jedoch nicht, Morpheme zu analysieren, "tun", "da", "und" und "und" und sind alle Verben. Lemmatizer ist derzeit in Entwicklung und Organisation.
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)]Eine detailliertere Verwendung wird im Tutorial beschrieben, und die Entwicklungsprozessnotizen werden hier beschrieben.
Erstellen Sie das Dokument mit dem Drehmomentrichter oder mit dem gelernten Drehmomentrichter in spärliche Matrix. Minimum / Maximum der Term der Termfrequenz / Dokumentfrequenz kann eingestellt werden. Der ausführliche Modus druckt die aktuelle vektoröse Situation.
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 )Wenn das Dokument groß oder nicht sofort mit einer spärlichen Matrix ist, können Sie es als Datei speichern, ohne es in den Speicher zu setzen. Fit_to_file () oder to_file () -Funktion zeichnet den Begriff Frequenzvektor für ein Dokument auf, sobald Sie erhalten. Die im BaseVectorizer verfügbaren Parameter sind gleich.
vectorizer = BaseVectorizer ( min_tf = 1 , tokenizer = tokenizer )
corpus . iter_sent = False
matrix_path = 'YOURS'
vectorizer . fit_to_file ( corpus , matrix_path )Sie können ein Dokument mit der Liste von int anstelle von spärlicher Matrix ausgeben. Zu diesem Zeitpunkt werden Wörter, die nicht in Vectorizer.Vocabulary_ gelernt werden, keine Codierung.
vectorizer . encode_a_doc_to_bow ( '오늘 뉴스는 이것이 전부다' )
# {3: 1, 258: 1, 428: 1, 1814: 1}Die Liste der INT ist mit der Liste von str.
vectorizer . decode_from_bow ({ 3 : 1 , 258 : 1 , 428 : 1 , 1814 : 1 })
# {'뉴스': 1, '는': 1, '오늘': 1, '이것이': 1}Codierung ist auch mit der Wörtertüte im Diktatformat erhältlich.
vectorizer . encode_a_doc_to_list ( '오늘의 뉴스는 매우 심각합니다' )
# [258, 4, 428, 3, 333]Die Wörterbeutel im DICT -Format kann decodieren.
vectorizer . decode_from_list ([ 258 , 4 , 428 , 3 , 333 ])
[ '오늘' , '의' , '뉴스' , '는' , '매우' ]Es bietet eine Funktion für die Zusammenfassung der wiederholten Emoticons in Gesprächsdaten, Kommentaren und nur Koreanisch oder Text.
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!!아핫'Detailliertere Erklärungen finden Sie im Tutorial.
Es bietet eine Funktion für die Berechnung der Co-Auftreten-Matrix für die Assoziationsanalyse und die Punktinformation (PMI).
Sie können Matrix mit der Funktion Sent_to_word_contexts_matrix unten erstellen (Wort, Kontextwörter). X ist scipy.sparse.csr_matrix, (n_vocabs, n_vocabs) Größe. Idx2vocab ist eine Liste von STR, die Wörter enthält, die jeder Zeile, Spalte von x, entsprechen. Erkennen Sie die vorderen und hinteren Windows -Wörter als Kontext des Satzes und berechnen Sie nur die Wörter, die als Frequenz von min_tf oder höher erscheinen. Dynamic_gewicht wird umgekehrt proportional zur Kontextlänge gewichtet. Wenn Windows 3 ist, wird das Ko-Auftreten von 1, 2 und 3 Quadraten als 1, 2/3, 1/3 berechnet.
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
)Wenn Sie in PMI in PMI, eine Ko-Auftreten-Matrix, eingeben, wird PMI durch jede Achse von Zeile und Spalte berechnet. Pmi_dok ist scipy.sparse.dok_matrix Format. Es wird nur der Wert von min_pmi gespeichert, und der Standard ist min_pmi = 0, also positiv PMI (ppmi). Alpha ist eine Glättungsparametereingabe in PMI (x, y) = p (x, y) / (p) * (p) + Alpha). Der Berechnungsprozess dauert lange. Setzen Sie ihn also auf ausführlich = treu, um den aktuellen Fortschritt auszugeben.
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)Detailliertere Erklärungen finden Sie im Tutorial.
Es bietet Funktionen zum Reinigen von Sejong Horse -Daten für das Modell der natürlichen Sprachverarbeitung. Es bietet eine Funktion, die eine Art von Lerndaten erstellt, die in Form von Morphem und Sprache gereinigt werden, eine Funktion, die eine Tabelle erstellt und eine Tabelle erstellt, und eine Funktion, die das Teile und das Sprachsystem von Sejong Malm vereinfacht.
Wenn ein Abstandsfehler vorliegt, kann es einfach sein, Text durch Entfernen zu analysieren. Lernen Sie basierend auf den Daten, die Sie analysieren möchten, die Abstandsmaschine und korrigieren Sie sie, um den Abstandsfehler zu korrigieren.
Ohne einen Drehmoment Knicer oder Word Extractor lernen zu müssen, können Sie mithilfe von Hits -Algorithmus Schlüsselwörter aus dem Substring -Diagramm extrahieren.
Schlüsselwort -Extraktor. Es bietet zwei Arten von Keyword -Extraktoren, die Modelle und statistisch basierte Modelle unter Verwendung der logistischen Regression verwenden. Es unterstützt das Format und das Format der spärlichen Matrix -Format und das Textdateiformat in scipy.sparse.