이 연설문에는 긍정단어가 많은지, 부정단어가 많은지 분석 해 보겠다.
1. 먼저 테이블 생성.
create table speech
(speech_text varchar2(1000));
2. 연설문 text 데이터 임포트
3. 연설문 전체를 어절별로 나누어야 한다. 정규식 함수 사용 ( regexp_substr)
select *
from ( select regexp_substr(lower(speech_text) , '[^ ]+', 1, a) as word
from speech, ( select level as a
from dual
connect by level <= 100)
)
where word is not null;
- 먼저 행의 어절을 읽을 수 있도록 connect by 절을 기술 해 준다.
- 그리고 만들어둔 Table 과 함께, 소문자로 변환시긴 lower(speech_text) 컬럼에서 문자를 추출하는 정규식 함수를 사용한다.
- 정규식 함수 ( 컬럼 , 공백이 아닌 여러개(= 단어를지칭) , 1번째어절부터, a어절 까지 )
여기서 a 까지라는 의미는 FROm 절에 in line view 로 묶어준 connect by 절의 level 의 별칭 A 를 뜻한다.
이렇게 되면 연설문 첫번째 단어부터, connect by 절이 정해놓은 한 줄에 100 개의 어절 까지 모두다 출력되게 된다. - 이 연설문이 100 번째 까지 행이 있는게 아니므로 다 스캔 된뒤 출력된 결과물에는 NULL 이 포함되어 출력되게 된다.
- 그러므로 WHERE 절에 추출한 단어에서 NUll 은 빼겠다는 조건절을 입력해 주어야한다.
-> 그래야 불필요한 데이터 없이 단어들만 추출된다.
4. 어절, 어절별 건수를 높은 순으로 출력 할 것 ( 어절 = word)
select word , count(*)
from ( select regexp_substr**(**lower(speech_text) , '[^ ]+', 1, a) as word
from speech, ( select level as a
from dual connect by level <= 100)
)
where word is not null
group by word
order by 2 desc;
같은 단어별로 묶어서 그 단어별 갯수를 세어본다.
->결과를 보게 되면 정관사 the 가 많이 나오는 단어이다.
5. 특정 텍스트에 긍정단어가많은지, 부정단어가많은지 분석하기 위해 아래의 테이블 2개 생성
create table positive
(p_text varchar2(2000));
→ 긍정 테이블
create table negative
(n_text varchar2(2000));
→ 부정테이블
- 테이블별로 데이터 임포트 하기
- 참고로 헤더 체크 표시 해제 하고 (건너뛴 후)
- 왼쪽 둘러 싸기 없음
6. 미리 만들어놓은 어절별로 만들어 놓은 연설문을 view 로 생성한다. (가독성을 위한것 )
create or replace view stev_text
as
select *
from ( select rtrim( trim('"' from regexp_substr(lower(speech_text),'[^ ]+',1,a)
), ',.:;?!'''
) as word
from speech, (select level as a
from dual
connect by level <= 100
)
)
where word is not null;
- trim 으로 먼저 어절별로 잘라진 문장에 붙어있는 " 를 잘라낸다.
- 그다음 RTrim 으로 오른쪽에 붙어있는 ,.:;?!' 을 잘라냅니다.
(중간에 여기 없는 문자나 단어가 있다면 그 막혀있는 단어 전의 잘라낼 기호나, 문자는 지워지지 않는다. - ' 싱글 쿼테이션을 자를 때 ''두개를 쓴 이유는 ? '' 를 두개입력해야 싱글 ' 하나로 인식 하기 때문!!!!
- -> 데이터 정제 과정이라고 한다.
7. view 와 positive 테이블을 이용하여 긍정단어가 단어별 몇개 존재하는지 출력하기 ( exists 문 사용)
select word, count(*)
from stev_text s
where exists (select 'X'
from positive p
where p.p_text = s.word
)
group by word
order by 2 desc;
단어와, 그 단어별 갯수를 출력해 준다.
→ great 가 6 으로 가장 많이 사용한 긍정 단어이다.
8. 반대로 부정 단어는 몇개 존재하는지 출력 해보겠다.
select word, count(*)
from stev_text s
where exists (select 'X'
from negative n
where n.n_text = s.word
)
group by word
order by 2 desc;
→ death 가 6개로 가장 많이 사용한 부정 단어이다.
스티브 잡스 연설문에는 긍정단어가 많은지 부정단어가 많은지 각각 건수를 알아내시오
select count(*)
from stev_text s
where exists (select 'X'
from positive p
where p.p_text = s.word);
→ 긍정 87 건
select count(*)
from stev_text s
where exists (select 'X'
from negative n
where n.n_text = s.word);
→ 부정 50건
결론 : 스티브 잡스의 연설문에는 긍정적인 단어의 갯수가 부정적인 단어보다 약 43.5% 더 존재한다.
아무래도 졸업연설문이다보니 긍정적인 이야기를 많이 한것으로 추측 되어진다.
연설문을 읽다보면 부정적인 단어도 결국에는 이겨내고 해결해 냈다는 과정을 얘기하는 중에 나온 단어였다.
그러다보니, 부정적인 단어자체로 이 단어가 쓰인 문장이 부정적이라고 해석할 수는 없다.
단어만 가지고 감정을 해석하는 감정분석의 한계점이 보인다.
아직은 맥락을 해석할 수 있는 사람의 능력이 컴퓨터의 분석능력보다 뛰어나다.
궁금한점 : 문장의 맥락을 해석 할 수 있는 데이터 분석이 존재하는가 ?
'Oracle > SQL 을 이용한 데이터 분석물' 카테고리의 다른 글
SQL 을 이용한 네이버 영화평 분석 (0) | 2021.12.03 |
---|