블로그 이미지
잡다한 취미 생활 및 일상에 대한 소소한 이야기를 적어나가는 블로그입니다.
붉은kkk

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

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

이번엔 PDF파일에서 텍스트 내용을 발췌하는 방법에 대해서 연습을 해볼게요.


회사 업무를 하다 보면 종종 PDF로 되어 있는 문서에서 텍스트를 가져오고 싶은데, 

원활하게 복사가 되지 않았던 경험이 다들 한번 씩은 있을 거에요.


그 불편함을 해소하고자, 전체 텍스트 부분을 뽑아내서 텍스트 파일로 저장하는 프로그램을 만들어 볼 겁니다.

(PDF파일에서 내용을 보고 정리하는 작업이 많을 때는 유용할 거 같네요^^)



1. 준비물

   - JDK (JAVA Development Kit) 

    - Tika 

      : PDF에서 텍스트를 뽑아낼 수 있게 해주는 라이브러리 

        (자바로 작성된 거 같네요, 이 라이브러리를 사용하기 위해서 JDK가 필요하답니다.)

    - 텍스트 추출할 PDF파일 (sample.pdf)

   → JDK 설치 과정은 생략할게요. 



2. Tika 라이브러리 설치

   - pip install tika 

     : 이걸 먼저 해주시고... 이것만 하면 끝이날 것 같았는데, 피곤한 과정이 남아 있네요. 

      (제 PC에서만 그런걸 수 도 있는데, 우선은 다 알려드리겠습니다.)


    - Source code 작성

     

      #-*- encoding:utf-8

      from tika import parser

      print("텍스트 파일을 추출할 PDF파일명을 입력하세요.")

      PDFfileName = input()


      print("텍스트 파일은 다음 폴더에 저장됩니다.")
      print("D:\data")

      inputpath = PDFfileName


     parsed = parser.from_file(PDFfileName)
     print(parsed["content"])

     fileOut = open('fileOut.txt', 'w', encoding='utf-8')

     print(parsed['content'], file=fileOut)

     fileOut.close()

   

     Source code는 본인이 직접 타이핑 해보면서, 한줄 한줄 왜 이렇게 작성되어 있는지 

         고민해보시면 될 거  같습니다. 어렵지 않으니 따로 설명은 하지 않을게요.

         (보시면 필요없는 라인도 있고 하니까, 자기 입맛에 맞춰서 만들어 주시면되요, 

          중간 중간 보이는 인자들은 어떤건지 궁금하다면 그 해당 명령어 or 함수에 대한 내용을 검색하면

          친절한 설명을 찾아볼 수 있답니다.

          영어 검색을 추천드려요^^)

      

음... 문제가 있네요. 


에러내용

1) Retriving http://search....\tika-server-1.19.jar to ...\temp\tika-server.jar.md5

2) Retriving http://search....\tika-server-1.19.jar to ...\temp\tika-server.jar


