PHP Sözlük class?

6 Cevap php

Basically, what I'm looking for is some kind of class or method to implement a dictionary in PHP. For example, if I was building a word unscrambler - lets say I used the letters 'a,e,l,p,p'. The number of possibilities for arrangement is huge - how do I only display those which are actual words (apple, pale etc )?

Teşekkürler!

6 Cevap

Klasik kelime arama sorunları verimli bir Trie kullanılarak çözülebilir.

I WordNet, bir Trie depolamak ve daha sonra olası kelimelerin fast aramaları gerçekleştirmek bir kelime listesi, diyelim ki, bulma öneririz.

Bir çözelti şeklinde olacaktır:

  1. sözcük listesi yüklenemedi
  2. bir tray kelime listesini saklamak
  3. deşifre etmek bir kelime girişi kabul
  4. permütasyonlarını denemek i = 1 N ..

    a. arama permütasyon i tray kullanarak

    b. olumlu bir sonuç varsa, ekran için bu mağaza

    c. yineleme (i + +)

  5. 3 tekrarlayın.

edit:

Burada bir yan not herhangi bir N uzunlukta karakter kelime N olabileceğini olduğunu! (5040 olurdu 7 karakterler için) gerekli aramaları. Sen tray arama algoritması için bazı optimizasyonlar yapma düşünmelisiniz. Örneğin, erken geçersiz substrings iktidar ve bitiş permütasyon tekrarlayarak değil tarafından önemli verim elde.

örneğin kelime elma verilen, size ilk üç karakteri olarak "ppl" seçilen permutation olsaydı, hiçbir kelime bulunacaktır. Yani, ne olursa olsun sonunda a ve e permute nasıl bir kelime inşa edilemez. Permütasyon erken fesih sizin algoritmanın verimliliği için önemli olabilir.

Ah, bir başka cevap:

Sadece tüm gerçek kelime almak istiyorsanız - o zaman herhangi bir büyük sözlük bulmak. daha sonra bir şekilde saklayın:

kelime | karma

kelime kelime kendisini ve karma alfabetik harfler sıralanır nerede:

elma karma olacak: aelpp veya aelp2

sonra verilen mektuplar için karma için aynı algo kullanan tüm kombinasyonları travers ve bu tabloda arama.

Ayrıca Pspell düşünebilirsiniz

http://php.net/manual/en/book.pspell.php

$ps = pspell_new("en");
foreach(array('alppe', 'plape', 'apple') as $word)
   if(pspell_check($ps, $word))
      echo $word;

Bir dosya veya bir veritabanında kelimelerin bir listesini saklamak, ve sonra sadece tüm kombinasyonlarını deneyin. Ayrıca potansiyel hızlandırmak için ünsüz vs ünlülerinin olası konumunu düşünebiliriz. Aksine kendi kelime listesi yapmak yerine, WordNet gibi bir şey kullanabilirsiniz.

Ben aslında daha iyi zerkms çözümünü ister ama burada başka biri

2 tablo oluşturmak

words
-----
word_id (primary key)
word


letter_index
-----
letter (idx)
word_id (idx)

When you add a word to the words table you have to add an entry to the letter_index for each unique letter. letter_index has a primary key based on both the letter and the word_id.
To find words comprising of a group of letters you create a query something like:

SELECT word FROM words w
// for each letter in the search
INNER JOIN letter_index i ON ( w.word_id = i.word_id AND i.letter = letter_1 )
INNER JOIN letter_index i ON ( w.word_id = i.word_id AND i.letter = letter_2 )
INNER JOIN letter_index i ON ( w.word_id = i.word_id AND i.letter = letter_3 )
...
INNER JOIN letter_index i ON ( w.word_id = i.word_id AND i.letter = letter_n )

ya, sen developer.dictionary.com API kullanmak ve sadece doğrulama için bir kelime arama yapabilirsiniz. Ayrıca yazım kontrolleri gerçekleştirebilirsiniz.