Программно извлекать ключевые слова из доменных имен

Предположим, у меня есть список доменных имен, которые я бы хотел проанализировать. Если имя домена не переносится, я не вижу особо простого способа «извлечь» ключевые слова, используемые в домене. Тем не менее, я вижу, что это делается на таких сайтах, как DomainTools.com, Estibot.com и т. Д. Например:

ilikecheese.com becomes "i like cheese" sanfranciscohotels.com becomes "san francisco hotels" ... 

Любые предложения по эффективному и эффективному выполнению?

Изменить: я хотел бы написать это на PHP.

Хорошо, я запустил сценарий, который я написал для этого вопроса SO , с несколькими незначительными изменениями – с использованием ошибок журнала, чтобы избежать переполнения и изменения его для чтения нескольких файлов в виде корпуса.

Для моего корпуса я загрузил кучу файлов из проекта Gutenberg – нет реального метода для этого, просто захватил все файлы на английском языке из etext00, etext01 и etext02.

Ниже приведены результаты, я сохранил первую тройку для каждой комбинации.

 expertsexchange: 97 возможностей
  - обмен экспертами -23.71
  - экспертная смена пола -31,46
  - эксперты ex change -33.86

 penisland: 11 возможностей
  - остров перо -20.54
  - земля пениса -22.64
  - ручка - земля -25.06

 choosespain: 28 возможностей
  - выберите spain -21.17
  - выбирает боль -23.06
  - выберите спа-салон в -29.41

 kidsexpress: 15 возможностей
  - дети экспресс -23.56
  - детская секс-пресса -32.65
  - дети из прессы -34.98

 детская одежда: 34 возможности
  - клянутся дети -19.85
  - детская одежда -25.26
  - Ребенок-ревень -32.70

 dicksonweb: 8 возможностей
  - dickson web -27.09
  - мальчик-сын -30.51
  - член на веб-сайте -33.63

Мог бы проверить этот вопрос .

Вам нужно разработать эвристику, которая получит вероятные совпадения из домена. То, как я это сделаю, сначала найдет большой корпус текста. Например, вы можете скачать Википедию.

Затем возьмите свой корпус и соедините все два смежных слова. Например, если ваше предложение:

 quick brown fox jumps over the lazy dog 

Вы создадите список:

 quickbrown brownfox foxjumps jumpsover overthe thelazy lazydog 

У каждого из них будет счет один. Когда вы разбираете свой корпус, вы будете отслеживать частотные пары каждых двух слов. Кроме того, для каждой пары вам нужно будет отсортировать исходные два слова.

Сортируйте этот список по частоте, а затем попытайтесь найти совпадения в своем домене на основе этих слов.

Наконец, сделайте проверку домена для двух верхних фраз, которые не зарегистрированы!

Я думаю, что сайты, такие как DomainTool, берут список наивысших слов. Затем они пытаются разобрать эти слова. В зависимости от цели, вы можете захотеть использовать MTurk для выполнения задания. Разные люди будут разбирать одни и те же слова по-разному и могут не делать этого пропорционально тому, насколько распространены слова.

choosespain.com kidsexpress.com childrenswear.com dicksonweb.com

Получайте удовольствие (и хороший адвокат), если вы попытаетесь разобрать URL со словарем.

Вам может быть лучше, если вы сможете найти те же символы, но разделены пробелом на своем веб-сайте.

Другие возможности: извлекать данные из сертификата ssl; сервер доменного имени верхнего уровня запроса; Доступ к серверу имен доменов (TLD); или использовать один из инструментов или сервисов «whois» (просто google «whois»).

Если у вас есть список допустимых слов, вы можете прокручивать строку своего домена и каждый раз пытаться обрезать действительное слово с помощью алгоритма обратного отслеживания. Если вам удалось использовать все слова, вы закончите. Имейте в виду, что временная сложность этого не оптимальна 🙂

 function getwords( $string ) { if( strpos($string,"xn--") !== false ) { return false; } $string = trim( str_replace( '-', '', $string ) ); $pspell = pspell_new( 'en' ); $check = array(); $words = array(); for( $j = 0; $j < ( strlen( $string ) - 5 ); $j++ ) { for( $i = 4; $i < strlen( $string ); $i++ ) { if( pspell_check( $pspell, substr( $string, $j, $i ) ) ) { $check[$j]++; $words[] = substr( $string, $j, $i ); } } } $words = array_unique( $words ); if( count( $check ) > 0 ) { return $words; } return false; } print_r( getwords( 'ilikecheesehotels' ) ); Array ( [0] => like [1] => cheese [2] => hotel [3] => hotels ) 

как простое начало с pspell. вы можете сравнить результаты и посмотреть, есть ли у вас основа слов без «s» в конце и объединить их.

Вам нужно будет использовать механизм словаря для записи в домене, чтобы найти правильные слова и запустить механизм словаря для результата, чтобы гарантировать, что результат является допустимым.