Tabla de contenido
Código de pitón puro para análisis coreano. Su objetivo es ser un enfoque de aprendizaje sin mapas que puede encontrar palabras en los datos sin usar datos de aprendizaje, desmontar oraciones con palabras o discriminar partes del habla.
WORDEXTRATOR o SEUNEXTROTOR proporcionado por SoynLP funciona utilizando información estadística aprendida de múltiples documentos. Los enfoques basados en el aprendizaje sin mapas extraen palabras usando patrones estadísticos, por lo que funcionan bien en el mismo grupo de documentos (documentos homogéneos) que son algo más grandes que en una oración o documento. Es bueno aprender extractores recopilando solo documentos usando las mismas palabras, como comentarios de películas o artículos de noticias del día. Los documentos de grupos heterogéneos no se extraen bien cuando los recogen.
Hasta que soynlp = 0.0.46, no hubo reglas en los nombres de los parámetros, que requieren el valor mínimo o máximo, como min_score, minimum_score, l_len_min. Entre el código que ha trabajado hasta ahora, puede confundir a aquellos que han establecido parámetros directamente, pero hemos modificado el nombre de la variable para reducir las molestias que ocurrirán más tarde antes de que sea más adelante .
Después de 0.0.47, el nombre de la variable que contiene el significado de mínimo y máximo se reduce a Min y Max. Después de eso, escriba un nombre para qué elemento es el parámetro umbral. Unifique el nombre del parámetro con los siguientes patrones: unifique el nombre con {min, max} _ {sustantivo, word} _ {stork, umbral}. Si el artículo es obvio, puede omitirlo.
El conteo de subcadres a menudo se realiza en soynlp. El parámetro asociado con la frecuencia se unifica con la prequencia, no con cuenta.
El índice e IDX se unifican con IDX.
Num y N, lo que significa números, se unifican con num.
$ pip install soynlpComo resultado de varios intentos de extraer sustantivos, V1, noticias y V2 se crearon tres versiones. El mejor rendimiento es V2.
WordExtractor es aprender los puntajes límite de las palabras usando estadísticas, y no juzgar las partes de cada palabra. A veces necesitas conocer las partes de cada palabra. Además, las nuevas palabras son más comunes en sustantivos que en otras partes del habla. En el lado derecho del sustantivo, a menudo aparecen ciertas letras, como -silver, -e y -. Si observa la distribución de qué letras aparecen en el lado derecho de la subcadena en el lado izquierdo de las palabras (unidad estándar basada en el espacio), puede determinar si es o no un sustantivo. SOYNLP ofrece dos tipos de extractores sustantivos. Es difícil decir que algo es mejor porque ambos están en la etapa de desarrollo, pero Newsnounextractor contiene más características. En el futuro, el extractor sustantivo se resumirá como una sola clase.
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 likeEste es un ejemplo de un sustantivo aprendido de las noticias de 2016-10-20.
덴마크 웃돈 너무너무너무 가락동 매뉴얼 지도교수
전망치 강구 언니들 신산업 기뢰전 노스
할리우드 플라자 불법조업 월스트리트저널 2022년 불허
고씨 어플 1987년 불씨 적기 레스
스퀘어 충당금 건축물 뉴질랜드 사각 하나씩
근대 투자주체별 4위 태권 네트웍스 모바일게임
연동 런칭 만성 손질 제작법 현실화
오해영 심사위원들 단점 부장조리 차관급 게시물
인터폰 원화 단기간 편곡 무산 외국인들
세무조사 석유화학 워킹 원피스 서장 공범
Explicaciones más detalladas están en el tutorial.
SOYNLP = 0.0.46+ ofrece el extractor del sustantivo versión 2. Esta es una versión que revisa la precisión de la versión anterior de los sustantivos, la capacidad de reconocimiento del sustantivo sintético y el error de la información de salida. El uso es similar a la versión 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 )Los sustantivos extraídos son {str: namedtuple} formato.
print ( nouns [ '뉴스' ]) # NounScore(frequency=4319, score=1.0)_Compounds_Components almacena información de sustantivos individuales que componen sustantivos complejos. En realidad, es una forma compleja, como 'Corea' y 'crecimiento verde', pero si se usa como un solo sustantivo, se reconoce como un sustantivo único.
list ( noun_extractor . _compounds_components . items ())[: 5 ]
# [('잠수함발사탄도미사일', ('잠수함', '발사', '탄도미사일')),
# ('미사일대응능력위원회', ('미사일', '대응', '능력', '위원회')),
# ('글로벌녹색성장연구소', ('글로벌', '녹색성장', '연구소')),
# ('시카고옵션거래소', ('시카고', '옵션', '거래소')),
# ('대한민국특수임무유공', ('대한민국', '특수', '임무', '유공')),Lrgraph almacena la estructura LR del borrado en el corpus erudito. Puede verificar esto usando get_r y get_l.
noun_extractor . lrgraph . get_r ( '아이오아이' )
# [('', 123),
# ('의', 47),
# ('는', 40),
# ('와', 18),
# ('가', 18),
# ('에', 7),
# ('에게', 6),
# ('까지', 2),
# ('랑', 2),
# ('부터', 1)]Más detalles están en el Tutorial 2.
En octubre de 2016, hay palabras como 'dos veces' e 'Iowa'. Sin embargo, nunca he visto estas palabras esta palabra. Debido a que siempre se hacen nuevas palabras, hay un problema de palabras no registrado (OOV) que no reconoce las palabras que no ha aprendido. Sin embargo, si lee varios artículos de noticias de entretenimiento escritos en este momento, puede ver que aparecen palabras como 'dos veces' e 'ioi', y la gente puede aprenderlo. Si definimos el calor continuo de la palabra que a menudo aparece en el conjunto de documentos, podemos extraerlo utilizando estadísticas. Hay muchas formas de aprender palabras (límites) basadas en estadísticas. SOYNLP proporciona puntaje de cohesión, entropía de ramificación y variedad de accesorios.
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 ()Las palabras son un dict que contiene un puntaje llamado.
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
)Este es un ejemplo ordenado por el puntaje de la palabra (cohesión * entropía de salpicadería) aprendida del artículo de noticias de 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)
Más detalles están en el tutorial de extracción de palabras. Las funciones proporcionadas en la versión actual son las siguientes:
Si ha aprendido una puntuación de palabra del Wordxtractor, puede usarla para descomponer la oración en una palabra calor a lo largo del límite de la palabra. Soynlp ofrece tres caballeros de torque. Si eres bueno para el espacio, puedes usar LTokenizer. Creo que la estructura del idioma coreano es "l + [r]" como "sustantivo + encuesta".
L Las piezas pueden ser sustantivos/verbos/adjetivos/adverbios. Si solo L reconozca solo L en la palabra, el resto son R Parts. Ltokenizer ingresa a la palabra puntaje de L piezas.
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 ))
# ['데이터마이닝', '을', '공부', '중이다']Si calcula los puntajes de las palabras usando WordExtractor, puede crear puntajes eligiendo uno de los puntajes de palabras. A continuación se muestra solo la puntuación de la cohesión delantera. Además, se pueden definir y utilizar varias puntuaciones de palabras.
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 )También puede usar la puntuación nominal y la cohesión del extractor sustantivo. Por ejemplo, si desea utilizar el "puntaje de cohesión + puntaje sustantivo" como una puntuación de palabra, puede trabajar de la siguiente manera.
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 )Si el espacio no se observa correctamente, la unidad dividida por la base de espaciado de la oración es la estructura L + [R]. Sin embargo, las personas se notan por palabras familiares en oraciones que no se mantienen espacios. MaxScoretokeEnizer, que trasladó este proceso al modelo, también usa una puntuación de Word.
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 también utiliza los resultados de Wordxtractor y usa puntajes apropiadamente como el ejemplo anterior. Si ya hay un diccionario de palabras conocido, estas palabras dan una puntuación mayor que cualquier otra palabra, y la palabra se corta en una palabra.
También puede hacer una palabra de calor en función de las reglas. En el punto en que cambia el lenguaje, reconocemos los límites de las palabras. Por ejemplo, "Oh, jaja ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ ㅜ Las palabras se dividen fácilmente con [oh, jaja, ㅜㅜ, real?].
from soynlp . tokenizer import RegexTokenizer
tokenizer = RegexTokenizer ()
print ( tokenizer . tokenize ( '이렇게연속된문장은잘리지않습니다만' ))
# ['이렇게연속된문장은잘리지않습니다만']
print ( tokenizer . tokenize ( '숫자123이영어abc에섞여있으면ㅋㅋ잘리겠죠' ))
# ['숫자', '123', '이영어', 'abc', '에섞여있으면', 'ㅋㅋ', '잘리겠죠'] Si el diccionario de la palabra está bien establecido, puede usarlo para crear un determinante de parte de la parte pre -basada. Sin embargo, porque no es para analizar los morfemas, 'do', 'da', 'y' y 'y' y 'y son todos verbos. Lemmatizer se encuentra actualmente en desarrollo y organización.
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)]El uso más detallado se describe en el tutorial, y las notas del proceso de desarrollo se describen aquí.
Cree el documento en una matriz dispersa usando el torque de Knighter o usando el torque de Knighter. Se puede ajustar el mínimo / máximo del término de frecuencia de término / documento. El modo detallado imprime la situación vectorosa actual.
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 )Si el documento es grande o no usa inmediatamente la matriz dispersa, puede guardarlo como un archivo sin ponerlo en la memoria. Fit_to_file () o to_file () registra el vector de frecuencia del término para un documento tan pronto como obtenga. Los parámetros disponibles en BaseVectorizer son los mismos.
vectorizer = BaseVectorizer ( min_tf = 1 , tokenizer = tokenizer )
corpus . iter_sent = False
matrix_path = 'YOURS'
vectorizer . fit_to_file ( corpus , matrix_path )Puede emitir un documento con la lista de int en lugar de la matriz dispersa. En este momento, las palabras que no se aprenden en Vectorizer.vocabulary_ no estarán codificando.
vectorizer . encode_a_doc_to_bow ( '오늘 뉴스는 이것이 전부다' )
# {3: 1, 258: 1, 428: 1, 1814: 1}La lista de int es posible con la lista de Str.
vectorizer . decode_from_bow ({ 3 : 1 , 258 : 1 , 428 : 1 , 1814 : 1 })
# {'뉴스': 1, '는': 1, '오늘': 1, '이것이': 1}La codificación también está disponible con la bolsa de palabras en el formato DICT.
vectorizer . encode_a_doc_to_list ( '오늘의 뉴스는 매우 심각합니다' )
# [258, 4, 428, 3, 333]La bolsa de palabras en el formato DICT puede ser decodificación.
vectorizer . decode_from_list ([ 258 , 4 , 428 , 3 , 333 ])
[ '오늘' , '의' , '뉴스' , '는' , '매우' ]Proporciona una función para el resumen de los emoticones repetidos en los datos de conversación, los comentarios y para dejar solo coreano o texto.
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!!아핫'Explicaciones más detalladas están en el tutorial.
Proporciona una función para calcular la matriz de concurrencia para el análisis de asociación e información mutua puntual (PMI).
Puede crear matriz usando la función SEND_TO_WORD_CONTEXTS_MATRIX a continuación (palabra, palabras de contexto). X es scipy.sparse.csr_matrix, (n_vocabs, n_vocabs) tamaño. IDX2Vocab es una lista de STR que contiene palabras correspondientes a cada fila, columna de x. Reconoce las palabras de ventanas delanteras y traseras como un contexto de oración, y calcule solo las palabras que aparecen como la frecuencia de min_tf o superior. Dynamic_weight está ponderando inversamente proporcional a la longitud de contexto. Si las ventanas son 3, la concurrencia de 1, 2 y 3 cuadrados se calcula como 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
)Si ingresa X, que es una matriz de concurrencia, en PMI, PMI se calcula por cada eje de fila y columna. PMI_DOK es scipy.sparse.dok_matrix format. Solo se almacena el valor de min_pmi, y el valor predeterminado es min_pmi = 0, por lo que PMI positivo (PPMI). Alpha es una entrada de parámetros de suavizado a pmi (x, y) = p (x, y) / (p (p) * (p) + alfa). El proceso de cálculo lleva mucho tiempo, así que configúrelo en verbose = verdadero para generar el progreso actual.
from soynlp . word import pmi
pmi_dok = pmi (
x ,
min_pmi = 0 ,
alpha = 0.0001 ,
verbose = True
)Explicaciones más detalladas están en el tutorial.
Proporciona funciones para purificar los datos de los caballos de Sejong para el aprendizaje del modelo de procesamiento del lenguaje natural. Proporciona una función que crea un tipo de datos de aprendizaje purificados en forma de morfema y habla, una función que hace una tabla y hace una tabla, y una función que simplifica las piezas y el sistema de voz de Sejong Malm.
Si hay un error de separación, puede ser fácil analizar el texto eliminándolo. Según los datos que desea analizar, aprenda el motor de espaciado y úselo para corregir el error de separación.
Sin tener que aprender un Knicer de torque o extractor de palabras, puede extraer palabras clave del gráfico de subcadena usando el algoritmo HITS.
Extractor de palabras clave. Ofrece dos tipos de extractores de palabras clave, utilizando modelos y modelos estadísticos basados en la regresión logística. Admite el formato de matriz dispersa y el formato de archivo de texto en Scipy.sparse.