3. 문제 해결

    - 2개의 에러가 발생했어요. 

       느낌적으로 tika-server-1.19.jar파일을 복사하려는거 같은데 뭔가 잘 되지 않은거 같네요.

       제가 해결한 방법은 직접 서버로 찾아가서 (http:// 주소를 입력) tika-server-1.19.jar 파일을 다운로드

       했습니다.

       그 후에 복사하려던 폴더에 복사를 하고 이름도 똑같이 바꿔줬어요.

       tika-server-1.19.jar → tika-server.jar

       (tika-server.jar.md5는 생략했습니다. jar파일만 복사시 작동이 되서 굳이 하지 않았어요)


4. 프로그램 수행

    - 이제 미리 준비해 둔 sample.pdf의 텍스트 내용을 추출해서 파일로 만들어 볼게요.

    - Sample.pdf의 내용은 아래와 같습니다.

 

[Sample.pdf 내용]

    


    - 프로그램 수행 결과 : 에러가 사라지고 동작이 잘 됩니다.


[프로그램 수행결과]


    - 추출한 내용이 쉘에서 보이지 않는 것 같았으나, 스크롤바를 내려보니 잘 추출된 걸 확인 할 수 있었습니다.

     (성공입니다^^)

    

 

    - 파일도 만들라고 프로그래밍을 했었으니까, 잘 만들어졌는지 확인 해 볼게요.


(폴더에 fileOut.txt가 생성되어 있네요, 이것도 성공^^)


파일내용도 문제가 없는 것을 확인했습니다.  성공적이네요^^


다음에 또 재미난 내용으로 찾아올게요.


웹크롤러는 과정이 길어질것 같아서 중간중간 다른 포스팅도 섞어가면서 연습을 하도록 할게요.


이번 시간엔 그간 아쉬웠던 파이썬의 GUI 프로그래밍 관련된 내용입니다.



지금까지 파이썬 프로그래밍을 연습해보면서 console에서만 실행 되는 모습이 조금 아쉬웠습니다.


그래서 찾아보니, 윈도우 GUI 디자인툴이 있더군요.


PyQt5라는 크로스플랫폼을 통해서 윈도우 GUI를 꾸밀 수 있다는 걸 확인했습니다.

- PyQt is a set of Python v2 and v3 bindings for The Qt Company's Qt application   

  framework and runs on all platforms supported by Qt including Windows, OS X, Linux,   

  iOS  and Android



설치해보고 직접 연습을 해봐야겠죠?


- 다운로드 사이트 주소 : https://www.riverbankcomputing.com/software/pyqt/download5



소스 패키지를 다운로드 해도 되고, 기존에 라이브러리 설치하듯 PyQt를 설치해도 됩니다.


PyQt를 설치했으니, 예제를 하나 작성 해 볼게요.

Hellow world 출력을 버튼으로 만들어 보겠습니다.



완성입니다.


윈도우 GUI 작성이 잘 되네요. 

아직 코드로 만들어내야되서 조금 불편한 부분이 남아있습니다. Qt 디자이너 툴이라는 것도 있는거 같으니까

다음엔 그것도 알아봐야겠네요.


다음 포스팅으로 뵐게요.



지난 시간엔 크롤링이 가능한 사이트에 대한 정보를 찾느라 시간을 보냈습니다.

우선 크롤러를 만드는게 목적이기 때문에, 고민은 잠시 접어 두고 크롤링을 할 수 있는 사이트를 직접 만든 뒤 

크롤링을 해 보도록 하겠습니다.


1. 크롤러 연습용 사이트 만들기

필요한 사항

    - HTML 문서를 업로드 할 수 있는 웹사이트가 필요

    - 무료 웹사이트를 어디서 만들수 있는가?

       GitHub에서 무료 웹사이트 제작 가능



2. GitHub 가입 및 웹사이트 만들기

    - https://github.com

    - 가입과정은 생략.

     - 가입 이후 repository 생성하기


저는 Python-study라는 이름으로 만들었어요. 

자, 이제 지루한 과정도 거의 끝에 다다르고 있습니다.


제 사이트 주소가 생성되었습니다.

 https://github.com/dongchanhong/python-study



3. 웹사이트 Index.html 만들기

     - 사이트에 접속시 실행되는 페이지를 만들어 보겠습니다.


Index.html도 만들었으니, 이 파일을 업로드 하고 페이지가 제대로 나오는지만 확인하면 끝이에요.

(홈페이지는 Index.html을 시작 페이지로 인식합니다.)



4. GitHub에 Index.html 올리기

● GitHub를 사용하기 쉽게 Desktop 프로그램을 설치해 주세요.

    - set up in Desktop을 클릭해서 프로그램 다운로드 


... 설치가 완료되면 실행해서 ... 로그인 등등 설정을 해주시고 ... 저는 아래와 같이 완료 되었습니다.



로그인하고, 기존에 만들었던 저장소를 열어서 여기에 HTML 문서를 업로드 해보는 것으로 오늘은 끝을 낼게요.



길고 긴 과정이 지나 이제 다 됐습니다...


파일 업로드 된 걸 확인했고, 마지막으로 설정을 변경 해 줘야됩니다. 

(지금 상태에서는 사이트 접속시 404 Not Found가 나옵니다.)


※ Settings → source에서 master branch를 선택하고 Save를 해주셔야됩니다.

그러면 이렇게 사이트가 생성되었다고 나와요.


이제 진짜 끝이 났습니다.

위에 생성된 https://dongchanhong.github.io/python-study/로 접속을 하면

이렇게 나오네요. 


이제 다음 시간부터는 크롤링 연습을 하나 하나 진행 해 보도록 하겠습니다.

이제 웹 크롤러를 만들어 볼까 합니다.


크롤러란 웹페이지의 내용을 가져오게 해주는 프로그램을 의미하며, 웹페이지의 내용을 가져오는 것을 크롤링 또는 스크래핑이라고 합니다.


우선 크롤링을 하기 전에 주의해야될 사항이 있는데 허락된 사이트에서만 크롤링을 해야된다는 점입니다.


예를들어 Naver나 Daum의 경우 크롤링을 허용하지 않고 있습니다.


자칫 잘못하다간 불법적인 영역이 될 수 있기 때문에 조심! 조심! 합시다.



크롤링이 가능한 사이트인지 아닌지 판별하기 위해서는 robots.txt파일을 살펴 봐야되요.
이 robots.txt는 무분별한 크롤링을 막고 컨트롤하기 위해 만들어진 규약이라고 하네요. 


ex)

