我正在开发内容重写器,基本上它将用同义词替换单词。
我在 mySQL 数据库中有同义词,该表包含 3 列
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 个词(比如“扔掉”),所以我最终可能不得不做比文本中的词更多的查询。
有没有更好的方法来实现这一点?
最佳答案
这不是更好地建模为规范化模式吗:
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) 上创建索引
使用这种方法有几个原因:
- 灵活:每个单词的同义词数量没有限制
- 高效:由于归一化,行的大小非常小,每个数据库页面都适合很多行,从而使更多页面适合可用内存
关于php - 我需要为文本中的每个关键字进行一个 sql 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982112/