사실 Design 2번글에 넣었어야 하는 부분인데 깜박하고 넣지 않았다. 다음은 악플판별 시스템에서 사용할 데이터베이스 스키마다. DBMS로는 sqlite를 이용할 것이다. sqlite를 선택한 이유는 파이선에서 기본모듈로 pysqlite를 제공하고 있고 성능도 비교적 우수하고 설치도 간편하기 때문이다.

1. commentlist - text, status

  댓글의 내용과 상태를 관리하는 테이블이다. 더이상 설명이 필요하지는 않은 것 같다.

2. wordlist - word

 단어의 내용을 관리하는 테이블이다. 이것도 더이상 설명이 필요하지 않은 것 같다.

3. wordfrequency - commentid, wordid, frequency

 댓글에 포함된 단어들과 각단어가 댓글에 포함되는 횟수를 관리한다.

 참고로 sqlite는 테이블마다 인덱스를 유지하는데 commentid 는 commentlist 테이블의 text 인덱스, wordid 는 wordlist 테이블의 word 인덱스이다. 지금 당장은 단어의 출현횟수만 이용하기 때문에 이것만을 유지하는 테이블만 필요하다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

 파이선으로 처음짜보는 프로그램이라 설계를 어떻게 해야할지 잘 모르겠다. 일단 내가 개판으로 짤때의 방법을 쓰기로 했다. 굵직굵직하는 모듈만 뽑아낸 다음 각 모듈별로 정확하게 구현하고 이 모듈들을 사용해서 프로그램을 완성시키는 것이다. C++나 자바로 프로그래밍 할 때 많이 썻었는데 파이선과도 잘 어울릴 것 같다.

 그럼 그 굵직굵직한 모듈들을 하나하나 살펴보자.

 1. classifier

 이 모듈은 임의의 댓글이 선플인지 악플인지 알려준다. 다른 모듈의 사용결과를 이용해서 빠르게 결과를 보여준다.

 2. trainer

 이 모듈은 사람에 의해 정확하게 선플인지 악플인지 판단된 댓글들을 가지고 svm 분류기를 학습한다.

 3. analyzer

 이 모듈은 데이터셋를 분석하여 사용자에게 보여준다.

 5분 정도 생각한거 치고는 잘 뽑아낸 것 같다. 원래는 복잡한 설계를 하고 적절한 구현을 하여 변경이 쉬운 유연한 프로그램을 짜려 하였으나 이런저런 변명 때문에 그리고 너무 간단한 프로그램이기 때문에 그런 노력은 가하지 않았다. 일단 어느정도 중규모의 데이터를 다룰 수 있어야 하기 때문에 생각하게 많을 것 같다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
 

Introduction


 우선 이 간단한 공학용 계산기를 우리가 흔히 사용하는 공학용 계산기라고 생각해보면 접근이 편할지 모르겠다. 그렇게 생각해보면 일단 필요한 것이 눈에 보이는 키패드(입력), 디스플레이(출력)이고 눈에 보이지 않는 내부 처리 모듈이다.  


입력

출력

처리

input()

output()

processor()


 처리 모듈은 입력과 출력을 제어하고 공학용 계산기가 정확한 동작을 할 수 있도록 메모리나 전자회로를 이용한다. 이 프로젝트를 완성하는 것은 곧 processor() 함수를 구현 하는 것이고 스펙이 원하는 결과를 얻기 위한 메모리 구성, 전자회로 구현이 주가 될 것이다.


Main


   Processor


 우선 이 프로그램은 입력-처리-출력의 절차를 따른다. 따라서 메인프로그램은 다음과 같은 함수를 차례로 호출한다. 그리고 processor()에서는 input()으로부터 얻은 입력수식을 일단 파싱한다. 파싱한 결과를 가지고 여러 전자회로를 이용하여 수식을 처리한다.


- in program


void input(void);

void processor(void);

void output(void);


- in processor


void parser(char *);

void calculate(char *);




   Memory


 우선 입출력 간의 써야할 입출력 버퍼가 필요하다. 이는 단순 문자열 이므로 다음과 같이 간단하게 선언할 수 있다.

char inputBuff[buff_length + 1];
char outputBuff[buff_length + 1];


 다음은 단일변수 및 배열변수를 저장하기 위한 메모리 구성을 해야 한다. 변수의 이름과 값만 가지는 간단한 구조이다. 그리고 이 변수를 쉽게 사용할 수 있게 여러 가지 함수가 필요하다.


struct variable{
   char name[variable_length +1];
   char* value;
   int number;
   double* values;
};

void newVariable(struct variable);

void setVariable(struct variable);

struct variable getVariable(char *);

int isVariable(char *);

void parseVariable(struct variable *);


 그리고 수학함수를 처리하기 위한 메모리 구성을 해야 한다. 이 역시 마찬가지로 함수 값을 쉽게 얻어올 수 있게 여러 가지 함수가 필요하다.


struct function{
   char name[function_length + 1];
   char* argument;
   int number;   
   double* arguments;
   double reternValue;
};

void isFunction(char *);

void parseFuntion(struct function *);


   Circuit


스펙에 나온 배열변수의 연산함수 처리를 위하여 다음과 같은 함수가 필요하다.


double add(struct variable)

double  mul(struct variable)

double  avg(struct variable)

double  std(struct variable)


스펙에 나온 저장과 불러오기 처리를 위하여 다음과 같은 함수가 필요하다.


void save()

void load()



프로젝트 메인으로

이올린에 북마크하기(0) 이올린에 추천하기(0)