check.c
上传用户:qin5330
上传日期:2007-01-05
资源大小:114k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Perl

  1. /*
  2. ** Copyright (C) 1995, 1996, 1997, 1998 Hewlett-Packard Company
  3. ** Originally by Kevin Hughes, kev@kevcom.com, 3/11/94
  4. **
  5. ** This program and library is free software; you can redistribute it and/or
  6. ** modify it under the terms of the GNU (Library) General Public License
  7. ** as published by the Free Software Foundation; either version 2
  8. ** of the License, or any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU (Library) General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU (Library) General Public License
  16. ** along with this program; if not, write to the Free Software
  17. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18. */
  19. #include "swish.h"
  20. #include "check.h"
  21. #include "hash.h"
  22. /* Check if a file with a particular suffix should be indexed
  23. ** according to the settings in the configuration file.
  24. */
  25. /* Should a word be indexed? Consults the stopword hash list
  26. ** and checks if the word is of a reasonable length...
  27. ** If you have any good rules that can work with most languages,
  28. ** please let me know...
  29. */
  30. int isokword(word)
  31.       char *word;
  32. {
  33. int i, same, hasnumber, hasvowel, hascons,
  34. numberrow, vowelrow, consrow, wordlen;
  35. char lastchar;
  36. if (word[0] == '')
  37. return 0;
  38. if (isstopword(word))
  39. return 0;
  40. wordlen = strlen(word);
  41. if ((wordlen < minwordlimit) || (wordlen > maxwordlimit))
  42. return 0;
  43. lastchar = ':';
  44. same = 0;
  45. hasnumber = hasvowel = hascons = 0;
  46. numberrow = vowelrow = consrow = 0;
  47. for (i = 0; word[i] != ''; i++) {
  48. if (word[i] == lastchar) {
  49. same++;
  50. if (same > IGNORESAME)
  51. return 0;
  52. }
  53. else
  54. same = 0;
  55. if (isdigit(word[i])) {
  56. hasnumber = 1;
  57. numberrow++;
  58. if (numberrow > IGNOREROWN)
  59. return 0;
  60. vowelrow = 0;
  61. consrow = 0;
  62. }
  63. else if (isvowel(word[i])) {
  64. hasvowel = 1;
  65. vowelrow++;
  66. if (vowelrow > IGNOREROWV)
  67. return 0;
  68. numberrow = 0;
  69. consrow = 0;
  70. }
  71. else if (!ispunct(word[i])) {
  72. hascons = 1;
  73. consrow++;
  74. if (consrow > IGNOREROWC)
  75. return 0;
  76. numberrow = 0;
  77. vowelrow = 0;
  78. }
  79. lastchar = word[i];
  80. }
  81. if (IGNOREALLV)
  82. if (hasvowel && !hascons)
  83. return 0;
  84. if (IGNOREALLC)
  85. if (hascons && !hasvowel)
  86. return 0;
  87. if (IGNOREALLN)
  88. if (hasnumber && !hasvowel && !hascons)
  89. return 0;
  90. return 1;
  91. }
  92. /* Does a word have valid characters?
  93. */
  94. int hasokchars(word)
  95.      char *word;
  96. {
  97. int i, j;
  98. char c;
  99. c = word[strlen(word) - 1];
  100. for (i = j = 0; beginchars[i] != ''; i++)
  101. if (word[0] == beginchars[i])
  102. j++;
  103. if (!j)
  104. return 0;
  105. for (i = j = 0; endchars[i] != ''; i++)
  106. if (c == endchars[i])
  107. j++;
  108. if (!j)
  109. return 0;
  110. for (i = 0; word[i] != ''; i++)
  111. for (j = 0; wordchars[j] != ''; j++)
  112. if (word[i] == wordchars[j])
  113. return 1;
  114. return 0;
  115. }
  116. /* Is a letter a vowel?
  117. */
  118. int isvowel(char c)
  119. {
  120. if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
  121.     c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
  122.   return 1;
  123. return 0;
  124. }