Daftar isi
Kode Python murni untuk analisis Korea. Ini bertujuan untuk menjadi pendekatan pembelajaran non -map yang dapat menemukan kata -kata dalam data tanpa menggunakan data pembelajaran, membongkar kalimat dengan kata -kata, atau membedakan bagian bicara.
WordExtractor atau nounextractor yang disediakan oleh Soynlp Works menggunakan informasi statistik yang dipelajari dari beberapa dokumen. Pendekatan berbasis pembelajaran non -MAP mengekstrak kata -kata menggunakan pola statistik, sehingga mereka bekerja dengan baik dalam kelompok dokumen yang sama (dokumen homogen) yang agak lebih besar daripada dalam satu kalimat atau dokumen. Adalah baik untuk mempelajari ekstraktor dengan mengumpulkan hanya dokumen menggunakan kata -kata yang sama, seperti komentar film atau artikel berita saat itu. Dokumen kelompok yang heterogen tidak diekstraksi dengan baik ketika mereka mengumpulkannya bersama.
Sampai soynlp = 0,0,46, tidak ada aturan dalam nama parameter, yang membutuhkan nilai minimum atau maksimum, seperti min_score, minimum_score, l_len_min. Di antara kode yang telah Anda kerjakan sejauh ini, Anda dapat membingungkan mereka yang telah menetapkan parameter secara langsung, tetapi kami telah memodifikasi nama variabel untuk mengurangi ketidaknyamanan yang akan terjadi nanti sebelum nanti .
Setelah 0,0,47, nama variabel yang berisi arti minimum dan maksimum dikurangi menjadi min dan maks. Setelah itu, tulis nama untuk item apa yang menjadi parameter ambang batas. Bersatu nama parameter dengan pola berikut: Unifikasi nama dengan {min, max} _ {noun, word} _ {skor, threshold}. Jika itemnya jelas, Anda dapat menghilangkannya.
Penghitungan substring sering dilakukan dalam soynlp. Parameter yang terkait dengan frekuensi disatukan dengan prefisiensi, bukan hitungan.
Indeks dan IDX disatukan dengan IDX.
Num dan n, yang berarti angka, disatukan dengan num.
$ pip install soynlpSebagai hasil dari berbagai upaya untuk mengekstraksi kata benda, v1, berita, dan v2 tiga versi dibuat. Kinerja terbaik adalah V2.
WordExtractor adalah mempelajari skor batas kata menggunakan statistik, dan jangan menilai bagian dari setiap kata. Terkadang Anda perlu mengetahui pihak dari setiap kata. Selain itu, kata -kata baru paling umum dalam kata benda daripada bagian lain dari ucapan. Di sisi kanan kata benda, huruf -huruf tertentu sering muncul, seperti -silver, -e, dan -. Jika Anda melihat distribusi huruf apa yang muncul di sisi kanan substring di sisi kiri kata (unit standar berbasis ruang), Anda dapat menentukan apakah itu kata benda atau tidak. Soynlp menawarkan dua jenis ekstraktor kata benda. Sulit untuk mengatakan bahwa ada sesuatu yang lebih baik karena keduanya berada dalam tahap pengembangan, tetapi Newsnounextractor berisi lebih banyak fitur. Di masa depan, ekstraktor kata benda akan dirangkum sebagai satu kelas.
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 likeIni adalah contoh dari kata benda yang dipelajari dari berita 2016-10-20.
덴마크 웃돈 너무너무너무 가락동 매뉴얼 지도교수
전망치 강구 언니들 신산업 기뢰전 노스
할리우드 플라자 불법조업 월스트리트저널 2022년 불허
고씨 어플 1987년 불씨 적기 레스
스퀘어 충당금 건축물 뉴질랜드 사각 하나씩
근대 투자주체별 4위 태권 네트웍스 모바일게임
연동 런칭 만성 손질 제작법 현실화
오해영 심사위원들 단점 부장조리 차관급 게시물
인터폰 원화 단기간 편곡 무산 외국인들
세무조사 석유화학 워킹 원피스 서장 공범
Penjelasan yang lebih rinci ada di tutorial.
Soynlp = 0,0,46+ menawarkan noun extractor versi 2. Ini adalah versi yang merevisi keakuratan versi kata benda sebelumnya, kemampuan pengenalan kata benda sintetis, dan kesalahan informasi output. Penggunaan mirip dengan versi 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 )Kata benda yang diekstraksi adalah format {str: namedTuple}.
print ( nouns [ '뉴스' ]) # NounScore(frequency=4319, score=1.0)_Compounds_Components menyimpan informasi dari kata benda tunggal yang membentuk kata benda yang kompleks. Ini sebenarnya adalah bentuk yang kompleks, seperti 'Korea' dan 'pertumbuhan hijau', tetapi jika digunakan sebagai kata benda tunggal, diakui sebagai kata benda tunggal.
list ( noun_extractor . _compounds_components . items ())[: 5 ]
# [('잠수함발사탄도미사일', ('잠수함', '발사', '탄도미사일')),
# ('미사일대응능력위원회', ('미사일', '대응', '능력', '위원회')),
# ('글로벌녹색성장연구소', ('글로벌', '녹색성장', '연구소')),
# ('시카고옵션거래소', ('시카고', '옵션', '거래소')),
# ('대한민국특수임무유공', ('대한민국', '특수', '임무', '유공')),LRGRAPH menyimpan struktur LR penghapus dalam korpus yang dipelajari. Anda dapat memeriksa ini menggunakan get_r dan get_l.
noun_extractor . lrgraph . get_r ( '아이오아이' )
# [('', 123),
# ('의', 47),
# ('는', 40),
# ('와', 18),
# ('가', 18),
# ('에', 7),
# ('에게', 6),
# ('까지', 2),
# ('랑', 2),
# ('부터', 1)]Rincian lebih lanjut ada di tutorial 2.
Pada Oktober 2016, ada kata -kata seperti 'dua kali' dan 'Iowa'. Namun, saya belum pernah melihat kata -kata ini kata ini. Karena kata -kata baru selalu dibuat, ada masalah kata yang tidak terdaftar (OOV) yang tidak mengenali kata -kata yang belum Anda pelajari. Namun, jika Anda membaca beberapa artikel berita hiburan yang ditulis saat ini, Anda dapat melihat kata -kata seperti 'dua kali' dan 'IOI' muncul, dan orang -orang dapat mempelajarinya. Jika kita mendefinisikan panas kata kontinu yang sering muncul dalam set dokumen, kita dapat mengekstraknya menggunakan statistik. Ada banyak cara untuk mempelajari kata -kata (batas) berdasarkan statistik. Soynlp memberikan skor kohesi, entropi bercabang, dan variasi aksesor.
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 ()Kata -kata adalah dikt yang memegang namedtuple bernama skor.
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
)Ini adalah contoh yang diurutkan berdasarkan kata skor (kohesi * entropi Branking) yang dipelajari dari artikel berita 2016-10-26.
단어 (빈도수, 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)
Rincian lebih lanjut ada dalam tutorial ekstraksi kata. Fungsi yang disediakan dalam versi saat ini adalah sebagai berikut:
Jika Anda telah mempelajari skor kata dari wordxtractor, Anda dapat menggunakannya untuk memecah kalimat menjadi panas kata di sepanjang batas kata. Soynlp menawarkan tiga ksatria torsi. Jika Anda pandai jarak, Anda dapat menggunakan ltokenizer. Saya pikir struktur bahasa Korea adalah "l + [r]" seperti "kata benda + survei".
L bagian -bagian dapat berupa kata benda/kata kerja/kata sifat/kata keterangan. Kalau saja L hanya mengenali L dalam kata, sisanya adalah bagian R. Ltokenizer memasuki kata skor bagian 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 ))
# ['데이터마이닝', '을', '공부', '중이다']Jika Anda menghitung skor kata menggunakan WordExtractor, Anda dapat membuat skor dengan memilih salah satu skor kata. Di bawah ini hanya skor kohesi ke depan. Selain itu, berbagai skor kata dapat didefinisikan dan digunakan.
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 )Anda juga dapat menggunakan skor kata benda dan kohesi dari ekstraktor kata benda. Misalnya, jika Anda ingin menggunakan "skor kohesi + skor kata benda" sebagai skor kata, Anda dapat bekerja sebagai berikut.
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 )Jika jarak tidak diamati dengan benar, unit dibagi dengan basis jarak dari kalimat adalah struktur L + [r]. Namun, orang diperhatikan dari kata -kata yang akrab dalam kalimat yang tidak disimpan ruang. MaxScoretokeenizer, yang memindahkan proses ini ke model, juga menggunakan skor kata.
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 juga menggunakan hasil WordXtractor dan menggunakan skor dengan tepat seperti contoh di atas. Jika ada kamus kata yang sudah diketahui, kata -kata ini memberikan skor yang lebih besar daripada kata lain, dan kata itu dipotong menjadi satu kata.
Anda juga dapat membuat kata panas berdasarkan aturan. Pada titik di mana bahasa berubah, kami mengenali batas -batas kata. Misalnya, "Oh haha ㅜ ㅜ benar -benar?" Kata -kata itu mudah dibagi dengan [oh, haha, ㅜㅜ, nyata,?].
from soynlp . tokenizer import RegexTokenizer
tokenizer = RegexTokenizer ()
print ( tokenizer . tokenize ( '이렇게연속된문장은잘리지않습니다만' ))
# ['이렇게연속된문장은잘리지않습니다만']
print ( tokenizer . tokenize ( '숫자123이영어abc에섞여있으면ㅋㅋ잘리겠죠' ))
# ['숫자', '123', '이영어', 'abc', '에섞여있으면', 'ㅋㅋ', '잘리겠죠'] Jika Kata Kamus sudah mapan, Anda dapat menggunakannya untuk membuat bagian -OF -OF -Speech penentu. Namun, karena itu bukan untuk menganalisis morfem, 'lakukan', 'da', 'dan' dan 'dan' dan 'dan semuanya kata kerja. Lemmatizer saat ini sedang dalam pengembangan dan organisasi.
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)]Penggunaan yang lebih rinci dijelaskan dalam tutorial, dan catatan proses pengembangan dijelaskan di sini.
Buat dokumen menjadi matriks yang jarang menggunakan knighter torsi, atau menggunakan knighter torsi yang dipelajari. Minimum / maksimum jangka waktu jangka waktu / frekuensi dokumen dapat disesuaikan. Mode verbose mencetak situasi vektor saat ini.
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 )Jika dokumennya besar atau tidak segera menggunakan matriks yang jarang, Anda dapat menyimpannya sebagai file tanpa meletakkannya di memori. Fungsi fit_to_file () atau to_file () mencatat vektor frekuensi istilah untuk satu dokumen segera setelah Anda dapatkan. Parameter yang tersedia di Basevectorizer adalah sama.
vectorizer = BaseVectorizer ( min_tf = 1 , tokenizer = tokenizer )
corpus . iter_sent = False
matrix_path = 'YOURS'
vectorizer . fit_to_file ( corpus , matrix_path )Anda dapat mengeluarkan satu dokumen dengan daftar int, bukan matriks yang jarang. Pada saat ini, kata -kata yang tidak dipelajari di vektorizer.vocabulary_ tidak akan menyandikan.
vectorizer . encode_a_doc_to_bow ( '오늘 뉴스는 이것이 전부다' )
# {3: 1, 258: 1, 428: 1, 1814: 1}Daftar int dimungkinkan dengan daftar str.
vectorizer . decode_from_bow ({ 3 : 1 , 258 : 1 , 428 : 1 , 1814 : 1 })
# {'뉴스': 1, '는': 1, '오늘': 1, '이것이': 1}Pengkodean juga tersedia dengan kantong kata -kata dalam format dikt.
vectorizer . encode_a_doc_to_list ( '오늘의 뉴스는 매우 심각합니다' )
# [258, 4, 428, 3, 333]Kantung kata -kata dalam format diktik bisa decoding.
vectorizer . decode_from_list ([ 258 , 4 , 428 , 3 , 333 ])
[ '오늘' , '의' , '뉴스' , '는' , '매우' ]Ini memberikan fungsi untuk ringkasan emotikon berulang dalam data percakapan, komentar, dan hanya meninggalkan Korea atau teks.
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!!아핫'Penjelasan yang lebih rinci ada di tutorial.
Ini menyediakan fungsi untuk menghitung matriks kemunculan bersama untuk analisis asosiasi dan informasi timbal balik titik-bijaksana (PMI).
Anda dapat membuat matriks menggunakan fungsi Sent_TO_WORD_CONTEXTS_MATRIX di bawah ini (kata, kata konteks). X adalah scipy.sparse.csr_matrix, (n_vocabs, n_vocabs) ukuran. IDX2VOCAB adalah daftar STR yang berisi kata -kata yang sesuai dengan setiap baris, kolom x. Kenali kata -kata jendela depan dan belakang sebagai konteks kalimat, dan hanya menghitung kata -kata yang muncul sebagai frekuensi min_tf atau lebih tinggi. Dynamic_weight adalah bobot berbanding terbalik dengan panjang konteks. Jika jendela adalah 3, co-kejadian kotak 1, 2, dan 3 dihitung sebagai 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
)Jika Anda memasukkan X, yang merupakan matriks co-kejadian, dalam PMI, PMI dihitung oleh setiap sumbu baris dan kolom. PMI_DOK adalah format scipy.sparse.dok_matrix. Hanya nilai min_pmi yang disimpan, dan standarnya adalah min_pmi = 0, jadi PMI positif (PPMI). Alpha adalah input parameter smoothing ke PMI (x, y) = p (x, y) / (p (p) * (p) + alpha). Proses perhitungan membutuhkan waktu lama, jadi atur ke verbose = benar untuk menghasilkan kemajuan saat ini.
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)Penjelasan yang lebih rinci ada di tutorial.
Ini menyediakan fungsi untuk memurnikan data kuda sejong untuk pembelajaran model pemrosesan bahasa alami. Ini memberikan fungsi yang menciptakan jenis data pembelajaran yang dimurnikan dalam bentuk morfem dan ucapan, fungsi yang membuat tabel dan membuat tabel, dan fungsi yang menyederhanakan bagian dan sistem bicara Sejong Malm.
Jika ada kesalahan jarak, mudah untuk menganalisis teks dengan menghapusnya. Berdasarkan data yang ingin Anda analisis, pelajari mesin jarak dan gunakan untuk memperbaiki kesalahan jarak.
Tanpa harus mempelajari torsi knicer atau ekstraktor kata, Anda dapat mengekstrak kata kunci dari grafik substring menggunakan algoritma hit.
Ekstraktor kata kunci. Ini menawarkan dua jenis ekstraktor kata kunci, menggunakan model dan model berbasis statistik menggunakan regresi logistik. Ini mendukung format matriks dan format file teks yang jarang di Scipy.sparse.