Программно извлекать ключевые слова из доменных имен - PullRequest
6 голосов
/ 22 августа 2009

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

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

Есть ли какие-либо предложения для эффективного и действенного решения этой проблемы?

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

Ответы [ 7 ]

6 голосов
/ 30 августа 2009

Хорошо, я запустил сценарий, который написал для этого 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
3 голосов
/ 27 августа 2009

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

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

quick brown fox jumps over the lazy dog

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

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

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

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

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

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

3 голосов
/ 27 августа 2009

Возможно, стоит проверить этот ТАК вопрос .

2 голосов
/ 22 августа 2009

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

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

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

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

1 голос
/ 09 декабря 2011
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 голос
/ 22 августа 2009

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

0 голосов
/ 22 августа 2009

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

...