2017-01-10 67 views
2

你好,我正在为完整的单词创建一个单词韵,但我被困在逻辑上。如何找到与使用mysql的单词的后半部分匹配的部分字符串?

我将cmu字典文本导入了两列,word和arpabet。这是我到目前为止有:

Code: 
Select word, arpabet from cmudict 
where word LIKE "%dove" and substring_index(arpabet, ' ', -2) in 
(Select substring_index(arpabet, ' ', -2) from cmudict); 

Output (1 row returned): 
word arpabet 
'DOVE', 'D AH1 V' 

我要找的字,其arpabet从去年2个间隔符中的“AH1 V”相匹配,以便它会给我的话那声音听起来象列表'DOVE' 而忽略了应力数(AH1,AH2):

输出我在寻找:

  • '奇爱博士', 'STR EY1ñJH大号AH2 V'
  • 'LABOVE' ,'L AH0 B AH1 V'
  • 所有换句话说发音相似,如爱,手套等...

我试图改变LIKE“%奥雅纳”,但是,从这个词产生正确和不正确匹配的列表具有类似后缀因为它忽略了相应的arpabet。

任何帮助将是伟大的。

+0

检查全文索引 – degr

回答

1

如果您试图获得与声音相匹配的单词,那么我相信您应该与arpabet列匹配,而不是与word匹配。

SELECT word, arpabet FROM cmudict 
WHERE REPLACE(REPLACE(REPLACE(substring_index(arpabet, ' ', -2),'0',''),'1',''),'2','') in 
(SELECT REPLACE(REPLACE(REPLACE(substring_index(arpabet, ' ', -2),'0',''),'1',''),'2','') 
FROM cmudict WHERE word = "dove"); 

其分解:

  1. REPLACE(REPLACE(REPLACE(将消除任何声音的0,1,2。因为你不想与数字相匹配(压力)。看起来有点丑,但它完成了。
  2. substring_index(arpabet, ' ', -2)保持不变,但现在它在REPLACE中。
  3. 子查询将获得没有数字的“DOVE”这个词。如果你单独运行这个子查询,应该返回'AH V'。