PHP字典类?还是另类?

时间:2010-02-09 12:46:45

标签: php dictionary

基本上,我正在寻找的是在PHP中实现字典的某种类或方法。 例如,如果我正在构建一个单词unscrambler - 假设我使用了字母'a,e,l,p,p'。安排的可能性很大 - 我怎么只显示那些实际的词(苹果,苍白等)?

谢谢!

6 个答案:

答案 0 :(得分:3)

啊,另一个答案是:

如果你只想获得所有真实的单词 - 然后找到任何大字典。然后以下列方式存储:

字|散列

其中单词是单词本身,哈希按字母顺序排列字母:

苹果哈希的

将是:aelpp或aelp2

然后,对于给定的字母,使用相同的算法遍历所有组合进行散列并搜索此表。

答案 1 :(得分:3)

使用Trie可以有效地解决经典的单词查找问题。

我建议从WordNet找到一个单词列表,将其存储在Trie中,然后执行快速查找可能的单词。

解决方案的形式如下:

  1. 加载单词列表
  2. 将单词列表存储在trie中
  3. 接受单词的输入以解读
  4. 尝试排列i = 1..N

    一个。查找排列我使用trie

    湾如果有正面结果,请将其存储为显示

    ℃。 iterate(i ++)

  5. 从3开始重复。

  6. 编辑:

    这里的一个注意事项是,对于任何N长度的字符,可能有N!必需的查找(对于7个字符,即5040)。您应该考虑对trie查找算法进行一些优化。例如,通过尽早排除无效的子串,而不是重复结束排列,可以获得可观的效率。

    e.g。给出单词apple,如果你有选择“ppl”作为前三个字符的排列,则不会找到任何单词。所以,无论你如何将a和e置于最后,你都无法构建一个单词。提前终止排列可能对您的算法效率很重要。

答案 2 :(得分:2)

你也可以考虑使用pspell

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;

答案 3 :(得分:0)

在文件或数据库中存储单词列表,然后尝试所有组合。您还可以考虑元音与辅音的可能位置,以加快它的速度。您可以使用类似WordNet的内容,而不是制作自己的单词列表。

答案 4 :(得分:0)

我实际上更喜欢zerkms的解决方案,但这是另一个

创建2个表

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


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

当您在单词表中添加单词时,您必须为每个唯一字母的letter_index添加一个条目。 letter_index有一个基于字母和word_id的主键 要查找包含一组字母的单词,您可以创建类似以下内容的查询:

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 )

答案 5 :(得分:0)

或者,您可以使用developer.dictionary.com api并只进行单词查找以进行验证。也可以进行拼写检查。