Раньше я уже делал доклад по поисковой оптимизации электронных библиотек и звучали слова, что тот факт, что поисковики не будут отправлять пользователей в полугиговые PDF существенно уменьшает число поисковых запросов, на которые электронная библиотека попадёт в выдачу.
Но как оценить, насколько существенно это может повредить?
А можно измерить сколько уникальных слов встречается в заглавии ресурса и сколько в тексте.
Для этого написан небольшой скрипт, который извлекает текст из заглавий и из содержимого и можно сравнить сколько уникальных слов находится в заглавиях и сколько в тексте.
Для очистки от мусора, оставлялись только латинские и русские буквы, a-zA-Zа-яА-Я, а всё остальное вырезалось. Другой обработки слов не осуществлялось, в том числе слова не приводились к нормальной форме.
Анализ показал на примере https://elis.psu.ru, что на 9550 проанализированных документов (PDF, EPUB и т.п.) в заглавиях содержится 17292 разных слов, а в тексте 1914810 разных слов.
Т.о. в текстах в библиотеке содержится в 110 раз больше слов, чем в заглавиях.
Код[править]
Пример кода для подсчета слов:
<?php require_once('drupal.bootstrap.php'); ini_set('memory_limit','10G'); module_load_all(); $words_title = array(); // only title words $words_text = array(); // all text words gc_enable(); $nodes = db_select('node','n')->fields('n')->condition('n.status','1')->condition('n.type','ebookpage','<>')->execute(); $i = 0; foreach ($nodes as $res) { $node = node_load($res->nid); if ($node != false) { addWordsToArray($node->title, $words_title); $i++; $elisSearch = new ElisSphinxSearch(); $textFragments = $elisSearch->getTextFragmentsForEntity($node,'node'); if ($textFragments != false) { foreach ($textFragments as $fragment=>$text) { if ($text != null && is_string($text)) { addWordsToArray($text, $words_text); } } } if ($i % 10 == 0) { drupal_static_reset(); print "$i titles: " . count($words_title) . ' texts: ' . count($words_text) . "\n"; } } } print "title word count: " . count($words_title) . "\n"; print "text word count: " . count($words_text) . "\n"; function addWordsToArray($str, &$arr) { $words = preg_split("/\s|\n/", $str); foreach ($words as $word) { $word = preg_replace("#[^A-Za-zЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю]#","",$word); if (is_string($word) && strlen($word)) { if (!isset($arr[$word])) { $arr[$word] = 1; } else { $arr[$word]++; } } } }