반응형

/*******************************************************************************************************************
-- Title : [Py3.5] Tokenizing to Words and Sentences - dBRang
-- Reference : dbrang
-- Key word : 단어 토큰 문장 토큰 tokenize sent_tokenize word_tokenize nltk nlp dataframe 데이터프레임
                  자연어처리 자연어 처리 sent tokenize word tokenize 정규식 정규 표현식 정규표현식 sent_token
                  regular expression re.split tokenizer.tokenize re.compile findall re lambda tokenizing sent token
                  word_token word token
*******************************************************************************************************************/

■ Corpus에서 문장(sentence)이나 단어(word)로 Tokenizing

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# -*- coding: utf-8 -*-
 
import re
from pandas import Series, DataFrame
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.tokenize.regexp import RegexpTokenizer
from nltk.tokenize.regexp import regexp_tokenize
 
 
# ------------------------------
# -- 문장 Sourcing
# ------------------------------
 
# --
# -- 문장 Source
# --
raw_sent = """Hello Mr. Heyden 2488, How are you doing 'today'? 
This Hyper-Computer is _great, and Python is awesome.
The sky is pinkish-blue. You shouldn't eat cardboard.
"""
 
print (raw_sent)
print("... Raw_Corpus""." * 100"\n")
 
 
# ------------------------------
# -- 문장 Tokenizing : 정규표현식 사용
# ------------------------------
lst_reg_sent = re.split("[\n\.\?]", raw_sent)
lst_reg_sent = [temp for temp in lst_reg_sent if temp != '' and temp != ' '# 빈 값인 경우 제외
 
print(lst_reg_sent)
print("*** RE) Sent_Token_by_re.split""*" * 100"\n")
 
# --
# -- List를 Dataframe으로 변경
# --
df_reg_sent = DataFrame(lst_reg_sent)
df_reg_sent.columns = ["title"]
df_reg_sent.index.name = "idx"
 
print (df_reg_sent)
print("*** RE) DF_from_Sent_List""*" * 100"\n")
 
 
# ------------------------------
# -- 문장 Tokenizing : nltk.sent_tokenize 사용
# ------------------------------
 
# --
# -- 문장 Tokenizing
# --
lst_nltk_sent = sent_tokenize(raw_sent)
 
print (lst_nltk_sent)
print("/// NLTK) Sent_Token_by_nltk_tokenize""/" * 100"\n")
 
# --
# -- List를 Dataframe으로 변경
# --
df_nltk_sent = DataFrame(lst_nltk_sent)
df_nltk_sent.columns = ["title"]
df_nltk_sent.index.name = "idx"
 
print (df_nltk_sent)
print("/// NLTK) DF_from_Sent_List""/" * 100"\n")
 
 
# ------------------------------
# -- 단어 Tokenizing
# ------------------------------
 
# --
# -- 단어 Tokenizing : 정규식표현 사용
# --
tokenizer = RegexpTokenizer("[\w']+")
df_reg_sent["word_token"= df_reg_sent["title"].apply(lambda x: tokenizer.tokenize(x))
 
print (df_reg_sent["word_token"])
print("### NLTK.RE) Word_Token_by_NLTK.Regexp""#" * 100"\n")
 
# --
# -- 단어 Tokenizing : NLTK 사용
# --
df_nltk_sent["word_token"= df_nltk_sent["title"].apply(lambda x: word_tokenize(x))
 
print (df_nltk_sent["word_token"])
print("### NLTK.RE) Word_Token_by_NLTK.Tokenize""#" * 100"\n")
 
 
# ------------------------------
# -- 단어 Extraction(최남우 Method)
# ------------------------------
df_reg_sent["word_token"= df_reg_sent["title"].apply(lambda x: re.compile('[a-z]+[\-]?[a-z]+', re.I).findall(x))
                                                        # 상기 lanbda는 re.I를 통해 대소문자 무시(아래 두 문장을 처리)
                                                        #     c = re.compile('[a-z]+[\-]?[a-z]+', re.I)
                                                        #     print (c.findall(raw_sent))
 
print (df_reg_sent["word_token"])
print("$$$ RE.Find) Word_Token_by_RE.Findall""$" * 100"\n")
cs




반응형

+ Recent posts