جدول المحتويات
رمز بيثون النقي للتحليل الكوري. يهدف إلى أن يكون نهج التعلم غير الخريطة يمكن أن يجد الكلمات في البيانات دون استخدام بيانات التعلم ، أو تفكيك الجمل بالكلمات ، أو تمييز أجزاء من الكلام.
WordExtractor أو Nounextractor المقدمة من SoynLP يعمل باستخدام المعلومات الإحصائية المستفادة من مستندات متعددة. تستخلص الأساليب غير المستندة إلى التعلم غير المستند إلى الأنماط الإحصائية ، لذلك فهي تعمل بشكل جيد في نفس المجموعة من المستندات (المستندات المتجانسة) التي تكون أكبر إلى حد ما في جملة واحدة أو وثيقة. من الجيد تعلم المستخلصات من خلال جمع المستندات فقط باستخدام نفس الكلمات ، مثل تعليقات الأفلام أو المقالات الإخبارية لليوم. لا يتم استخراج وثائق المجموعات غير المتجانسة بشكل جيد عندما يجمعونها معًا.
حتى Soynlp = 0.0.46 ، لم تكن هناك قواعد في أسماء المعلمات ، والتي تتطلب الحد الأدنى أو الحد الأقصى للقيمة ، مثل min_score ، minimum_score ، l_len_min. من بين التعليمات البرمجية التي عملت حتى الآن ، يمكنك الخلط بين أولئك الذين وضعوا المعلمات مباشرة ، لكننا قمنا بتعديل اسم المتغير لتقليل الإزعاج الذي سيحدث لاحقًا قبل أن يكون لاحقًا .
بعد 0.0.47 ، يتم تقليل الاسم المتغير الذي يحتوي على معنى الحد الأدنى والحد الأقصى إلى Min و Max. بعد ذلك ، اكتب اسمًا لأي عنصر هو معلمة عتبة. قم بتوحيد اسم المعلمة مع الأنماط التالية: قم بتوحيد الاسم باستخدام {min ، max} _ {noun ، word} _ {score ، threshold}. إذا كان العنصر واضحًا ، فيمكنك حذفه.
غالبًا ما يتم العد الفرعي في SoynLP. يتم توحيد المعلمة المرتبطة بالتردد مع الوفاء ، وليس العد.
يتم توحيد الفهرس و 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+ نسخة مستخرج من الاسم. الاستخدام يشبه الإصدار 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: namedtuple}.
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 ، هناك كلمات مثل "مرتين" و "أيوا". ومع ذلك ، لم أر هذه الكلمات هذه الكلمة من قبل. نظرًا لأن الكلمات الجديدة تُصنع دائمًا ، فهناك مشكلة غير مسجلة (OOV) لا تتعرف على الكلمات التي لم تتعلمها. ومع ذلك ، إذا قرأت العديد من المقالات الإخبارية الترفيهية المكتوبة في هذا الوقت ، فيمكنك أن ترى أن الكلمات مثل "مرتين" و "ioi" تظهر ، ويمكن للناس تعلمها. إذا حددنا حرارة الكلمة المستمرة التي تظهر غالبًا في مجموعة المستندات ، فيمكننا استخراجها باستخدام الإحصاءات. هناك العديد من الطرق لتعلم الكلمات (الحدود) بناءً على الإحصاءات. يوفر SoynLP درجة التماسك ، الانتروبيا المتفرعة ، وتنوع الملحقات.
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
)هذا مثال تم تصنيفه بواسطة Word Score (تماسك * الانتروبيا) المستفادة من المقالة الإخبارية 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)
مزيد من التفاصيل هي في البرنامج التعليمي لاستخراج كلمة. الوظائف الواردة في الإصدار الحالي هي كما يلي:
إذا كنت قد تعلمت درجة كلمة من WordXtractor ، فيمكنك استخدامها لتحويل الجملة إلى حرارة كلمة على طول حدود الكلمة. يقدم Soynlp ثلاثة فرسان عزم الدوران. إذا كنت جيدًا في التباعد ، فيمكنك استخدام Ltokenizer. أعتقد أن هيكل اللغة الكورية هو "L + [r]" مثل "Noun + Survey".
قد تكون الأجزاء l أسماء/أفعال/صفات/adverbs. إذا لم يتعرف 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', '에섞여있으면', 'ㅋㅋ', '잘리겠죠'] إذا كان القاموس Word راسخًا ، فيمكنك استخدامه لإنشاء جزء محدد -of -speech. ومع ذلك ، لأنه ليس تحليل المورفيميات ، "افعل" ، "دا" ، و "و" و "و" وكلها أفعال. 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)]تم وصف استخدام أكثر تفصيلاً في البرنامج التعليمي ، ويتم وصف ملاحظات عملية التطوير هنا.
قم بإنشاء المستند في مصفوفة متناثرة باستخدام Torque Knighter ، أو باستخدام knighter عزم الدوران. يمكن ضبط الحد الأدنى / الحد الأقصى لمصطلح التردد / وثيقة الوثيقة. وضع المطول يطبع الموقف المتجه الحالي.
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 () يسجل مصطلح متجه التردد لمستند واحد بمجرد أن تحصل. المعلمات المتاحة في BaseVectorizer هي نفسها.
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}قائمة INT ممكنة مع قائمة STR.
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]يمكن أن تكون حقيبة الكلمات بتنسيق التقراط.
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 أدناه (كلمة ، كلمات سياق). 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). ألفا هو إدخال معلمة تجانس إلى PMI (x ، y) = p (x ، y) / (p (p) * (p) + alpha). تستغرق عملية الحساب وقتًا طويلاً ، لذا قم بتعيينها على مطوّل = صحيح لإخراج التقدم الحالي.
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)المزيد من التفسيرات التفصيلية في البرنامج التعليمي.
يوفر وظائف لتنقية بيانات الحصان Sejong لتعلم نموذج معالجة اللغة الطبيعية. إنه يوفر وظيفة تنشئ نوعًا من بيانات التعلم المنقى في شكل مورفيم والكلام ، وهي وظيفة تصنع جدولًا وتصنع جدولًا ، ودالة تبسط الأجزاء ونظام الكلام في Sejong Malm.
إذا كان هناك خطأ في التباعد ، فقد يكون من السهل تحليل النص عن طريق إزالته. بناءً على البيانات التي تريد تحليلها ، تعرف على محرك التباعد واستخدمه لتصحيح خطأ التباعد.
دون الاضطرار إلى تعلم مسكن عزم الدوران أو مستخرج الكلمات ، يمكنك استخراج الكلمات الرئيسية من الرسم البياني الفرعي باستخدام خوارزمية HITS.
مستخرج الكلمات الرئيسية. يوفر نوعين من مستخلصات الكلمات الرئيسية ، باستخدام النماذج والنماذج القائمة على الإحصائيات باستخدام الانحدار اللوجستي. وهو يدعم تنسيق المصفوفة المتفرقة وتنسيق الملف النصي في scipy.sparse.