Оглавление
Cure Python Code для корейского анализа. Он стремится быть необразованным подходом к обучению, который может найти слова в данных без использования данных обучения, разобрать предложения со словами или различать части речи.
WordExtractor или Nounextractor, предоставляемый Soinlp Works с использованием статистической информации, полученной из нескольких документов. Подходы на основе обучения, основанные на обучении, извлекают слова, используя статистические шаблоны, поэтому они хорошо работают в одной и той же группе документов (однородные документы), которые несколько больше, чем в одном предложении или документе. Хорошо изучать экстракторы, собирая только документы, используя одни и те же слова, такие как комментарии фильмов или новостные статьи дня. Документы гетерогенных групп плохо извлекаются, когда они собирают их вместе.
До SOINLP = 0,0,46, в именах параметров не было никаких правил, которые требуют минимального или максимального значения, таких как min_score, minimum_score, l_len_min. Среди кода, который вы работали до сих пор, вы можете путать тех, кто установил параметры напрямую, но мы изменили имя переменной , чтобы уменьшить неудобства, которые произойдут позже, прежде чем это будет позже .
После 0,0,47 имя переменной, которое содержит значение минимума и максимума, уменьшается до мин и максимума. После этого напишите имя для того, какой элемент является пороговым параметром. Объединить имя параметра с помощью следующих шаблонов: объединить имя с {min, max} _ {существительное, слово} _ {оценка, порог}. Если предмет очевиден, вы можете опустить его.
Подсчет подстроения часто выполняется в 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위 태권 네트웍스 모바일게임
연동 런칭 만성 손질 제작법 현실화
오해영 심사위원들 단점 부장조리 차관급 게시물
인터폰 원화 단기간 편곡 무산 외국인들
세무조사 석유화학 워킹 원피스 서장 공범
Более подробные объяснения в учебном пособии.
SOINLP = 0,0,46+ предлагает существительное экстрактор версии 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: nameTuple}.
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
)Это пример сортируется по счете слов (сплоченность * Энтропия Branking), изученная из новостной статьи 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]», как «Sun + Survey».
L Части могут быть существительными/глаголами/прилагательными/наречиями. Если L распознает только L в слове, остальные являются r частями. Ltokenizer входит в слово «партитуры».
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», 'и' и 'и' и 'и все глаголы. 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}Список 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]Мешок слов в формате дикта может быть расшифровкой.
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).
Вы можете создать матрицу, используя функцию SENT_TO_WORD_CONTEXTS_MATRIX ниже (Word, Context Words). X is 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 IS SCIPY.SPARSE.DOK_MATRIX FORMAT. Хранится только значение min_pmi, а по умолчанию - min_pmi = 0, поэтому положительный PMI (PPMI). Альфа - это вход параметров сглаживания в PMI (x, y) = p (x, y) / (p (p) * (p) + альфа). Процесс расчета занимает много времени, поэтому установите его на verbose = true, чтобы вывести текущий прогресс.
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)Более подробные объяснения в учебном пособии.
Он предоставляет функции для очистки данных лошади Sejong для обучения модели обработки естественного языка. Он обеспечивает функцию, которая создает тип учебных данных, очищенных в форме морфы и речи, функцию, которая составляет таблицу и делает таблицу, и функция, которая упрощает детали и речевую систему Sejong Malm.
Если есть ошибка расстояния, это может быть легко анализировать текст, удалив его. На основании данных, которые вы хотите проанализировать, изучите двигатель интервалов и используйте его для исправления ошибки расстояния.
Без необходимости выучить крутящий момент или экстрактор Word, вы можете извлечь ключевые слова с графа подстроения, используя алгоритм Hits.
Ключевое извлечение. Он предлагает два типа экстракторов ключевых слов, использующие модели и статистические модели с использованием логистической регрессии. Он поддерживает формат разреженной матрицы и формат текстового файла в scipy.sparse.