계산기

<!doctype html>
<html>
<body>
<script>
var expression = prompt('계산식을 입력해 주세요');
var cursor = 0;
var lastCursorPosition = 0;
var tokens = [];
while(cursor < expression.length){
if(expression[cursor] == '+' || expression[cursor] == '-'){
tokens.push(expression.slice(lastCursorPosition, cursor));
tokens.push(expression[cursor]);

lastCursorPosition = cursor + 1;
}
cursor = cursor + 1;
}
tokens.push(expression.slice(lastCursorPosition, cursor));

var index = 0;
var sum = 0;
var operator = '+';

while(index < tokens.length){
if(tokens[index] == '+' || tokens[index] == '-'){
if(operator != ''){
if(operator == '+'){
sum = sum + Number(tokens[index-1]);
}else if(operator == '-'){
sum = sum - Number(tokens[index-1]);
}
}
operator = tokens[index];
}
index = index + 1;
}
if(operator == '+'){
sum = sum + Number(tokens[index - 1]);
} else {
sum = sum - Number(tokens[index - 1]);
}
console.log(sum);
</script>
</body>
</html>


'javascript' 카테고리의 다른 글

계산기 (3)  (0) 2017.09.04
계산기 (2)  (0) 2017.09.04
천 단위 쉼표 표시  (0) 2017.09.04
구구단 반복문  (0) 2017.09.04
최종 결과물 만들 목표  (0) 2017.08.28

천 단위 쉼표 표시


1. while 문

<!doctype html>
<html>
<body>
<script>
var numberString = prompt('정수 숫자 값을 입력해 주세요');
var formatNumber = '';
var pos = numberString.length - 1;
var commaCount = 0;

while(pos >= 0){
if (commaCount == 3){
formatNumber = ',' + formatNumber;
commaCount = 0;
}
formatNumber = numberString.charAt(pos) + formatNumber;
pos = pos - 1;
commaCount = commaCount + 1;
}
console.log(formatNumber);
</script>
</body>
</html>



2. for 문

<!doctype html>
<html>
<body>
<script>
var numberString = prompt('정수 숫자 값을 입력해 주세요');
var formatNumber = '';
for (var pos = numberStirng.length - 1, commaCount = 0;pos >= 0; pos--, commaCount++){
if(commaCount == 3){
formatNumber = ',' + formatNumber;
commaCount = 0;
}
formatNumber = numberString.charAt(pos) + formatNumber;
}
console.log(formatNumber);
</script>
</body>
</html>


3. 배열 이용

<!doctype html>
<html>
<body>
<script>
var numberString = prompt('정수 숫자 값을 입력해 주세요');
var formatNumber = [];
for (var pos = numberStirng.length - 1, commaCount = 0;pos >= 0; pos--, commaCount++){
if(commaCount == 3){
formatNumber.push(',');
commaCount = 0;
}
formatNumber.push(numberString.charAt(pos));
}
console.log(formatNumber.reverse().join(''));
</script>
</body>
</html>


'javascript' 카테고리의 다른 글

계산기 (2)  (0) 2017.09.04
계산기  (0) 2017.09.04
구구단 반복문  (0) 2017.09.04
최종 결과물 만들 목표  (0) 2017.08.28
javascript 서비스 사이트  (0) 2017.08.28

구구단 반복문


1. while 이용 - 2단

<!doctype html>
<html>
<body>
<script>
var dan = 2;
var count = 1;
while(count <= 9){
console.log(dan * count);
count = count + 1;
}
</script>
</body>
</html>



2. 이중 while 이용 - 2단~9단

<!doctype html>
<html>
<body>
<script>
var dan = 2;
var count = 1;
while(dan <= 9){
while(count <= 9){
console.log(dan * count);
count = count + 1;
}
dan = dan + 1;
count = 1;
}
</script>
</body>
</html>



3. 이중 for 이용 - 2단~9단

<!doctype html>
<html>
<body>
<script>
var dan = 2;
var count = 1;
for(dan = 2; dan <= 9; dan++){
for(count = 1; count <= 9; count++){
console.log(dan * count);
}
}
</script>
</body>
</html>



