/*
다들 ngram을 어찌 사용하시는지 모르겠지만..전 종종 쓸일이 있더라구요..
좀 도움이 될까 하고 올립니다.
*/
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int WORDLENGTH = 1024;
const int BASENGRAMCOUNT = 2;//2글자부터 뽑는다.
const int LIMITNGRAMCOUNT = 8;//4글자까지 뽑는다.

void HangleNgram(char* inputWord , int gramCnt);

int main()
{
 char inputWord[WORDLENGTH] = {0,};
 int gramCnt = 0;

 while(1)
 {
  printf("글자를 입력하세요 <졸라필터하고 온니 한글만-글자다붙여쓰고>\"exit\"출력\n");
  gets(inputWord);
  fflush(stdin);
  if(strcmp(inputWord , "exit") == 0)
  {
   printf("끝\n");
   exit(0);
  }
  int totalLen = 0;
  totalLen = strlen(inputWord);

  for(int gramCnt=BASENGRAMCOUNT; gramCnt<=(totalLen/2); gramCnt++)
  {
   HangleNgram(inputWord , gramCnt);
  }
 }

 return 0;
}

void HangleNgram(char* inputWord , int gramCnt)
{
 //한글,영문,숫자,한문 필터처리
 //힌글만 있다고 가정한다.
 int totalLen = 0;
 totalLen = strlen(inputWord);
 
 int hangleWordLen = 0;

 char korWord[WORDLENGTH] = {0,};

 while(1)
 {
  memset(korWord , 0 , WORDLENGTH);
  if(hangleWordLen == 0)
  {
   strncpy(korWord , inputWord , 2*gramCnt);//한단어는 2byte
  }
  else
  {
   strncpy(korWord , inputWord+hangleWordLen , 2*gramCnt);//*는 한단어는 2byte
  }
  if(strlen(korWord) > LIMITNGRAMCOUNT)//ngram 최대글자 보다 크면 break;
  {
   break;
  }
  printf("HangleNgram = %s\n" , korWord);
  if((hangleWordLen+(2*gramCnt)) == totalLen)
  {
   break;
  }
  hangleWordLen += 2;//한단어씩 가야 한다.
 }
}

이 게시물을..