RNNs are neural networks that can handle sequence data by incorporating a time component. They learn from past sequence data to predict future states in new sequence data. The document discusses RNN architecture, which includes an input layer, hidden layer, and output layer. The hidden layer receives input from the current time step and previous hidden state. Backpropagation Through Time is used to train RNNs by propagating error terms back in time. The document provides an example implementation of an RNN for time series prediction using TensorFlow and Keras.
RNNs are neural networks that can handle sequence data by incorporating a time component. They learn from past sequence data to predict future states in new sequence data. The document discusses RNN architecture, which uses a hidden layer that receives both the current input and the previous hidden state. It also covers backpropagation through time (BPTT) for training RNNs on sequence data. Examples are provided to implement an RNN from scratch using TensorFlow and Keras to predict a noisy sine wave time series.
1. Web Scraping with Python
Chapter 07. CleaningYour Dirty Data
SweetK
Ryan Jeong
2. WHAT IS N-GRAM
Field Unit Sample sequence 1-gram sequence 2-gram sequence 3-gram sequence
Vernacular name - - unigram bigram trigram
Order of resulting
Markov model
- - 0 1 2
Protein
sequencing
amino acid … Cys-Gly-Leu-Ser-Trp … …, Cys, Gly, Leu, Ser, Trp, …
…, Cys-Gly, Gly-Leu, Leu-Ser, Ser-
Trp, …
…, Cys-Gly-Leu, Gly-Leu-Ser, Leu-Ser-Trp,
…
DNA sequencing base pair …AGCTTCGA… …, A, G, C, T, T, C, G, A, … …, AG, GC, CT, TT, TC, CG, GA, … …, AGC, GCT, CTT, TTC, TCG, CGA, …
Computational
linguistics
character …to_be_or_not_to_be…
…, t, o, _, b, e, _, o, r, _, n, o,
t, _, t, o, _, b, e, …
…, to, o_, _b, be, e_, _o, or, r_, _n,
no, ot, t_, _t, to, o_, _b, be, …
…, to_, o_b, _be, be_, e_o, _or, or_, r_n,
_no, not, ot_, t_t, _to, to_, o_b, _be, …
Computational
linguistics
word … to be or not to be … …, to, be, or, not, to, be, …
…, to be, be or, or not, not to, to be,
…
…, to be or, be or not, or not to, not to be, …
어떤 글에서 출현빈도 계산 및 공통점 추출
↓
자연어 처리, 언어인식, 색인방법론, 검색 등에 사용됨.
4. 연습 1단계 : CLEANING IN CODE
결과출력 앞부분
소스
BeautifulSoup 을 사용해 카페글의 본문내용을 가져와 출력해 보면,
content = bsObj.find("div", {"id": "tbody"})
print(content)
결과출력 앞부분에서 보는 바와 같이 지저분한 html이 함께 섞여 있습니다.
이것을 깨끗하게 하기위해서,
content = content.get_text()
print(content)
이렇게 처리하면, 결과출력 뒷부분의 상단에 출력된 것과 같이,
다른 것들은 제거가 되고, 원하는 대로 본문만 보입니다.
…
결과출력 뒷부분
* 여기서 n-gram 함수는,
단어 빈도분석 등으로 문장의 특징을 분석하거나 하려고 사용하는데,
다른 NLP 함수를 사용하면 더 정확하다 하겠다.
5. 연습 1단계 : CLEANING IN CODE
cleanInput 함수를 보면,
re.sub의 parameter로,
'[[0-9]*]'
나
' +'
을 볼 수 있는데,
이를 정규표현식이라고 합니다.
간단히 반복 패턴을 처리하는 * 와 + 만 살펴보겠습니다.
*는 0번 이상 반복되면 매칭 되었다고 판단!
+는 1번 이상 반복되면 매칭 되었다고 판단!
예를들어, 정규식 ‘ta*b’와 ‘ta+b’의 다른 점
정규식이 ‘ta*b’ 이라면,
문자열에 tb 가 있으면 매칭되었다고 판단합니다. t와 b
사이에 a가 0번 반복되었기 때문입니다.
그러나 ‘ta+b’ 라면, tb는 매칭이 되지 않았다고 판단
합니다. a가 1번이상 반복되지 않았기 때문입니다.
나머지 tab, taab, taaaab등은 모두 매칭된 것으로 판단
하겠지요.
이 정규표현에 대해서는 아래 링크에 들어가 보시면,
더 많은 정보를 상세하게 확인 할 수 있습니다.
https://docs.python.org/3.6/library/re.html?highlight=regular
6. 연습 1단계 : CLEANING IN CODE
cleanInput 함수를 보면,
re.sub의 parameter로,
'[[0-9]*]'
나
' +'
을 볼 수 있는데,
이를 정규표현식이라고 합니다.
이 예제 소스에서는 이와 같은 함수를 써서,
input = re.sub('[[0-9]*]', "", input)
[와] 사이에 숫자가 0번이상 반복되면, 지워버려라 하는 것이고,
input = re.sub(' +', " ", input)
공백(스페이스)가 1번이상 반복되면, 공백 한번으로만 바꿔라 하는 것이다.
‘[‘와 ‘]’사이에 숫자가 0번 이상 반복되면 매칭 판단
공백(스페이스)이 1번 이상 반복되면 매칭 판단
7. 연습 2단계 : DATA NORMALIZATION
단어 빈도수 분석을 하려면 ....
결과출력소스
이번 소스는 다른 부분은 모두 같고,
getNgram 함수만 수정하여 출력해 본 것이다.
우리는 bi-gram 을 사용하므로, 이렇게 수정한다면,
2개로 조합된 문구의 빈도가 얼마나 많은지를 체크하는 것이다.
결과출력이 모두 1로 나와서 실망하지는 마시라.
NLP 함수를 쓰거나, 좀 더 긴 글을 사용하면, 확연히 차이나는 결과를 볼 것이다.
지금은 이런 방식으로 data를 cleaning하는 기법을 연습하는데 만족하자.
from collections import OrderedDict
...
ngrams = getNgrams(content, 2)
ngrams = OrderedDict(sorted(ngrams.items(), key=lambda t: t[1], reverse=True))
print(ngrams)
...
그리고, 이런 식으로 OrderedDict 를 사용하여 소스를 수정하면,
단어의 빈도가 높은 순서로 출력되도록 할 수 있다.