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」がもうないことを理解させるためのトリックです。また、'soft' と 'ware' の代わりに 'software' を選択することも理解する必要があります。はい、私は知っています、言語コンピューティングの世界は純粋な苦痛です ;)

4

1 に答える 1

0

単純な解決策は、一致するたびに単語を結果に追加する前に別のstristr検索を行い、結果に入力しようとしている単語が既にそこにある単語のいずれかに含まれているかどうかを確認することです。その場合は、追加しないでください。

たとえば、ドメインに「heads」が含まれていて、辞書に「head」が最初にリストされている場合、これは機能しません。「頭」の代わりに「頭」を結果に追加することもできます。

どちらが長いかを確認することで、その制限を回避できます。結果に含まれる単語が長い場合は、新しい単語を追加しないでください。新しい単語が長い場合は、結果に既に含まれている単語を削除して、新しい単語を追加してください。

于 2011-09-26T18:46:22.147 に答える