【问题标题】:Alternative design for a synonyms table?同义词表的替代设计?
【发布时间】:2011-02-24 11:22:35
【问题描述】:

我正在开发一个应用程序,该应用程序会为输入文本建议替代词/短语。我怀疑什么是同义词表的好设计。

设计注意事项:

  1. 同义词的数量是可变的,即football有一个同义词(soccer),但in particular有两个(particularlyspecifically
  2. 如果footballsoccer 的同义词,则关系也存在相反的方向。
  3. 我们的目标是查询一个词并找到它的同义词
  4. 我们希望保持表格小,让添加新词更容易

我想到的是一个两栏设计

  • col a = word
  • col b = delimited list of synonyms

还有更好的选择吗?使用两张表怎么样,一张用于单词,另一张用于关系?

编辑:
看完答案后,我想到了另一种方法。它使用包含所有同义词的单列表,每个同义词都包含在单词边界标记中。我的意思是
|in particular|particularly|specifically|
然后我会用
SELECT * FROM synonyms WHERE word LIKE '%|specifically|%'
查询表 在代码中,我丢弃了前面和后面的 |s 并进行拆分并拥有同义词。

有什么不好的,我没看到吗?

【问题讨论】:

  • 我也想知道这种方法(最后一种)是否好。

标签: database-design


【解决方案1】:

阅读完答案后,我想到了另一种方法。它使用包含所有同义词的单列表,每个同义词都包含在单词边界标记中。我的意思是像

|in particular|particularly|specifically|

然后我会用

查询表
SELECT * FROM `synonyms` WHERE `word` LIKE '%|$word|%'

在代码中,我丢弃了前面和后面的 |s 并执行 explode 并拥有同义词:

$synonyms = $row['word'];
$synonyms = explode('|', substr($synonyms, 1, -1));
unset($synonyms[$word]);

【讨论】:

    【解决方案2】:

    您的一张表设计会有很多重复的同义词列表,但这对您来说可能没问题。

    您可能需要考虑一个两表设计,将所有单词映射到“规范变体”(作为一个单词)或 id(一个数字):

    syn1 -> 0x1234eef3
    syn2 -> 0x1234eef3
    

    然后是一个表映射 id 到同义词列表:

    01234eef3 -> (syn1, syn2)
    

    【讨论】:

      【解决方案3】:

      出于三个原因,我会使用两个表方法,一个用于单词,另一个用于关系而不是单表方法。

      1. 单词表中不会有重复的单词。
      2. 在单词与其同义词之间建立双向关系更容易。
      3. 编写用于分隔列表的 SQL 语句更加繁琐。

      单词表:2列IdWord

      关系表:2列WordId1WordId2

      具有两个同义词的单词将在 Word 表中占一行,在 Relation 表中占两行。

      【讨论】:

        【解决方案4】:
        • col a = 单词和
        • col b = 同义词的分隔列表

        糟糕的想法。每次添加同义词时,都必须在两个地方进行更改。只需添加对

        (in particular, particularly)
        (in particular, specifically)
        

        并在(a,b)a < b 中强制执行。这样一来,就不会有冗余了。

        使用两个表也可以,也许你会节省内存。但是,您的查询中还会有一个联接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-19
          • 2011-01-21
          • 2012-01-09
          • 1970-01-01
          • 2013-09-19
          • 2014-01-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多