1. www.naver.com/robots.txt

- 느낌이 허용하지 않는 거 같습니다. (Disallow가 있네요)


2. www.daum.net/robots.txt

- 여기도 마찬가지


3. www.google.com/robots.txt


- 구글도 제한이 있는거 같네요.


4. www.tistory.com/robots.txt

- 티스토리는 허용되는 것으로 보이네요.


크롤러를 만들기 전 불법/합법의 영역에 대한 내용을 확실히 파악하고 시작을 해야될 것 같습니다.


오늘은 여기까지, 항상 저작권 조심하세요^^;

다음 시간 부터는 크롤링이 허용된 사이트에서 크롤링 하는 방법에 대한 연습을 시작해보겠습니다.

파이썬으로 만든 프로그램을 파이썬이 없는 곳에서도 실행하고 싶다면, 단독 실행파일로 만들어 줘야 됩니다.


오늘은 파이썬 응용 프로그램을 .exe 파일 (실행파일) 로 만들어 보겠습니다.


우선 필요한 건 아래와 같은 라이브러리에요.



    Pyinstaller 

  py2exe



구글링으로 찾은 라이브러리인데, py2exe는 python2 버전에서 잘 된다라는 내용들이 적혀 있네요.

전 3.7 버전을 사용하고 있는 관계로 Pyinstaller로 실행파일을 만들어 보겠습니다.


실행 파일로 만들 프로그램은 지난 시간에 만들었던 워드클라우드 파일이어서 따로 코딩은 하지 않겠습니다.



pip으로 라이브러리를 설치하고, (설치는 pip install pyinstaller)

처음에 설치를 잘 못한 게 있었네요. (오타로 인해 pip install pyinstall, 이건 나중에 삭제해야겠네요.)



다 끝나 갑니다.


이제 실행파일을 만들어 봐야겠어요.



pyinstaller --onefile <your_script_name>.py 이렇게 하면 된다고 되어있네요. 지난 시간에 만든 wordcloud1.py에 적용해서 해보니까... 안됩니다 ㅠㅠ (다른방법을 찾아봐야 겠네요) 우선 가볍게 Hello World 소스 부터 실행 파일로 만들어 볼게요. 실행은 pyinstaller ex1.py (ex1.py는 첫시간에 만들어 둔 파일입니다.)

소스로는 고작 1줄인데 뭔가가 엄청...진행 됐어요.

새로운 폴더가 만들어져 있네요. (build와 dist) dist폴더내에 ex1폴더가 있고 그 곳에 실행파일이 만들어져 있는걸 확인했습니다.

윈도우에서 실행하면 console창이 떴다가 사라지네요.

console모드에서는 잘 실행되는걸 확인할 수 있습니다.





이번엔 이렇게 파이썬에서도 실행파일을 만들 수 있다란 것을 알았단 사실에 만족해야 될 것 같네요.

계속 공부하면서 더 간단히 깔끔한 exe 파일 만드는 방법을 새로 찾아보고 새로운게 있다면 다시 포스팅 해 볼게요.





이제 드디어 제가 파이썬을 사용하고자 한 계기가 됐던 워드 클라우드 만들기 입니다.


빅데이터 분석에 대한 책 & 광고 등을 보다 보면 빠지지 않고 등장했었던 것 같아요. 


시각적으로 바로 알기 쉽게 한번 보여드리고~


이렇게 단어의 빈도수 등을 고려해서, 글자의 크기, 색깔 등등이 강조되서 나오는게 워드 클라우드입니다. 


휴... 한글폰트의 사용이 어려워서 고생했던 생각이 잠깐 나네요. (몇시간을 헤맸습니다...)


이제 윈도우환경에서 워드 클라우드를 구현하기 위해 해야될 일들을 하나 하나 알려드릴게요.


1. 네이버 나눔글꼴 설치

https://hangeul.naver.com/2017/nanum

위 링크로 들어가서 네이버 나눔글꼴을 설치해줍시다. (무료 폰트여서 사용하는데 문제가 없답니다.)

- 나눔글꼴의 지적 재산권은 네이버, 네이버문화재단에 있으며,  오픈 라이선스로 자유롭게 수정하고 재배포 하실 수 있습니다



2. 워드클라우드 라이브러리 설치

     pip install wordcloud

     - pip 설치는 지난 시간에 설명을 했기 때문에, 상세 내용은 생략할게요. 

       

     http://nearman.tistory.com/entry/3-그래프출력-파이썬-matplotlib-그래프-출력-한글폰트-사용 

     


3. 워드클라우드로 표현하고 싶은 텍스트 자료 준비

   - 저는 test.txt 파일에 내용을 기입해서 준비를 해볼게요.

     "워드 클라우드 파이썬 단어구름 빅데이터 분석
      Wordcloud python big data analysis 워드클라우드 워드클라우드 워드클라우드 

      python python python python
     워드클라우드 워드클라우드 워드클라우드 워드클라우드 워드클라우드 워드클라우드 워드클라우드 

     워드클라우드
     python python python python python python python python python python python python python   

     python"

   

4. 코딩을 통해 워드클라우드 표현

   - 코드 몇 줄 되지 않습니다. 너무 간단해서 이래도 되나 싶을 정도네요.


1: import matplotlib.pyplot as plt
2: from wordcloud import WordCloud

3: 
4: font_path = 'c:\\windows\\fonts\\NanumGothic.ttf'
5: wordcloud = WordCloud(
6:     font_path = font_path,
7:    width = 800,
8:    height = 800
9:    )
10:
11: text=open('test.txt').read()
12: wordcloud = wordcloud.generate(text)
13: 
14: fig = plt.figure(figsize=(12,12))
15: plt.imshow(wordcloud)
16: plt.axis("off")
17: plt.show()
18: fig.savefig('wordcloud_without_axisoff.png')


코드는 크게 설명드릴 부분이 없을 정도로 직관적으로 이해하실 수 있을 거라 생각되네요.


'라이브러리를 사용할 수 있게 하고

Font 설정을 하고

Text 파일을 읽고

wordcloud를 사용해서 화면에 부려주고

파일로 저장합니다.'




 [최종 실행 화면]

이로써 워드 클라우드 구현을 해보았습니다.


다음엔 더 재밌는 걸로 찾아뵐게요.

이번에는 파이썬으로 그래프 출력을 해보도록 하겠습니다.


그래프 출력을 위해선 라이브러리 설치가 필요해서 설치부터 진행합니다.


