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


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

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

Какие-либо предложения по эффективному и действенному выполнению этой задачи?

Редактировать: Я хотел бы написать это на PHP.

Author: Martin v. Löwis, 2009-08-22

7 answers

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

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

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

expertsexchange: 97 possibilities
 -  experts exchange -23.71
 -  expert sex change -31.46
 -  experts ex change -33.86

penisland: 11 possibilities
 -  pen island -20.54
 -  penis land -22.64
 -  pen is land -25.06

choosespain: 28 possibilities
 -  choose spain -21.17
 -  chooses pain -23.06
 -  choose spa in -29.41

kidsexpress: 15 possibilities
 -  kids express -23.56
 -  kid sex press -32.65
 -  kids ex press -34.98

childrenswear: 34 possibilities
 -  children swear -19.85
 -  childrens wear -25.26
 -  child ren swear -32.70

dicksonweb: 8 possibilities
 -  dickson web -27.09
 -  dick son web -30.51
 -  dicks on web -33.63
 6
Author: SquareCog, 2017-05-23 11:44:27

Возможно, вы захотите проверить этот вопрос SO.

 3
Author: Zed, 2017-05-23 11:52:15

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

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

quick brown fox jumps over the lazy dog

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

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

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

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

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

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

 3
Author: brianegge, 2009-08-27 07:39:05

Choosespain.com kidsexpress.com childrenswear.com dicksonweb.com

Удачи (и хорошего адвоката), если вы собираетесь попытаться проанализировать URL-адрес с помощью словаря.

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

Другие возможности: извлечение данных из ssl-сертификата; запрос сервера доменных имен верхнего уровня; Получите доступ к серверу доменных имен (TLD); или используйте один из инструментов или сервисов "whois" (просто Google "whois").

 2
Author: Dipstick, 2009-08-22 07:45:34

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

 1
Author: Zed, 2009-08-22 07:39:13
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" в конце, и объединить их.

 1
Author: Toby, 2011-12-09 01:49:45

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

 0
Author: , 2009-08-22 07:18:12