Overview

Packages

  • CONTENIDO
  • Core
    • Authentication
    • Backend
    • Cache
    • CEC
    • Chain
    • ContentType
    • Database
    • Debug
    • Exception
    • Frontend
      • Search
      • URI
      • Util
    • GenericDB
      • Model
    • GUI
      • HTML
    • I18N
    • LayoutHandler
    • Log
    • Security
    • Session
    • Util
    • Validation
    • Versioning
    • XML
  • Module
    • ContentSitemapHtml
    • ContentSitemapXml
    • ContentUserForum
    • NavigationTop
    • ScriptCookieDirective
  • mpAutoloaderClassMap
  • None
  • PHP
  • Plugin
    • ContentAllocation
    • CronjobOverview
    • FormAssistant
    • FrontendLogic
    • FrontendUsers
    • Linkchecker
    • ModRewrite
    • Newsletter
    • Repository
      • FrontendNavigation
      • KeywordDensity
    • SmartyWrapper
    • UrlShortener
    • UserForum
    • Workflow
  • PluginManager
  • Setup
    • Form
    • GUI
    • Helper
      • Environment
      • Filesystem
      • MySQL
      • PHP
    • UpgradeJob

Functions

  • __cmp
  • calcDensity
  • keywordDensity
  • stripCount
  • Overview
  • Package
  • Function
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: /**
  3:  * This file includes the "keyword density" sub plugin from the old plugin repository.
  4:  *
  5:  * @package    Plugin
  6:  * @subpackage Repository_KeywordDensity
  7:  * @author     Unknown
  8:  * @copyright  four for business AG <www.4fb.de>
  9:  * @license    http://www.contenido.org/license/LIZENZ.txt
 10:  * @link       http://www.4fb.de
 11:  * @link       http://www.contenido.org
 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:     //check if the current language is german
 20:     //
 21:     // in later versions it is possible to manage most used words for every language in the dB.
 22:     if (cRegistry::getLanguageId() == 1)
 23:         //most used german words
 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:     //all blacklistentries to lowercase and trim ' ' at front.
244:     for ($i = 0; $i < count($blacklist); $i++) {
245:         $blacklist[$i] = ltrim(cString::toLowerCase($blacklist[$i]), '');
246:     }
247:     $tmp = explode(' ', $string);
248:     $tmp_size = sizeof($tmp);
249: 
250:     for ($i = 0; $i < $tmp_size; $i++) {
251:         if (cString::getStringLength($tmp[$i]) < $minLen) {
252:             continue;
253:         }
254: 
255:         // replace punctuation marks
256:         $patterns = array(
257:             '/[.,:]/'
258:         );
259:         $replaces = array(
260:             ''
261:         );
262:         $tmp[$i] = preg_replace($patterns, $replaces, $tmp[$i]);
263: 
264:         //trim last char if '-' e.g open-source-
265:         $tmp[$i] = rtrim($tmp[$i], '-');
266: 
267:         // hole word in upper cases ?
268:         (!ctype_upper($tmp[$i])) ? $tmp[$i] = cString::toLowerCase(addslashes($tmp[$i])) : $tmp[$i] = addslashes(preg_replace($patterns, $replaces, $tmp[$i]));
269: 
270:         if (!array_search($tmp[$i], $blacklist)) {
271:             // if hole string in upper cases add additional quantifier else
272:             // use only the string length
273:             if (ctype_upper($tmp[$i])) {
274:                 if (empty($singlewordcounter[cString::toLowerCase($tmp[$i])])) {
275:                     $singlewordcounter[cString::toLowerCase($tmp[$i])] = 0;
276:                 }
277:                 $singlewordcounter[cString::toLowerCase($tmp[$i])] += cString::getStringLength($tmp[$i]) + 10000;
278:             } else {
279:                 if (empty( $singlewordcounter[$tmp[$i]])) {
280:                     $singlewordcounter[$tmp[$i]] = 0;
281:                 }
282:                 $singlewordcounter[$tmp[$i]] += cString::getStringLength($tmp[$i]);
283:             }
284:         }
285:     }
286: 
287:     return $singlewordcounter;
288: }
289: 
290: function __cmp($a, $b) {
291:     if ($a == $b)
292:         return 0;
293:     return ($a > $b) ? -1 : 1;
294: }
295: 
296: function stripCount($singlewordcounter, $maxKeywords = 15) {
297: 
298:     // strip all with only 1
299:     $tmp = array();
300: 
301:     $result = array();
302: 
303:     $tmpToRemove = 1;
304:     foreach ($singlewordcounter as $key => $value) {
305:         if ($value > $tmpToRemove) {
306:             $tmp[$key] = $value;
307:         }
308:     }
309: 
310:     if (sizeof($tmp) <= $maxKeywords) {
311:         foreach ($tmp as $key => $value) {
312:             $result[] = $key;
313:         }
314:     } else {
315:         $dist = array();
316: 
317:         foreach ($tmp as $key => $value) {
318:             if (!isset($dist[$value])) {
319:                 $dist[$value] = 0;
320:             } else {
321:                 $dist[$value]++;
322:             }
323:         }
324: 
325:         uksort($dist, "__cmp");
326:         reset($dist);
327: 
328:         $count = 0;
329: 
330:         $resultset = array();
331:         $useQuantity = array();
332: 
333:         foreach ($dist as $key => $value) {
334: 
335:             $_count = $count + $value;
336:             if ($_count <= $maxKeywords) {
337:                 $count += $value;
338:                 $useQuantity[] = $key;
339:             } else {
340:                 break;
341:             }
342:         }
343: 
344:         // run all keywords and select by quantities to use
345:         foreach ($singlewordcounter as $key => $value) {
346:             if (in_array($value, $useQuantity)) {
347:                 $result[] = $key;
348:             }
349:         }
350:     }
351:     return $result;
352: }
353: 
354: function keywordDensity($headline, $text) {
355:     global $lang, $client, $cfgClient;
356: 
357:     $headline = strip_tags($headline);
358:     $text = strip_tags($text);
359: 
360:     $text = conHtmlEntityDecode($text);
361: 
362:     // replace all non converted numbered entities (what about numbered entites?)
363:     // replace all double/more spaces
364:     $patterns = array(
365:         '#&[a-z]+\;#i',
366:         '#\s+#'
367:     );
368:     $replaces = array(
369:         '',
370:         ' '
371:     );
372:     $text = preg_replace($patterns, $replaces, $text);
373: 
374:     // path = cms_getUrlPath($idcat);
375:     // path = str_replace(cRegistry::getFrontendUrl();, '', $path);
376:     // path = cString::getPartOfString($path, 0, cString::getStringLength($path) - 1);
377:     // path = str_replace('/', ' ', $path);
378: 
379:     $singlewordcounter = array();
380: 
381:     // calc for text
382:     $singlewordcounter = calcDensity($singlewordcounter, $text);
383: 
384:     // calc for headline
385:     $singlewordcounter = calcDensity($singlewordcounter, $headline, 2);
386: 
387:     // get urlpath strings
388:     // singlewordcounter = calcDensity($singlewordcounter, $path, 4);
389: 
390:     arsort($singlewordcounter, SORT_NUMERIC);
391:     $singlewordcounter = stripCount($singlewordcounter);
392: 
393:     if (!is_array($singlewordcounter)) {
394:         return false;
395:     } else {
396:         return implode(', ', $singlewordcounter);
397:     }
398: }
399: ?>
400: 
CMS CONTENIDO 4.10.0 API documentation generated by ApiGen 2.8.0