윈도우에서는 cmd를 실행하여 명령프롬프트에서 pip을 실행해주면 됩니다.

(pip은 파이썬 패키지 관리 프로그램이에요.)


pip을 실행해보면 위와 같이 사용법에 대한 내용이 나옵니다.


우리는 matplotlib라는 라이브러리를 설치해야 하므로 아래와 같이 입력 후 실행시켜 줍니다.





[matplotlib 설치]


pip install matplotlib 

실행을 하면 위화면처럼 파일이 복사되고 완료되었다고 출력된다.



이제 파이썬 IDLE에서 파일을 새로 만들고 코드를 입력해봅시다.




코드는 아래와 같이 입력합니다.

1: import matplotlib as mpl

2: import matplotlib.pyplot as plt

3: import matplotlib.font_manager as fm

4: from matplotlib import rc

5: from wordcloud import WordCloud (이부분은 지금 필요 없습니다. 코드 입력시에는 제외해 주세요)

6:

7: mpl.rcParams['axes.unicode_minus'] = False

   --> 그래프 출력할때 마이너스 부분에서 한글깨짐이 발생한다고 위와 같은 코드로 해결가능하다고 하네요

        미리미리 알아둡시다.

8: font_name = fm.FontProperties(fname="c:\\windows\\fonts\\malgun.ttf").get_name()

9: rc('font', family=font_name)

10:

11: plt.title('한글 그래프')

12: plt.plot([1, 2, 3, 4])

13: plt.show()



코드의 해석은 타이핑해보면서 직접 해보시길 권장 드립니다.

그냥 영어를 이해하시면 되요. 

4번행 까지는 라이브러리를 사용하기 위한 import가 진행되었고

한글을 사용하기 위한 폰트 설정이 7~9행까지 이루어졌습니다.

11~13행은 그래프를 그리기 위한 정보들이 입력되어 있네요.



프로그래밍은 무엇을 표현하고 싶은지 먼저 생각하고 그걸 표현하기 위한 코딩은 '구글링'을 통해 확인하면서 구현하면 되는 것 같습니다. 


개인적인 생각은 처음 접할때 문법부터 시작해서 전체를 공부하고 시작하려고 하면 조금 어렵게 느껴지고 익숙해지기 어려운거 같네요. 


잘 모를때는 그냥 따라해보시면 됩니다. 하다보면 천천히 이해가 되는거 같아요.


위와 같이 코드를 다 입력하고 저장하고 실행을 하면 아래와 같이 그래프에 한글이 함께 출력이 됩니다.

(Run명령은 F5번 입니다. )


한글표현이 잘 안되서 엄청나게 삽질하고 깔끔히 가능한 코드만 기록했습니다. (저도 구글링 엄청나게 했어요... 지금 위 코드는 고작 13줄밖에 안되는데, 한글이 안나와서 골머리가 아팠답니다.)





 오늘은 여기까지, 이제 그래프도 그려봤으니 다음엔 워드 클라우드를 표현해볼게요.



파이썬 3.7 설치를 완료하였습니다.


이제 모든 프로그래밍 언어의 첫 시작인 "Hello World" 를 출력해 봐야겠어요.


파이썬을 설치하고 나면, IDLE이라는 아이콘을 실행하여 아래와 같은 창을 띄울수 있어요.

파이썬 언어는 인터프리터언어로 1줄, 1줄 직접 치면서 실행해 볼 수 있습니다.

(파이썬을 처음 접했을때 느낌은, 어릴때 접했던 베이직과 비슷한 느낌이었어요.)

자, 그럼 Hello World를 출력해 봐야겠죠?

출력 명령어는 역시 Print 였습니다 ㅎㅎ


>>> print("Hello World")


출력이 잘 되네요.



파이썬에게도 인사를 해보겠습니다.


>>> print("Hello Python")

잘 동작되는 것을 확인했으니 다음번엔 좀 더 난이도를 높여 보도록 하겠습니다.


워드클라우드 기능을 구현해서 빅데이터 분석이 다음번 목표입니다.