6

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

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

有什么建议可以有效地完成这项工作吗?

编辑:我想用 PHP 写这个。

4

7 回答 7

6

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

对于我的语料库,我从 Gutenberg 项目下载了一堆文件——没有真正的方法,只是从 etext00、etext01 和 etext02 中获取所有英语文件。

下面是结果,我保存了每个组合的前三个。

专家交流:97 种可能性
 - 专家交流 -23.71
 - 专家性别变化 -31.46
 - 专家交流 -33.86

半岛:11 种可能性
 - 笔岛 -20.54
 - 阴茎土地 -22.64
 - 笔是土地 -25.06

选择西班牙:28 种可能性
 - 选择西班牙-21.17
 - 选择痛苦-23.06
 - 在 -29.41 选择水疗中心

kidsexpress:15种可能性
 - 儿童快递 -23.56
 - 孩子性新闻 -32.65
 - 儿童快递 -34.98

童装:34种可能性
 - 孩子们发誓-19.85
 - 童装 -25.26
 - 孩子们发誓 -32.70

dicksonweb:8 种可能性
 - 迪克森网 -27.09
 - 迪克儿子网 -30.51
 - 网络上的迪克斯 -33.63
于 2009-08-29T20:19:27.063 回答
3

可能想看看这个 SO question

于 2009-08-27T07:03:34.323 回答
3

您需要开发一种启发式方法,将可能的匹配项排除在域外。我会这样做的方法是首先找到一个大的文本语料库。例如,您可以下载 Wikipedia。

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

quick brown fox jumps over the lazy dog

您将创建一个列表:

quickbrown
brownfox
foxjumps
jumpsover
overthe
thelazy
lazydog

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

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

最后,对未注册的前两个词组进行域检查!

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

于 2009-08-27T07:26:40.440 回答
2

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

如果您要尝试使用字典解析 url,请玩得开心(和一位好律师)。

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

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

于 2009-08-22T07:45:34.503 回答
1

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

于 2009-08-22T07:39:13.270 回答
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”的词干并将它们合并。

于 2011-12-09T01:49:45.137 回答
0

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

于 2009-08-22T07:18:12.360 回答