2

我有一堆域,我想将它们分解成单词。我从 wordlist.sourceforge.net 下载了 wordlist 并开始编写暴力类型的脚本来通过字典列表运行每个域。

问题是我不能让它产生足够好的结果。我做的简单脚本如下所示:

foreach($domains as $dom) {
    $orig_dom = $dom;
    foreach($words as $w) {
        $pos = stristr($dom,$w);
        if($pos) {
            $wd[$orig_dom][] = $w;
        }
    }
}

$words 是字典数组,domains 只是一个域名数组。

结果如下所示:

[aheadsoftware] => Array
    (
        [0] => ahead
        [1] => head
        [2] => heads
        [3] => soft
        [4] => software
        [5] => ware

从技术上讲,它可以工作,但我不知道如何编码的技巧是让脚本理解如果你匹配'ahead',你就没有'head'或'heads'了。它还应该理解选择“软件”而不是“软件”和“软件”。是的,我知道,语言计算的世界是纯粹的痛苦;)

4

1 回答 1

0

一个天真的解决方案可能是每次您有匹配项时,在您将单词添加到结果中之前再进行一次stristr查找,看看您尝试放入结果中的单词是否包含在已经存在的任何单词中。如果是,请不要添加它。

例如,如果域包含“heads”并且您的字典首先列出“head”,这将不起作用。您可能宁愿在结果中添加“heads”而不是“head”。

您可以通过查看哪个更长来绕过该限制。如果结果中包含的单词较长,则不要添加新单词。如果新单词较长,请删除结果中已有的单词并添加新单词。

于 2011-09-26T18:46:22.147 回答