4. 이중 for 이용 + 식 꾸미기 - 2단~9단

1) 

<!doctype html>
<html>
<body>
<script>
var dan = 2;
var count = 1;
for(dan = 2; dan <= 9; dan++){
for(count = 1; count <= 9; count++){
console.log(dan + ' * ' + count + ' = ' + dan * count);
}
}
</script>
</body>
</html>

2) 

<!doctype html>
<html>
<body>
<script>
var dan = 2;
var count = 1;
for(dan = 2; dan <= 9; dan++){
for(count = 1; count <= 9; count++){
console.log(`${dan} * ${count} = ${dan * count}`);
}
}
</script>
</body>
</html>


'javascript' 카테고리의 다른 글

계산기 (2)  (0) 2017.09.04
계산기  (0) 2017.09.04
천 단위 쉼표 표시  (0) 2017.09.04
최종 결과물 만들 목표  (0) 2017.08.28
javascript 서비스 사이트  (0) 2017.08.28

# Three way for counting


# 실제 뉴스 기사에 대해 각각 형태소 분석기를 적용하기

# 우선 cmd 창에서 konlpy 설치



sents = ['최순실 씨가 외국인투자촉진법 개정안 통과와 예산안 반영까지 꼼꼼이 챙긴 건데, 이른바 외촉법, 어떤 법이길래 최 씨가 열심히 챙긴 걸까요. 자신의 이해관계와 맞아 떨어지는 부분이 없었는지 취재기자와 한걸음 더 들여다보겠습니다. 이서준 기자, 우선 외국인투자촉진법 개정안, 어떤 내용입니까?',

        '한마디로 대기업이 외국 투자를 받아 계열사를 설립할 때 규제를 완화시켜 주는 법안입니다. 대기업 지주사의 손자 회사가 이른바 증손회사를 만들 때 지분 100%를 출자해야 합니다. 대기업의 문어발식 계열사 확장을 막기 위한 조치인데요. 외촉법 개정안은 손자회사가 외국 투자를 받아서 증손회사를 만들 땐 예외적으로 50% 지분만 투자해도 되게끔 해주는 내용입니다.',

        '그만큼 쉽게 완화해주는 거잖아요. 그때 기억을 더듬어보면 야당의 반발이 매우 심했습니다. 그 이유가 뭐였죠? ',

        '대기업 특혜 법안이라는 취지였는데요. (당연히 그랬겠죠.) 당시 박영선 의원의 국회 발언을 들어보시겠습니다. [박영선 의원/더불어민주당 (2013년 12월 31일) : 경제의 근간을 흔드는 법을 무원칙적으로 이렇게 특정 재벌 회사에게 특혜를 주기 위해 간청하는 민원법을 우리가 새해부터 왜 통과시켜야 합니까.]',

        '최순실 씨 사건을 쫓아가다 보면 본의 아니게 이번 정부의 과거로 올라가면서 복기하는 듯한 느낌이 드는데 이것도 바로 그중 하나입니다. 생생하게 기억합니다. 이 때 장면들은. 특정 재벌 회사를 위한 특혜라고 말하는데, 어떤 기업을 말하는 건가요?',

        'SK와 GS 입니다. 개정안이 통과되는 걸 전제로 두 회사는 외국 투자를 받아 증손회사 설립을 진행중이었기 때문인데요. 당시 개정안이 통과되지 않으면 두 기업이 수조원의 손실이 생길 수 있는 것으로 알려져 있었습니다. 허창수 GS 회장과 김창근 SK회장은 2013년 8월 박 대통령과 청와대에서 대기업 회장단 오찬자리에서 외촉법 통과를 요청한 바도 있습니다. ',

        '물론 두 기업과 최순실 씨와 연결고리가 나온 건 아니지만, 정 전 비서관 녹취파일 속 최 씨는 외촉법에 상당히 집착을 하는 걸로 보이긴 합니다.',

        '네 그렇습니다. 통화 내용을 다시 짚어보면요. 최 씨는 외촉법 관련 예산이 12월 2일, 반드시 되어야 한다, 작년 예산으로 돼서는 안 된다고 얘기하고 있는데요. 다시 말해서 외촉법 관련 예산안이 내년에 반영되어야 한다고 압박을 하고 있는 겁니다. 그러면서 "국민을 볼모로 잡고 있다"며 "국회와 정치권에 책임을 묻겠다"고 으름장까지 놓고 있는데요. 매우 집착하는 모습인데요. 이에 대해서 정 전 비서관이 "예산이 그렇게 빨리 통과된 적 없습니다"고 말하자 말을 끊으면서 매우 흥분한 듯, "그렇더라도, 그렇더라도" 하면서 "야당이 공약 지키라고 하면서 협조는 안 한다", "대통령으로 할 수 있는 일이 없다", "불공정 사태와 난맥상이 나온다"며 굉장한 압박까지 하고 있습니다.',

        '이 얘기들만 들여다봐도 마치 본인이 대통령처럼 얘기하고 있습니다. 내용들 보면 그렇지 않습니까? 혹시 최 씨가 이 외촉법 통과로 이득을 본 경우도 있습니까. ',

        '최 씨가 입김을 넣어 차은택 씨가 주도를 한 걸로 알려진 K컬처밸리 사업이 그렇다는 얘기가 나오고 있습니다. 외촉법을 편법으로 활용해 1% 금리를 적용받았다는 지적이 나오고 있습니다. 본격 사업이 추진되기 전 최순실 국정개입 사건이 터지기는 했지만, 이외에도 다른 혜택을 받았는지는 조사가 필요해 보입니다. ',

        '그런데 녹취파일을 보면 "남자1"이 등장합니다. 이 사람은 누구입니까?',

        '정 전 비서관을 "정 과장님"으로 부르며 반말을 하는 남자인데요. 최순실 씨처럼 정 전 비서관을 하대하고 있습니다. 또 청와대 내부 정보를 알고 있는 듯하고 또 인사에까지 개입하려고 하고 있습니다. 그렇기 때문에 정윤회 씨로 추정은 됩니다만 확인은 되지 않습니다.'

]


