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

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

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

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

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


person Kevin    schedule 22.08.2009    source источник
comment
PHP, отредактировал мой вопрос, чтобы включить это, спасибо.   -  person Kevin    schedule 22.08.2009
comment
пройтись по строке в обратном порядке с проверкой pspell - eseehc = сыр, вычесть сыр из строки, ekil = лайк, вычесть лайк из строки = лайк; s, sl, sle, slet, sleto, sletoh = отели, вычесть отели... и т. д. вы также можете запускать его несколько раз и включать последние находки, не удаляя их. pspell с обратной строкой — это очень простой способ найти настоящие слова на любом языке.   -  person Toby    schedule 09.12.2011
comment
Отвечает ли это на ваш вопрос? Нужна помощь в понимании этого алгоритма Python Viterbi   -  person Matthias Winkelmann    schedule 27.12.2019


Ответы (7)


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

Для своего корпуса я загрузил кучу файлов из проекта Gutenberg — никакого реального способа сделать это, просто взял все англоязычные файлы из 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
person SquareCog    schedule 29.08.2009
comment
Похоже, не прошла только детская одежда, но я не ожидал, что эта автоматизация будет на 100% точной. И я согласен, вы заслуживаете награды :) Не могли бы вы опубликовать исходный код с вашими изменениями? - person Kevin; 31.08.2009
comment
Это в основном то же самое, что и в моем блоге — просто замените умножение в find_word_seq_score на $score += log($DICT->{$_}/$TOTAL);. - person SquareCog; 31.08.2009
comment
um должен быть знаком «больше-тогда». - person SquareCog; 31.08.2009
comment
Ну и технически не детский, так что ничего удивительного :-). - person SquareCog; 31.08.2009

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

person Zed    schedule 27.08.2009
comment
Это самое близкое решение, которое я видел :) Bounty балансирует в вашем направлении. - person Kevin; 28.08.2009
comment
Чувак, это должно быть МОЯ награда :-) Думаю, я запущу perl-скрипт и дам тебе знать, что он извлекает.. - person SquareCog; 28.08.2009

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

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

quick brown fox jumps over the lazy dog

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

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

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

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

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

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

person brianegge    schedule 27.08.2009
comment
Я не уверен, что MTurk подойдет для этой работы, так как я буду обрабатывать тысячи доменов в день. Тем не менее, мне нравится метод, который вы предложили! - person Kevin; 28.08.2009
comment
Алгоритм Витерби, вероятно, намного лучше, чем тот, который я предложил. WRT, MTurk, это зависит от того, какую ценность добавляет ваше разбиение на слова. У вас может быть хит MTurk, чтобы разделить 10 работ, и это может стоить вам 0,015 доллара. Это около 15 долларов за 1000 имен. Если бы сайт «экспертов по смене пола» сначала протестировал свой домен, он мог бы начать с дефиса в середине. - person brianegge; 28.08.2009

Choosespain.com kidsexpress.com детская одежда.com dicksonweb.com

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

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

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

person Dipstick    schedule 22.08.2009
comment
Домены, которые я анализирую, обычно не имеют сайта. Я не уверен, что вы подразумеваете под использованием DNS/whois для поиска ключевых слов, используемых в доменах. - person Kevin; 22.08.2009
comment
не забывайте penisland.com ;) - person Charles Ma; 22.08.2009
comment
@Кевин. Трафик в Интернете маршрутизируется не с использованием имен, а с использованием IP-адресов, например. 213.171.218.121. Сервер доменных имен переводит имя в IP-адрес. TLD — это сервер доменных имен верхнего уровня. Чтобы получить доменное имя, компания должна зарегистрироваться, и есть способы получить часть этой информации. Очевидно, что это неверно для доменов в частной сети, поэтому это может быть неприменимо к тому, что вы пытаетесь сделать. - person Dipstick; 22.08.2009
comment
Я понимаю это, я просто не понимаю, как все это помогает достичь моей цели извлечения ключевых слов, используемых в доменном имени. - person Kevin; 23.08.2009

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

person Zed    schedule 22.08.2009
comment
Верно, но это можно было реализовать за час, а он бы уже дней на пять опередил в расщеплении доменных имён мира :) - person Zed; 27.08.2009

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» в конце, и объединить их.

person Toby    schedule 09.12.2011

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

person Community    schedule 22.08.2009
comment
Вам нужно получить список словарей. Затем вам нужно преобразовать этот список в удобный для вас формат, будь то массив определенного синтаксиса, список csv или что-то еще. Затем вам нужно написать программу, которая оценивает запись вашего домена по этому списку. - person ; 22.08.2009