1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
15:
16: function calcDensity($singlewordcounter, $string, $quantifier = 1) {
17: $minLen = 3;
18:
19:
20:
21:
22: if (cRegistry::getLanguageId() == 1)
23:
24: $blacklist = array(
25: 'in',
26: 'der',
27: 'und',
28: 'zu',
29: 'den',
30: 'das',
31: 'nicht',
32: 'von',
33: 'sie',
34: 'ist',
35: 'des',
36: 'sich',
37: 'mit',
38: 'sorgt',
39: 'dem',
40: 'dass',
41: 'er',
42: 'es',
43: 'ein',
44: 'ich',
45: 'auf',
46: 'so',
47: 'eine',
48: 'auch',
49: 'als',
50: 'an',
51: 'nach',
52: 'wie',
53: 'im',
54: 'für',
55: 'man',
56: 'aber',
57: 'aus',
58: 'durch',
59: 'wenn',
60: 'nur',
61: 'war',
62: 'noch',
63: 'werden',
64: 'bei',
65: 'hat',
66: 'wir',
67: 'was',
68: 'wird',
69: 'sein',
70: 'einen',
71: 'welche',
72: 'sind',
73: 'oder',
74: 'zur',
75: 'um',
76: 'haben',
77: 'einer',
78: 'mir',
79: 'über',
80: 'ihm',
81: 'diese',
82: 'einem',
83: 'ihr',
84: 'uns',
85: 'da',
86: 'zum',
87: 'kann',
88: 'doch',
89: 'vor',
90: 'dieser',
91: 'mich',
92: 'ihn',
93: 'du',
94: 'hatte',
95: 'seine',
96: 'mehr',
97: 'am',
98: 'denn',
99: 'nun',
100: 'unter',
101: 'sehr',
102: 'selbst',
103: 'schon',
104: 'hier',
105: 'bis',
106: 'habe',
107: 'ihre',
108: 'dann',
109: 'ihnen',
110: 'seiner',
111: 'alle',
112: 'wieder',
113: 'meine',
114: 'Zeit',
115: 'gegen',
116: 'vom',
117: 'ganz',
118: 'einzelnen',
119: 'wo',
120: 'muss',
121: 'ohne',
122: 'eines',
123: 'können',
124: 'sei',
125: 'ja',
126: 'wurde',
127: 'jetzt',
128: 'immer',
129: 'seinen',
130: 'wohl',
131: 'dieses',
132: 'ihren',
133: 'würde',
134: 'diesen',
135: 'sondern',
136: 'weil',
137: 'welcher',
138: 'nichts',
139: 'diesem',
140: 'alles',
141: 'waren',
142: 'will',
143: 'Herr',
144: 'viel',
145: 'mein',
146: 'also',
147: 'soll',
148: 'worden',
149: 'lassen',
150: 'dies',
151: 'machen',
152: 'ihrer',
153: 'weiter',
154: 'Leben',
155: 'recht',
156: 'etwas',
157: 'keine',
158: 'seinem',
159: 'ob',
160: 'dir',
161: 'allen',
162: 'großen',
163: 'die',
164: 'Jahre',
165: 'Weise',
166: 'müssen',
167: 'welches',
168: 'wäre',
169: 'erst',
170: 'einmal',
171: 'Mann',
172: 'hätte',
173: 'zwei',
174: 'dich',
175: 'allein',
176: 'Herren',
177: 'während',
178: 'Paragraph',
179: 'anders',
180: 'Liebe',
181: 'kein',
182: 'damit',
183: 'gar',
184: 'Hand',
185: 'Herrn',
186: 'euch',
187: 'sollte',
188: 'konnte',
189: 'ersten',
190: 'deren',
191: 'zwischen',
192: 'wollen',
193: 'denen',
194: 'dessen',
195: 'sagen',
196: 'bin',
197: 'Menschen',
198: 'gut',
199: 'darauf',
200: 'wurden',
201: 'weiß',
202: 'gewesen',
203: 'Seite',
204: 'bald',
205: 'weit',
206: 'große',
207: 'solche',
208: 'hatten',
209: 'eben',
210: 'andern',
211: 'beiden',
212: 'macht',
213: 'sehen',
214: 'ganze',
215: 'anderen',
216: 'lange',
217: 'wer',
218: 'ihrem',
219: 'zwar',
220: 'gemacht',
221: 'dort',
222: 'kommen',
223: 'Welt',
224: 'heute',
225: 'Frau',
226: 'werde',
227: 'derselben',
228: 'ganzen',
229: 'deutschen',
230: 'lässt',
231: 'vielleicht',
232: 'meiner',
233: 'bereits',
234: 'späteren',
235: 'möglich',
236: 'sowie'
237: );
238: else {
239: $blacklist = array();
240: $minLen = 5;
241: }
242:
243:
244: for ($i = 0; $i < count($blacklist); $i++) {
245: $blacklist[$i] = ltrim(mb_strtolower($blacklist[$i]), '');
246: }
247: $tmp = array();
248: $tmp = explode(' ', $string);
249: $tmp_size = sizeof($tmp);
250:
251: for ($i = 0; $i <= $tmp_size; $i++) {
252: if (strlen($tmp[$i]) < $minLen) {
253: continue;
254: }
255:
256:
257: $patterns = array(
258: '/[.,:]/'
259: );
260: $replaces = array(
261: ''
262: );
263: $tmp[$i] = preg_replace($patterns, $replaces, $tmp[$i]);
264:
265:
266: $tmp[$i] = rtrim($tmp[$i], '-');
267:
268:
269: (!ctype_upper($tmp[$i])) ? $tmp[$i] = mb_strtolower(addslashes($tmp[$i])) : $tmp[$i] = addslashes(preg_replace($patterns, $replaces, $tmp[$i]));
270:
271:
272: if (!array_search($tmp[$i], $blacklist)) {
273:
274:
275: (ctype_upper($tmp[$i])) ? $singlewordcounter[mb_strtolower($tmp[$i])] += strlen($tmp[$i]) + 10000 : $singlewordcounter[$tmp[$i]] += strlen($tmp[$i]);
276: }
277: }
278:
279: return $singlewordcounter;
280: }
281:
282: function __cmp($a, $b) {
283: if ($a == $b)
284: return 0;
285: return ($a > $b) ? -1 : 1;
286: }
287:
288: function stripCount($singlewordcounter, $maxKeywords = 15) {
289:
290:
291: $tmp = array();
292:
293: $result = array();
294:
295: $tmpToRemove = 1;
296: foreach ($singlewordcounter as $key => $value) {
297: if ($value > $tmpToRemove) {
298: $tmp[$key] = $value;
299: }
300: }
301:
302: if (sizeof($tmp) <= $maxKeywords) {
303: foreach ($tmp as $key => $value) {
304: $result[] = $key;
305: }
306: } else {
307: $dist = array();
308:
309: foreach ($tmp as $key => $value) {
310: $dist[$value]++;
311: }
312:
313: uksort($dist, "__cmp");
314: reset($dist);
315:
316: $count = 0;
317:
318: $resultset = array();
319: $useQuantity = array();
320:
321: foreach ($dist as $key => $value) {
322:
323: $_count = $count + $value;
324: if ($_count <= $maxKeywords) {
325: $count += $value;
326: $useQuantity[] = $key;
327: } else {
328: break;
329: }
330: }
331:
332:
333: foreach ($singlewordcounter as $key => $value) {
334: if (in_array($value, $useQuantity)) {
335: $result[] = $key;
336: }
337: }
338: }
339: return $result;
340: }
341:
342: function keywordDensity($headline, $text) {
343: global $lang, $client, $cfgClient;
344:
345: $headline = strip_tags($headline);
346: $text = strip_tags($text);
347:
348: $text = conHtmlEntityDecode($text);
349:
350:
351:
352: $patterns = array(
353: '#&[a-z]+\;#i',
354: '#\s+#'
355: );
356: $replaces = array(
357: '',
358: ' '
359: );
360: $text = preg_replace($patterns, $replaces, $text);
361:
362:
363:
364:
365:
366:
367: $singlewordcounter = array();
368:
369:
370: $singlewordcounter = calcDensity($singlewordcounter, $text);
371:
372:
373: $singlewordcounter = calcDensity($singlewordcounter, $headline, 2);
374:
375:
376:
377:
378: arsort($singlewordcounter, SORT_NUMERIC);
379: $singlewordcounter = stripCount($singlewordcounter);
380:
381: if (!is_array($singlewordcounter)) {
382: return false;
383: } else {
384: return implode(', ', $singlewordcounter);
385: }
386: }
387: ?>
388: