win_cDemo.cpp
上传用户:dfahe421ef
上传日期:2021-11-07
资源大小:12279k
文件大小:3k
源码类别:

词法分析

开发平台:

Visual C++

  1. // win_cDemo.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "ICTCLAS30.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #pragma comment(lib, "ICTCLAS30.lib");
  8. void Split(const char *sInput);
  9. void KeyExtract(const char *sInput);
  10. void FingerPrint(const char *sInput);
  11. void Split(const char *sInput)
  12. {
  13. //初始化分词组件
  14. if(!ICTCLAS_Init())
  15. {
  16. printf("ICTCLAS INIT FAILED!n");
  17. return ;
  18. }
  19. else
  20. printf("ICTCLAS INIT SUCCEED!n");
  21. ICTCLAS_SetPOSmap(ICT_POS_MAP_SECOND);
  22. //导入用户词典前
  23. printf("未导入用户词典:n");
  24. const char *sResult = ICTCLAS_ParagraphProcess(sInput, 1);
  25. printf("%sn", sResult);
  26. //导入用户词典后
  27. printf("n导入用户词典后:n");
  28. int nCount = ICTCLAS_ImportUserDict("userdic.txt");//覆盖以前的用户词典
  29. //保存用户词典
  30. ICTCLAS_SaveTheUsrDic();
  31. printf("导入%d个用户词。n", nCount);
  32. sResult = ICTCLAS_ParagraphProcess(sInput, 1);
  33. printf("%sn", sResult);
  34. //动态添加用户词
  35. printf("n动态添加用户词后:n");
  36. ICTCLAS_AddUserWord("973专家组组织的评测 ict");
  37. ICTCLAS_SaveTheUsrDic();
  38. sResult = ICTCLAS_ParagraphProcess(sInput, 1);
  39. printf("%sn", sResult);
  40. //文件分词
  41. printf("文件分词");
  42. ICTCLAS_FileProcess("test.txt","test_result.txt",1);
  43. //
  44. //释放分词组件资源
  45. ICTCLAS_Exit();
  46. }
  47. void KeyExtract(const char *sInput)
  48. {
  49. //初始化分词组件
  50. if(!ICTCLAS_Init())
  51. {
  52. printf("ICTCLAS INIT FAILED!n");
  53. return ;
  54. }
  55. printf("n关键词提取:n");
  56. int nCount = ICTCLAS_GetParagraphProcessAWordCount(sInput);
  57. //分词。提取关键词
  58. result_t *result =(result_t*)malloc(sizeof(result_t)*nCount);
  59. ICTCLAS_ParagraphProcessAW(nCount,result);//获取结果存到客户的内存中
  60. //关键词提取,须在ICTCLAS_ParagraphProcessAW函数执行完后执行
  61. result_t *resultKey = (result_t*)malloc(sizeof(result_t)*nCount);
  62. int nCountKey;
  63. ICTCLAS_KeyWord(resultKey, nCountKey);
  64. for (int i=0; i<nCountKey; i++)
  65. {
  66. char buf[100];
  67. memset(buf, 0, 100);
  68. int index = resultKey[i].start;
  69. memcpy(buf,(void *)(sInput+index), resultKey[i].length);
  70. printf("%st%dn", buf, resultKey[i].weight);
  71. }
  72. free(resultKey);
  73. free(result);
  74. //释放分词组件资源
  75. ICTCLAS_Exit();
  76. }
  77. void FingerPrint(const char *sInput)
  78. {
  79. //初始化分词组件
  80. if(!ICTCLAS_Init())
  81. {
  82. printf("ICTCLAS INIT FAILED!n");
  83. return ;
  84. }
  85. int nCount = ICTCLAS_GetParagraphProcessAWordCount(sInput);
  86. //分词。提取关键词
  87. result_t *result =(result_t*)malloc(sizeof(result_t)*nCount);
  88. ICTCLAS_ParagraphProcessAW(nCount,result);//获取结果存到客户的内存中
  89. //指纹提取,须在ICTCLAS_ParagraphProcessAW函数执行完后执行
  90. unsigned long lFinger = ICTCLAS_FingerPrint();
  91. char buf[100];
  92. memset(buf, 0, 100);
  93. sprintf(buf, "%x", lFinger);
  94. printf("指纹:%sn", buf);
  95. //释放分词组件资源
  96. ICTCLAS_Exit();
  97. }
  98. int main()
  99. {
  100. const char *sInput = "ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。";
  101. //分词
  102. Split(sInput);
  103. //关键词提取
  104. KeyExtract(sInput);
  105. //指纹提取
  106. FingerPrint(sInput);
  107. // char bufTmp[100];
  108. // scanf("%s", bufTmp);
  109. return 1;
  110. }