250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- correlation
- chatGPT
- subdag
- GenericGBQException
- integrated gradient
- 유튜브 API
- 상관관계
- requests
- spark udf
- top_k
- youtube data
- UDF
- 공분산
- BigQuery
- tensorflow text
- Airflow
- API
- flask
- hadoop
- Retry
- grad-cam
- gather_nd
- GCP
- API Gateway
- airflow subdag
- TensorFlow
- Counterfactual Explanations
- XAI
- session 유지
- login crawling
Archives
- Today
- Total
데이터과학 삼학년
[Text preprocessing] 문장 형태소별 토큰화 및 벡터화 본문
반응형
Tfidf 벡터라이저에서 벡터화할 단위를 정해줘야하는 tokenizer를 통해 토큰을 잘라 토큰별로 벡터화가 진행된다.
먼저 전처리로 텍스트를 토큰화 한다.
### konlpy 의 mecab 을 활용하여 한글 토큰화
def noun_parsing(contents):
mecab = Mecab()
noun_data = ' '.join(mecab.nouns(contents))
return noun_data
def morphs_parsing(contents):
mecab = Mecab()
noun_data = ' '.join(mecab.morphs(contents))
return noun_data
### Google cloud Natural Language API 를 이용해 토큰화
### CNL을 이용하면 언어를 자동 탐지하여 해당 언어에 맞게 토큰함
def cnl_syntax(s):
client = language_v1.LanguageServiceClient()
document = {"content": s, "type": enums.Document.Type.PLAIN_TEXT} # , "language": "en"
try:
response = client.analyze_syntax(document, encoding_type=enums.EncodingType.UTF8)
syntax_list = []
text_list = []
for token in response.tokens:
text = token.text.content
part_of_speech = token.part_of_speech
pumsa = enums.PartOfSpeech.Tag(part_of_speech.tag).name
syntax_list.append((text,pumsa))
text_list.append(text)
return ' '.join(text_list)
except :
print('InvalidArgument error')
return s
위 코드에서 형태소 별로 token를 처리하고 이를 ' ' 로 붙여서 전처리 했기 때문에 tokenizer로는 lambda를 이용하여 띄어쓰기 단위 split을 적용한다.
data['contents'] = data['contents'].astype(str)
data['noun_contents'] = data['contents'].apply(noun_parsing)
data['morphs_contents'] = data['contents'].apply(morphs_parsing)
data['morphs_contents_cnl'] = data['contents'].apply(cnl_syntax)
토큰된 문장을 이용하여 벡터화를 진행함
벡터는 TF-IDF 벡터화 이용
tfidv = TfidfVectorizer(tokenizer=lambda x : x.split(),encoding='utf-8',ngram_range=(1,2)).fit(X_train)
X_train = tfidv.transform(X_train).toarray()
X_test = tfidv.transform(X_test).toarray()
벡터화된 데이터를 하나 살펴보면
X_test[1][4500:]
앞은 0로 채운다 제일 긴 문장에 맞게 패딩을 진행함
array([ 3, 86, 85, 4, 467, 2220, 188, 86, 85,
4, 260, 168, 6, 96, 5, 6391, 3, 54,
45, 566, 86, 8908, 11, 6302, 1068, 5, 6,
1315, 17939, 13, 168, 36, 2, 25, 31, 3849,
86, 85, 4, 467, 268, 6, 509, 38, 4,
355, 19, 58, 6392, 17940, 279, 326, 1252, 5440,
7, 6, 514, 864, 553, 2357, 408, 58, 6,
1836, 111, 3053, 957, 1, 208, 17941, 54, 45,
32, 34, 9, 86, 79, 154, 13, 3, 943,
10, 6, 148, 13, 57, 482, 1501, 3290, 1,
2684, 29, 1504, 230, 5, 24, 44, 30, 9,
6, 4335, 374, 2, 44, 893, 4, 829, 1,
269, 6, 267, 113, 282, 5171, 25, 30, 9,
618, 4, 5465, 3, 347, 38, 2, 6, 4212,
17942, 4, 81, 9, 231, 4, 64, 47, 1,
200, 1389, 3, 1020, 4033, 3966, 2, 6, 11455,
17943, 12, 24, 17, 1, 30, 86, 2, 6,
172, 3, 976, 86, 6, 666, 852, 7, 4033,
2, 227, 552, 140, 853, 99, 373, 1504, 7,
191, 5104, 17944, 2, 52, 1069, 30, 552, 140,
853, 1606, 77, 80, 6, 32, 34, 2, 7,
98, 439, 13, 77, 25, 93, 30, 9, 121,
893, 4, 3917, 70, 6, 153, 121, 717, 2,
186, 1, 4596, 527, 871, 134, 116, 2, 372,
30, 37, 7, 7, 1954, 77, 1141, 509, 38,
160, 3924, 511, 1217, 4008, 584, 46, 322, 32,
34, 9, 1504, 10, 2159, 1, 41], dtype=int32)
728x90
반응형
LIST
'Natural Language Processing' 카테고리의 다른 글
tf.keras (2.0) & soynlp를 이용한 텍스트 분류 (DNN, RNN, CNN) (0) | 2020.06.12 |
---|---|
soynlp 한국어 형태소 분석기(학습형 형태소 분리기) (0) | 2020.06.08 |
BTS 불건전 팬픽 분류 분석 (Naive Bayes, Logistic Regression, RNN) (0) | 2020.06.01 |
[Text preprocessing] 텍스트 데이터의 encoding 형식을 알아내기 (0) | 2020.05.28 |
[Text preprocessing] 한국어 문장 splitter (0) | 2020.05.27 |
Comments