from konlpy.tag import Twitter

twitter = Twitter()


tokens = [pos for sent in sents for pos in twitter.pos(sent)]

print(tokens[:50])


# 각 단어들이 몇 번 등장했는지 횟수 카운팅

# 1) dict 이용

counter = {}

for word in tokens:

    if word in counter:

        counter[word] = counter[word] + 1

    else:

        counter[word] = 1

print(list(counter.items())[:5], '...')

        



ModuleNotFoundError: No module named 'jpype'


'파이썬' 카테고리의 다른 글

numpy array, broadcast  (0) 2017.10.03
__init__  (0) 2017.10.03
konlpy 설치  (0) 2017.08.30
beautiful soup 4, lxml, requests 설치 방법  (1) 2017.08.30
Scraping Naver Movie  (0) 2017.08.30

# konlpy 설치 방법

(http://konlpy.org/ko/v0.4.3/install/) 참고



1. Jpype1 다운 받고 설치(http://konlpy.org/ko/v0.4.3/install/)

  이때 파이썬 버전과 비트에 맞게 다운받아야 함

  파이썬 버전이 3.6.1이면 cp36을 32비트면 win32를, 64비트면 amd64 선택


2. cmd 창에서 cd 명령어를 이용하여 python 파일이 있는 폴더로 이동


3. cmd 창에 pip install --upgrade pip 입력


3. cmd 창에 pip install jpype가 저장된 경로\JPype1-0.5.7-cp27-none-win_amd64.whl 입력


4. cmd 창에 pip install konlpy 입력

'파이썬' 카테고리의 다른 글

__init__  (0) 2017.10.03
Three way for counting  (0) 2017.08.30
beautiful soup 4, lxml, requests 설치 방법  (1) 2017.08.30
Scraping Naver Movie  (0) 2017.08.30
_yield_len_iter  (0) 2017.08.29

# beautiful soup 4, lxml, requests 설치 방법


1. cmd 창에서 cd 명령어를 이용하여 python 파일이 있는 폴더로 이동

2. cmd 창에 pip install beautifulsoup4 입력

3. cmd 창에 pip install lxml 입력

4. cmd 창에 pip install requests 입력



<설치 예>


'파이썬' 카테고리의 다른 글

Three way for counting  (0) 2017.08.30
konlpy 설치  (0) 2017.08.30
Scraping Naver Movie  (0) 2017.08.30
_yield_len_iter  (0) 2017.08.29
slice and sorting  (0) 2017.08.29

# scraping naver movie


# scraping: 웹 브라우저로 접근할 수 있는 페이지에 있는 정보 중, 각자가 원하는 정보를 선택하여 로컬 컴퓨터로 가져오는 과정

   특정 웹사이트가 타겟

# crawling: Google, Yahoo, MSN 처럼 모든 정보를 가져옴

# scraping tool

- beautiful soup 4: HTML parser

- lxml: XML parser

- requests: HTTP를 통하여 웹서버와 통신하기 위한 패키지



# 웹페이지 탐색


# 네이버 영화 url

# 라라랜드 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=134963'

# 그래이트 워 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=126034'

# 조작된 도시 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=127382'


from bs4 import BeautifulSoup import os import re import requests import sys from pprint import pprint url_basic_base = 'http://movie.naver.com/movie/bi/mi/basic.nhn?code=%s'


# 라라랜드 id movie_id = 134963


# 웹페이지 가져오기


# requests: 네이버 영화 서버에 어떤 것을 요청할 수 있는 라이브러리 url = url_basic_base % movie_id r = requests.get(url)

# 해당 url의 서버로부터 웹페이지의 정보들을 가져옴

텍스트 외에도 header와 같은 많은 정보들을 포함

html = r.text 

page = BeautifulSoup(html, 'lxml') 

스트링 형식의 html을 lxml이라는 XML parser를 이용하여 문서를 구조화


print(r.headers)

# 해당 통신과 관련된 메타 저보들이 포함된 것 확인 가능

{'Server': 'Apache', 'Pragma': 'no-cache', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Cache-Control': 'no-cache, no-store', 'Content-Language': 'ko-KR', 'P3P': 'CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC", CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html;charset=UTF-8', 'Content-Length': '37691', 'Accept-Ranges': 'bytes', 'Date': 'Wed, 30 Aug 2017 02:50:24 GMT', 'X-Varnish': '3171435474', 'Age': '0', 'Via': '1.1 varnish', 'X-Varnish-Cache': 'MISS', 'connection': 'close'}



# 영화 제목 가져오기



# 제목 드래그한 뒤, 크롬의 Inspect(크롬 한글은 검사)을 누르면 해당 부분의 source code가 우측에 하이라이팅 되어 나타남

# La La Land 영화 제목은 strong이라는 태그 안에 들어있으며,

# 그 태그의 class는 h_movie2


title = page.select('div[class=mv_info] strong[class=h_movie2]')

# mv_info라는 클래스 이름을 갖는 div 아래에 속한, class 이름이 h_movie2인 strong이라는 것을 찾아서 가져온다는 코드

# 결과가 하나가 아닐 수 있으므로 return type은 list


print(type(title))

<class 'list'>


print(len(title), '\n')


print(title, '\n')

[<strong class="h_movie2" title="La La Land , 2016">La La Land




2016</strong>, <strong class="h_movie2" title="La La Land, 2016">La La Land, 2016</strong>] 


print(title[0], '\n')

<strong class="h_movie2" title="La La Land , 2016">La La Land




2016</strong> 


print(title[1], '\n')

<strong class="h_movie2" title="La La Land, 2016">La La Land, 2016</strong>


print(type(title[0]))

<class 'bs4.element.Tag'>


print(title[0].text)

La La Land




2016


print(title[0].text.replace("\t", '').replace('\r','').replace('\n',''))

La La Land, 2016


title = page.select('div[class=mv_info] h3[class=h_movie] a')

print(title[0].text)

라라랜드

      
















'파이썬' 카테고리의 다른 글

konlpy 설치  (0) 2017.08.30
beautiful soup 4, lxml, requests 설치 방법  (1) 2017.08.30
_yield_len_iter  (0) 2017.08.29
slice and sorting  (0) 2017.08.29
list comprehension  (0) 2017.08.28

# _yield_len_iter


# 토크나이징을 하는 작업 등은 text 파일의 line by line으로 처리

# 메모리에 올리지 않아도 됨

# generator 형태로 text를 메모리에 line by line으로 올려서 작업을 하려면 __iter__ 함수를 구현

# DoublespaceLineCorpus는 이미 iter가 구현


class DoublespaceLineCorpus:

    def __init__(self, corpus_fname, iter_sent = False):

        self.corpus_fname = corpus_fname

        self.iter_sent = iter_sent


    def __iter__(self):

        with open(self.corpus_fname, encoding='utf-8') as f:

            for doc_idx, doc in enumerate(f):

                if not self.iter_sent:

                    yield doc

                    continue

                for sent in doc.split('  '):

                    sent = sent.strip()

                    if not sent: continue

                    yield sent

                # doc의 sent에 대하여 empty str이 아니면...

                # 아래의 "for snet in corpus"부분에 sent로 메모리에

                # 그 str 값을 올리라는 의미



corpus = DoublespaceLineCorpus('./day0_3.txt', iter_sent=True)

for n_sent, sent in enumerate(corpus):

    print('{} snet: {}. itslength is {}'.format(n_sent, sent, len(sent)))

# 위의 예시에서 메모리에는 for loop에서 정의되는 sent만 만들어져 사용됨

# 다음 loop로 넘어가면서 메모리에 올라가지 않음

0 snet: 테스트 데이터 입니다. itslength is 11

1 snet: 이것만 한 줄에 두 개의 문장을 넣어둘 겁니다. itslength is 25

2 snet: 문장을 이렇게 만들어 둘거에요. itslength is 16

3 snet: yield test와. itslength is 11

4 snet: len test를 해보세요. itslength is 14


    

# len(corpus)하면 length 출력하게 만들기

class DoublespaceLineCorpus:

    def __init__(self, corpus_fname, iter_sent = False):

        self.corpus_fname = corpus_fname

        self.iter_sent = iter_sent

        self.num_sents = 0

        self.num_docs = 0


    def __iter__(self):

        with open(sef.corpus_fname, encoding='utf-8') as f:

            for doc_idx, doc in enumerate(f):

                if not self.iter_sent:

                    yield doc

                    continue

                for sent in doc.split('  '):

                    sent = sent.strip()

                    if not sent: continue

                    yield sent


    def __len__(self):

        if self.iter_sent:

            if self.num_sents == 0:

                with open(self.corpus_fname, encoding='utf-8') as f:

                    self.num_sents = sum((True for doc in f for sent in doc.strip().split('  ') if sent.strip()))

            return self.num_sents

        else:

            if self.num_docs == 0:

                with open(self.corpus_fname, encoding='utf-8') as f:

                    self.num_docs = sum((True for doc in f if doc.strip()))

            return self.num_docs

        

corpus = DoublespaceLineCorpus('./day0_3.txt', iter_sent=True)

print('when iter_sent == True, n sents = {}'.format(len(corpus)))

when iter_sent == True, n sents = 5


corpus.iter_sent=False

print('when iter_sent == False, n docs = {}'.format(len(corpus)))

when iter_sent == False, n docs = 4



                    



'파이썬' 카테고리의 다른 글

beautiful soup 4, lxml, requests 설치 방법  (1) 2017.08.30
Scraping Naver Movie  (0) 2017.08.30
slice and sorting  (0) 2017.08.29
list comprehension  (0) 2017.08.28
Pickle  (0) 2017.08.28

+ Recent posts