我正在从事内容重写程序,基本上它将用同义词替换单词.
id int(11)
keyword varchar(50)
synonyms varchar(255)
条目看起来像这样:
50 slake abate,slack,decrease,lessen,minify
51 abate slake,slack,decrease,lessen,minify
52 slack slake,abate,decrease,lessen,minify
53 decrease slake,abate,slack,lessen,minify
54 lessen slake,abate,slack,decrease,minify
55 minify slake,abate,slack,decrease,lessen
因此,我的第一个想法是首先获取文本中的每个单词进行重写(忽略黑名单中的某些关键字),然后进行SQL查询以查看数据库中是否存在该单词的同义词.但是,如果我有一个包含1000个单词的文本,那么1000个SQL查询会太多吗?另外,某些同义词有2个单词(例如“ throw away”),所以我最终要做的查询要比文本中的单词多得多.
有没有更好的方法来实现这一目标?
解决方法:
这是否可以更好地建模为规范化模式:
Word Table:
id int(11)
word varchar(50)
Synonym Table
WordId int(11)
SynonymId int(11)
然后,一个单词的同义词为:
Select W2.Word
from SynonymTable S
join WordTable W on S.WordId = W.Id
join WordTable W2 on S.SynonymId = W2.Id
where W.word = 'slake'
在WordTable(Word),SynonymTable(WordId)和SynonymTable(SynonymId)上创建索引
使用此方法的原因有很多:
>灵活:每个单词的同义词数量没有限制
>高效:由于规范化,行的大小非常小,因此每个数据库页面可容纳许多行,从而使更多的页面适合可用内存