以编程方式从域名中提取关键字

时间:2009-08-22 07:14:09

标签: php string dns keyword extraction

假设我有一个我想分析的域名列表。除非域名是连字符,否则我看不到一种特别简单的方法来“提取”域中使用的关键字。但我看到它在DomainTools.com,Estibot.com等网站上完成。例如:

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

有效和有效地实现这一目标的任何建议吗?

编辑:我想用PHP编写。

7 个答案:

答案 0 :(得分:6)

好的,我运行了我为this SO question编写的脚本,进行了一些小的更改 - 使用日志概率来避免下溢,并修改它以读取多个文件作为语料库。

对于我的语料库,我从项目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

答案 1 :(得分:3)

可能想查看this SO question

答案 2 :(得分:3)

您需要开发一种可能会在域外获得匹配的启发式算法。我这样做的方法是首先找到一大堆文本。例如,您可以下载Wikipedia。

接下来拿你的语料库,并结合每两个相邻的单词。例如,如果您的句子是:

quick brown fox jumps over the lazy dog

您将创建一个列表:

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

每个都有一个计数。在解析语料库时,您将跟踪每两个单词的频率对。此外,对于每对,您需要对原始的两个单词进行排序。

按频率对此列表进行排序,然后尝试根据这些字词在您的域中查找匹配项。

最后,对未注册的前两个单词短语进行域名检查!

我认为像DomainTool这样的网站会列出排名最高的单词。然后他们首先尝试解析这些词。根据目的,您可能需要考虑使用MTurk来完成工作。不同的人会以不同的方式解析相同的单词,并且可能不会与单词的常见程度成比例。

答案 3 :(得分:2)

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

如果你想尝试用字典解析网址,那就玩得开心(还有一位优秀的律师)。

如果您可以找到相同的字符但在网站上用空格分隔,则可能会做得更好。

其他可能性:从ssl证书中提取数据;查询顶级域名服务器; 访问域名服务器(TLD);或使用“whois”工具或服务之一(只是google“whois”)。

答案 4 :(得分:1)

如果您有一个有效单词列表,则可以遍历您的域字符串,并尝试每次使用回溯算法切断有效单词。如果你设法用尽所有单词,那么你就完成了。请注意,时间复杂度并非最佳:)

答案 5 :(得分:1)

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”的单词的词干并将它们合并。

答案 6 :(得分:0)

您必须使用针对域条目的字典引擎来查找有效单词,并针对结果运行该字典引擎以确保结果是有效单词。