ICTCLAS_WINDlg.cpp
上传用户:chen_dj
上传日期:2013-04-22
资源大小:111k
文件大小:8k
源码类别:

多国语言处理

开发平台:

C/C++

  1. // ICTCLAS_WinDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ICTCLAS_Win.h"
  5. #include "ICTCLAS_WinDlg.h"
  6. #include <time.h>//Calculate the time
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CAboutDlg dialog used for App About
  14. class CAboutDlg : public CDialog
  15. {
  16. public:
  17. CAboutDlg();
  18. // Dialog Data
  19. //{{AFX_DATA(CAboutDlg)
  20. enum { IDD = IDD_ABOUTBOX };
  21. //}}AFX_DATA
  22. // ClassWizard generated virtual function overrides
  23. //{{AFX_VIRTUAL(CAboutDlg)
  24. protected:
  25. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26. //}}AFX_VIRTUAL
  27. // Implementation
  28. protected:
  29. //{{AFX_MSG(CAboutDlg)
  30. //}}AFX_MSG
  31. DECLARE_MESSAGE_MAP()
  32. };
  33. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  34. {
  35. //{{AFX_DATA_INIT(CAboutDlg)
  36. //}}AFX_DATA_INIT
  37. }
  38. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CAboutDlg)
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  45. //{{AFX_MSG_MAP(CAboutDlg)
  46. // No message handlers
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CICTCLAS_WinDlg dialog
  51. CICTCLAS_WinDlg::CICTCLAS_WinDlg(CWnd* pParent /*=NULL*/)
  52. : CDialog(CICTCLAS_WinDlg::IDD, pParent)
  53. {
  54. //{{AFX_DATA_INIT(CICTCLAS_WinDlg)
  55. m_sResult = _T("");
  56. m_sSource = _T("");
  57. m_nTime = 0;
  58. m_nOutputFormat = -1;
  59. m_nOperateType = -1;
  60. m_nResultNum = 0;
  61. m_sScore = _T("");
  62. //}}AFX_DATA_INIT
  63. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  64. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  65. }
  66. void CICTCLAS_WinDlg::DoDataExchange(CDataExchange* pDX)
  67. {
  68. CDialog::DoDataExchange(pDX);
  69. //{{AFX_DATA_MAP(CICTCLAS_WinDlg)
  70. DDX_Text(pDX, IDC_EDT_RESULT, m_sResult);
  71. DDX_Text(pDX, IDC_EDT_SOURCE, m_sSource);
  72. DDV_MaxChars(pDX, m_sSource, 2048);
  73. DDX_Text(pDX, IDC_EDT_TIME, m_nTime);
  74. DDX_Radio(pDX, IDC_RADIO_PKU, m_nOutputFormat);
  75. DDX_Radio(pDX, IDC_RADIO_SEG, m_nOperateType);
  76. DDX_Text(pDX, IDC_EDT_RESULTNUM, m_nResultNum);
  77. DDV_MinMaxUInt(pDX, m_nResultNum, 1, 10);
  78. DDX_Text(pDX, IDC_EDT_SCORE, m_sScore);
  79. //}}AFX_DATA_MAP
  80. }
  81. BEGIN_MESSAGE_MAP(CICTCLAS_WinDlg, CDialog)
  82. //{{AFX_MSG_MAP(CICTCLAS_WinDlg)
  83. ON_WM_SYSCOMMAND()
  84. ON_WM_PAINT()
  85. ON_WM_QUERYDRAGICON()
  86. ON_BN_CLICKED(IDC_BTN_ABOUT, OnBtnAbout)
  87. ON_BN_CLICKED(IDC_BTN_RUN, OnBtnRun)
  88. ON_BN_CLICKED(IDC_BTN_FILEOPEN, OnBtnFileopen)
  89. ON_WM_CLOSE()
  90. //}}AFX_MSG_MAP
  91. END_MESSAGE_MAP()
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CICTCLAS_WinDlg message handlers
  94. BOOL CICTCLAS_WinDlg::OnInitDialog()
  95. {
  96. CDialog::OnInitDialog();
  97. // Add "About..." menu item to system menu.
  98. // IDM_ABOUTBOX must be in the system command range.
  99. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  100. ASSERT(IDM_ABOUTBOX < 0xF000);
  101. CMenu* pSysMenu = GetSystemMenu(FALSE);
  102. if (pSysMenu != NULL)
  103. {
  104. CString strAboutMenu;
  105. strAboutMenu.LoadString(IDS_ABOUTBOX);
  106. if (!strAboutMenu.IsEmpty())
  107. {
  108. pSysMenu->AppendMenu(MF_SEPARATOR);
  109. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  110. }
  111. }
  112. // Set the icon for this dialog.  The framework does this automatically
  113. //  when the application's main window is not a dialog
  114. SetIcon(m_hIcon, TRUE); // Set big icon
  115. SetIcon(m_hIcon, FALSE); // Set small icon
  116. // TODO: Add extra initialization here
  117. m_nOperateType=2;
  118. m_nOutputFormat=0;
  119. m_nTime=0;
  120. m_nResultNum=1;
  121. m_sScore.Format("None");
  122. UpdateData(FALSE);
  123. m_fileLog.Open("data\log.txt",CFile::modeWrite|CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate);//Open log file to write
  124. m_fileLog.SeekToEnd();
  125. return TRUE;  // return TRUE  unless you set the focus to a control
  126. }
  127. void CICTCLAS_WinDlg::OnSysCommand(UINT nID, LPARAM lParam)
  128. {
  129. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  130. {
  131. CAboutDlg dlgAbout;
  132. dlgAbout.DoModal();
  133. }
  134. else
  135. {
  136. CDialog::OnSysCommand(nID, lParam);
  137. }
  138. }
  139. // If you add a minimize button to your dialog, you will need the code below
  140. //  to draw the icon.  For MFC applications using the document/view model,
  141. //  this is automatically done for you by the framework.
  142. void CICTCLAS_WinDlg::OnPaint() 
  143. {
  144. if (IsIconic())
  145. {
  146. CPaintDC dc(this); // device context for painting
  147. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  148. // Center icon in client rectangle
  149. int cxIcon = GetSystemMetrics(SM_CXICON);
  150. int cyIcon = GetSystemMetrics(SM_CYICON);
  151. CRect rect;
  152. GetClientRect(&rect);
  153. int x = (rect.Width() - cxIcon + 1) / 2;
  154. int y = (rect.Height() - cyIcon + 1) / 2;
  155. // Draw the icon
  156. dc.DrawIcon(x, y, m_hIcon);
  157. }
  158. else
  159. {
  160. CDialog::OnPaint();
  161. }
  162. }
  163. // The system calls this to obtain the cursor to display while the user drags
  164. //  the minimized window.
  165. HCURSOR CICTCLAS_WinDlg::OnQueryDragIcon()
  166. {
  167. return (HCURSOR) m_hIcon;
  168. }
  169. void CICTCLAS_WinDlg::OnBtnAbout() 
  170. {
  171. // TODO: Add your control notification handler code here
  172. CAboutDlg dlg;
  173. dlg.DoModal();
  174. }
  175. void CICTCLAS_WinDlg::OnBtnRun() 
  176. {
  177. // TODO: Add your control notification handler code here
  178. char sResult[1024*8];
  179. UpdateData();
  180. if(m_sSource.IsEmpty())
  181. {//Empty sentence and return.
  182. return ;
  183. }
  184. m_ICTCLAS.m_nOutputFormat=m_nOutputFormat;
  185. m_ICTCLAS.m_nOperateType=m_nOperateType;
  186. clock_t start, finish;
  187. if(m_nResultNum==1)
  188. {
  189. start=clock();
  190. m_ICTCLAS.ParagraphProcessing((char *)(LPCTSTR)m_sSource,sResult);
  191. m_sResult.Format("%s",sResult);
  192. finish=clock();
  193. m_nTime=1000*(finish-start)/CLOCKS_PER_SEC;
  194. m_sScore.Format("%f",m_ICTCLAS.m_dResultPossibility[0]);
  195. UpdateData(FALSE);
  196. //write  log file
  197. }
  198. else
  199. {
  200. if(m_sSource.GetLength()>1024)
  201. {
  202. m_sResult.Format("多个结果处理的文本不能超过1K!");
  203. UpdateData(FALSE);
  204. return;
  205. }
  206. start=clock();
  207. m_ICTCLAS.Processing((char *)(LPCTSTR)m_sSource,m_nResultNum);
  208. finish=clock();
  209. m_nTime=1000*(finish-start)/CLOCKS_PER_SEC;
  210. m_sResult.Empty();
  211. CString sTemp;
  212. for(int i=0;i<m_ICTCLAS.m_nResultCount;i++)
  213. {
  214. sTemp.Format("Result %d(Score=%f):",i+1,m_ICTCLAS.m_dResultPossibility[i]);
  215. m_sResult+=sTemp;
  216. m_ICTCLAS.Output(m_ICTCLAS.m_pResult[i],sResult);
  217. m_sResult+=sResult;
  218. m_sResult+="rn";
  219. }
  220. UpdateData(FALSE);
  221. }
  222. m_fileLog.WriteString((LPCTSTR)m_sSource);//Record the source sentence in the log file
  223. m_fileLog.WriteString("rn");
  224. m_fileLog.WriteString((LPCTSTR)m_sResult);//Record the result in the log file
  225. m_fileLog.WriteString("rn");
  226. }
  227. void CICTCLAS_WinDlg::OnBtnFileopen() 
  228. {
  229. // TODO: Add your control notification handler code here
  230. CFileDialog dlg(true,(LPCTSTR)("txt"),(LPCTSTR)("test"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text File (*.txt)|*.txt");
  231. char sSourceFile[100],sResultFile[100];
  232. if(dlg.DoModal()==IDOK)
  233. {
  234. UpdateData();
  235. m_ICTCLAS.m_nOutputFormat=m_nOutputFormat;
  236. m_ICTCLAS.m_nOperateType=m_nOperateType;
  237. clock_t start, finish;
  238. strcpy(sSourceFile,(LPCTSTR)dlg.GetPathName());//Get file name and path
  239. strcpy(sResultFile,sSourceFile);//Set the result file name and path
  240. unsigned int nLen=strlen(sSourceFile);
  241. strncpy(sResultFile+nLen-4,"_cla.txt",10);//Change the extension
  242.         sResultFile[nLen+4]=0;
  243. start=clock();
  244. m_ICTCLAS.FileProcessing(sSourceFile,sResultFile);
  245. finish=clock();
  246. m_nTime=1000*(finish-start)/CLOCKS_PER_SEC;
  247. m_sResult.Format("处理结果已经存在文件%s中!",sResultFile);
  248. UpdateData(FALSE);
  249. HINSTANCE hInst=ShellExecute(this->m_hWnd, "open",sResultFile,"c:\system32\notepad.exe", NULL, SW_SHOWNORMAL);
  250. }
  251. }
  252. //DEL void CICTCLAS_WinDlg::OnBtnFilesave() 
  253. //DEL {
  254. //DEL  // TODO: Add your control notification handler code here
  255. //DEL  CFileDialog dlg(false,(LPCTSTR)("cla"),(LPCTSTR)("temp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "CLA File (*.cla)|*.cla");
  256. //DEL  if(dlg.DoModal()==IDOK)
  257. //DEL  {
  258. //DEL  CStdioFile file((LPCTSTR)dlg.GetPathName(),CFile::modeWrite|CFile::typeText|CFile::modeCreate|CFile::modeNoTruncate);
  259. //DEL  file.SeekToEnd();
  260. //DEL  file.WriteString("rn");
  261. //DEL  file.WriteString((LPCTSTR)m_sResult);
  262. //DEL  }
  263. //DEL }
  264. void CICTCLAS_WinDlg::OnClose() 
  265. {
  266. // TODO: Add your message handler code here and/or call default
  267. m_fileLog.Close();
  268. CDialog::OnClose();
  269. }