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
    • ContentRssCreator
    • ContentSitemapHtml
    • ContentSitemapXml
    • ContentUserForum
    • NavigationTop
    • ScriptCookieDirective
  • mpAutoloaderClassMap
  • None
  • Plugin
    • ContentAllocation
    • CronjobOverview
    • FormAssistant
    • FrontendLogic
    • FrontendUsers
    • Linkchecker
    • ModRewrite
    • Newsletter
    • Repository
      • FrontendNavigation
      • KeywordDensity
    • SearchSolr
    • 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(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:         // replace punctuation marks
257:         $patterns = array(
258:             '/[.,:]/'
259:         );
260:         $replaces = array(
261:             ''
262:         );
263:         $tmp[$i] = preg_replace($patterns, $replaces, $tmp[$i]);
264: 
265:         //trim last char if '-' e.g open-source-
266:         $tmp[$i] = rtrim($tmp[$i], '-');
267: 
268:         // hole word in upper cases ?
269:         (!ctype_upper($tmp[$i])) ? $tmp[$i] = mb_strtolower(addslashes($tmp[$i])) : $tmp[$i] = addslashes(preg_replace($patterns, $replaces, $tmp[$i]));
270: 
271:         // using mb_strtolower because of umlauts
272:         if (!array_search($tmp[$i], $blacklist)) {
273:             // if hole string in upper casses add additional quantifiert else
274:             // use only the string length
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:     // strip all with only 1
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:         // run all keywords and select by quantities to use
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:     // replace all non converted numbered entities (what about numbered entites?)
351:     // replace all double/more spaces
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:     // path = cms_getUrlPath($idcat);
363:     // path = str_replace(cRegistry::getFrontendUrl();, '', $path);
364:     // path = substr($path, 0, strlen($path) - 1);
365:     // path = str_replace('/', ' ', $path);
366: 
367:     $singlewordcounter = array();
368: 
369:     // calc for text
370:     $singlewordcounter = calcDensity($singlewordcounter, $text);
371: 
372:     // calc for headline
373:     $singlewordcounter = calcDensity($singlewordcounter, $headline, 2);
374: 
375:     // get urlpath strings
376:     // singlewordcounter = calcDensity($singlewordcounter, $path, 4);
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: 
CMS CONTENIDO 4.9.11 API documentation generated by ApiGen 2.8.0