// Result.h: interface for the CResult class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_RESULT_H__DEB31BCA_0410_4D5E_97EA_78F9B16B8938__INCLUDED_)
#define AFX_RESULT_H__DEB31BCA_0410_4D5E_97EA_78F9B16B8938__INCLUDED_

#include "..\UTILITY\Dictionary.h"    // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "..\\Utility\\Dictionary.h"
#include "..\\Segment\\Segment.h"
#include "..\\Tag\\Span.h"
#include "..\\Unknown\\UnknowWord.h"
#define _ICT_DEBUG 0

class CResult  
{
public:
    bool Processing(char *sSentence,unsigned int nCount);
    bool ParagraphProcessing(char *sParagraph,char *sResult);
    bool FileProcessing(char *sFilename,char *sResultFile);
    PWORD_RESULT *m_pResult;
    //The buffer which store the segment and POS result
    //and They stored order by its possibility
    ELEMENT_TYPE m_dResultPossibility[MAX_SEGMENT_NUM];
    int m_nResultCount;
    bool Output(PWORD_RESULT pItem,char *sResult,bool bFirstWordIgnore=false);
    CResult();
    virtual ~CResult();
    int m_nOperateType;//0:Only Segment;1: First Tag; 2:Second Type
    int m_nOutputFormat;//0:PKU criterion;1:973 criterion; 2: XML criterion
private:
    CSegment m_Seg;//Seg class
    CDictionary m_dictCore;//Core dictionary
    CSpan m_POSTagger;//POS tagger
    CUnknowWord m_Person,m_Transliteration,m_Place;//Person recognition
protected:
    bool ChineseNameSplit(char *sPersonName,char *sSurname, char *sSurname2,char *sGivenName,CDictionary &personDict);
    bool PKU2973POS(int nHandle,char *sPOS973);
    bool Adjust(PWORD_RESULT pItem,PWORD_RESULT pItemRet);
    ELEMENT_TYPE ComputePossibility(PWORD_RESULT pItem);
    bool Sort();
};

#endif // !defined(AFX_RESULT_H__DEB31BCA_0410_4D5E_97EA_78F9B16B8938__INCLUDED_)