求助:同义词/反义词数据库设计

2013-02-16 23:00:06 +08:00
 y051313
要做一个同义词,反义词查询数据库。

同义词部分,我准备把每组同义词都放在一个字段里面,用特殊字符分开,类似“首脑~~~领袖~~~首长~~~首领”,然后根据用户输入,去掉当前查询关键词,把剩下的部分显示出来

但是反义词部分,有点问题,我手头的数据是类似下面这种:
"左右为难= 应付自如 得心应手 左右逢源"

等号左边始终是一个词,等号右边是对应的1个或多个反义词。我希望用户不论是查左右为难,还是应付自如都能得到反应词。这样的话应该如果设计表结构?

目前想到的方法还是放到一个字段,形成类似“左右为难|||应付自如~~~得心应手~~~左右逢源"的结构,然后用户查询的时候先判断是在|||左边还是右边,然后取对应的部分显示出来。

大家有别的什么方案吗?同义词和反义词可以分开成两个表,当然最好是一个表

谢谢
4753 次点击
所在节点    MySQL
8 条回复
wog
2013-02-17 01:28:20 +08:00
弄成两列,“左右为难”作主键,跟“应付自如~~~得心应手~~~左右逢源”分开
napoleonu
2013-02-17 01:52:26 +08:00
我建议你还是想办法把这些数据做成一对多,多对多形式的“源关系数据”,可能很大,但不一定要实时查询。

之后如果为了查询速度可以在“源关系数据”基础上跑一遍对“词语表”生成两个冗余列,一列存所有近义词,一列存所有的反义词。或者使用mc,redis什么的缓存起来。

随着你词库越来越大,这样的“源关系数据”维护起来方便还干净,重新生成冗余列或者缓存也方便。
alexrezit
2013-02-17 09:09:43 +08:00
都是多对多吧...
ergatea
2013-02-17 10:22:49 +08:00
tags
est
2013-02-17 11:45:17 +08:00
其实这个用bitset做很方便,可惜没有对bitset优化的数据库。。。
ljbha007
2013-02-17 12:12:41 +08:00
两张表 表1 words: word_id, word, group_id
表2 antonyms: antonyms_id, group_id1, group_id2
表3(可选) groups: group_id

每个词都有一个对应的近义词组 意思相反的词组之间一一对应 对应关系在表2中体现
y051313
2013-02-17 14:09:43 +08:00
@ljbha007
等于说你把每个词都放在words表里面,然后里面记录它属于哪个group_id,也就是同义词组。然后在antonyms表里面记录反义词组对,对吗?

group和words是1:1还是1:N?
ljbha007
2013-02-20 20:33:43 +08:00
@y051313 几天没上 刚看到 group 和words是1:N

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/60480

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX