如何找到 SQL 中给定字母任意排列的所有单词?

How to find all words with any permutation of the given letters in SQL?

我正在使用 sqlite3 模块,使用 Python 3.10.0。我创建了一个包含 table 个英文单词的数据库,其中一列创造性地命名为“单词”。我的问题是,如何对给定单词中至多包含字母的所有单词进行采样?例如,如果输入是“establishment”,则有效输出可以是“meant”、“tame”、“mate”、“team”、“establish”、“neat”等。无效输入包括包含输入中未找到的任何其他字母的单词。我对此做了一些研究,但我发现唯一与此接近的是使用 LIKE 关键字,这似乎是正则表达式匹配的有限版本。我提到使用 Python 3.10 是因为我想我在某处读到 sqlite3 支持用户定义的函数,但我想我会先问问是否有人知道更简单的解决方案。

你的问题非常含糊。


让我回答一个相关问题:“我怎样才能有效地找到给定单词的字谜?”

对此有一个标准方法。 只需按字母顺序排列一个单词中的所有字母,然后按排序顺序存储它们。

所以给定一本包含这些“已知”单词的字典, 我们会将前三个映射到同一个字符串:

  • 苍白 <--> aelp
  • 声音 <--> 声音
  • 恳求 <--> 求助
  • 计划 <--> alnp

现在给定一个查询词“leap”,我们如何高效地找到它的字谜?

  1. 把它变成“aelp”。
  2. 查询该字符串,检索三个匹配的字典词。

Sqlite 非常适合这样的任务。 它可以很容易地产生合适的列索引。


现在让我们return解决您的问题。 我怀疑它比字谜更复杂一点。 考虑使用相关方法。

翻阅每个字典单词,以标准顺序存储二字字母。 所以对于“苍白”,我们将存储:

  • 苍白 <--> ap
  • 苍白 <--> 苍白
  • 苍白 <--> el

重复所有其他字典单词。

然后,在查询时,输入“leap”, 您可以查询数据库中的“el”、“ae”和“ap”。

请注意,那里漏掉了“ae”。 如果这让你感到困扰,在处理整个字典时 随意存储所有 2 个字母的组合,即使是不连续的。

可能去三字母组合或所有 3 个字母的组合会有所帮助。 花一些时间解决问题以找出答案。