2020년 1월 28일 화요일

Python itertools product (Catesian product, 카티젼곱, 데카르트 곱)

집합론의 데카르트의 곱이라는 함수가 python에는  itertools안에 product라고 존재한다.

from itertools import product
list_a = ['A','B','C','D']
list_b = ['1','2']
list_result = []
for x in list_a:
  for y in list_b:
    list_result.append((x,y))
print (list_result)
# [('A', '1'), ('A', '2'), ('B', '1'), ('B', '2'), ('C', '1'), ('C', '2'), ('D', '1'), ('D', '2')]

print (list(product(list_a,list_b)))
# [('A', '1'), ('A', '2'), ('B', '1'), ('B', '2'), ('C', '1'), ('C', '2'), ('D', '1'), ('D', '2')]




이건 우리 프로그램을 하다보면 보통 중첩 for문을 돌리는 경우가 있는데,
위와 같이 간단하게 한문장으로 해결되는 경우가 있다.

그것도 수학적 개념과 동일하게 ,

확률론의 순열과도 비슷한 개념이므로
이것 역시 모든 경우의 수를 나열할때 용이하게 사용된다.


2020년 1월 21일 화요일

우분투 tesseract-ocr 설치

OCR 프로그램 중 유명한건
러시아제인 ABBYY와 open source project인 Tesseract가 있는데,
tessaract가 구글 후원받아서 진행되고 있고 , 최신이 5.0으로 2019년 10월에 업데이트가 되었다. 최신버젼은 홈페이지들어가서 다운받거나 하고,

일단 우분투를 기준으로는

sudo apt-get install tesseract-ocr
sudo apt-get install libtesseract-dev
하면 현재 stable한 4.1 버젼이 설치가 된다.

여기서 tesseract는 언어별로 추가 패키지를 설치할수 있고,

sudo apt-cache seach tesseract
하면 패키지 들이 주르를 나오는데 이중에서  원하는 언어 패키지를
apt-get intstall명령어로 깔면된다.

OCR같은 언어인식 프로그램은 어떻게 보면 인공지능의
Pattern recognition 부분에서 파생되나간부분인데,
요즘 머신러닝이란 이름으로 잘팔리니,, 좋은일이다.

일단 머신러닝보다는 사용법만 기술한다.

 아주단순하게는,

tesseract input.bmp output[.txt]
 이렇게하면 그림이 text로 바뀌어 나온다.

여기서 한글 인식을 위해서는 추가 패키지를 설치해서

tesseract -l kor input.bmp output[.txt]
 이렇게하면 된다,.


한글인식이 잘되지 않는 경우에는 기계학습을 통해서 데이터를 축적시켜줘야되는데,
한글 부분은 일단 패스한다. 영어나 숫자 같은 경우는 쉽게 인식이 되고,

이 모델이 현재 최신 머신러닝 알고리즘으로 시간이 지나면서
계속 업데이트가 되고 있기때문에, 주기적으로 관심을 가지고 보면 좋을듯하다.








2020년 1월 14일 화요일

Python collections namedtutple

Namedtuple

Collection의 Namedtuple함수는 생각보다 요긴한데가 많다..

일반적인 튜플의 경우는 index만 가지고 처리를 하지만, namedtuple의 경우에는 Dictionary처럼 key를 가지고 처리한다.

보통 이렇게 많이 사용하는 데이터 형식이 있다.
2d형태의 엑셀이라든지, csv, sql같은 형태가 이런식의 데이터형태가 많기때문에,

index도 사용할 수 있고, key값으로도 할 수 있는 형태가
유용하게 사용될 수 있는 형태이다.

from collections import namedtuple
Unit = namedtuple('Knight','name','age','hp')
u1 = Unit('klas','23','98')
print (u1.name) # klas
print (u1.hp) # 98