Programlı etki alanı adlarından gelen kelimeleri ayıklamak

7 Cevap php

Diyelim ki ben analiz etmek isterim alan adlarının bir listesi var diyelim. Alan adı hyphenated sürece, ben etki kullanılan anahtar kelimeler "ayıklamak" için özellikle kolay bir yol göremiyorum. Oysa ben böyle DomainTools.com, Estibot.com, vb Örneğin gibi sitelerde yapılan bkz:

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

Verimli ve etkin gerçekleştirmek için herhangi bir öneriniz?

Düzenleme: Ben PHP bunu yazmak istiyorum.

7 Cevap

Yetersizlik önlemek için günlük olasılıklar kullanılarak, ve korpus olarak birden fazla dosya okumak için modifiye - Tamam, ben küçük değişiklikler bir çift ile, this SO question için yazdığı senaryoyu koştu.

, Bu gerçek bir yöntem sadece etext00, etext01 gelen tüm İngilizce dil dosyaları yakaladı ve etext02 - Benim külliyatı için ben proje Gutenberg dosyaları bir demet indirilen.

Aşağıda sonuçları Ben her kombinasyon için ilk üç kurtardı vardır.

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

this SO question kontrol etmek isteyebilirsiniz.

Muhtemelen etki maçlarını alacak bir sezgisel geliştirmek gerekir. Ben bunu yapacağını yolu ilk metnin bir külliyatını buluyorum. Örneğin, Vikipedi'yi indirebilirsiniz.

Yanındaki külliyat almak ve her iki komşu kelime birleştirmek. Örneğin, eğer cümle:

quick brown fox jumps over the lazy dog

Sen bir liste oluşturun:

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

Bunların her biri bir sayımını olurdu. Eğer külliyat ayrıştırmak gibi, her iki kelime frekans çiftleri takip edeceğiz. Ayrıca, her çifti için, orijinal iki kelime ne olduğunu sıralamak gerekir.

O Sıralama bu frekans ile liste ve bu kelimeleri dayalı etki eşleşmeleri bulmaya çalışır.

Son olarak, kayıtlı olmayan üst iki kelime öbekleri için bir etki alanı denetimi yapmak!

Ben DomainTool gibi siteler en yüksek rütbeli kelimelerin bir listesini almak düşünüyorum. Daha sonra ilk olarak bu kelimeleri ayrıştırmak için deneyin. Amacına bağlı olarak, iş yapmak için mturk kullanarak düşünebilirsiniz. Farklı insanlar farklı aynı kelimeleri ayrıştırmak, ve kelimeleri nasıl ortak orantılı bunu olmayabilir.

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

Eğer bir sözlük ile url ayrıştırmak için denemek için gidiyoruz eğer eğlenceli (ve iyi bir avukat) var.

Eğer aynı karakterleri bulmak ama kendi web sitesinde boşluk ile ayrılmış olabilir eğer daha iyi yapabilir.

Other possiblities: extract data from ssl certificate; query top level domain name server; Access the domain name server (TLD); or use one of the "whois" tools or services (just google "whois").

Eğer geçerli kelimelerin bir listesini varsa, etki alanı dize aracılığıyla döngü can ve yararlar algoritma ile geçerli bir kelime her zaman kesmeye çalışın. Tüm kelimeleri kullanmak başardı ise, işleminiz tamamlanmıştır. Bu zaman karmaşıklığı uygun olmadığını unutmayın :)

Sen sonuç geçerli kelimeler sağlamak için geçerli kelime ve sonucu karşı koşmak sözlük motoru bulmak için bir etki alanı girişine karşı bir sözlük motoru kullanmak gerekir.

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 ile basit bir başlangıç ​​gibi. Eğer sonuçlarını karşılaştırmak ve sonunda "s" olmadan bir kelime Stemm var ve bunları birleştirmek görmek isteyebilirsiniz.