반응형
/*******************************************************************************************************************
-- 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 |
반응형