你好,我正在为完整的单词创建一个单词rhymer,但我坚持逻辑。
我将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) :
输出我正在寻找:
我已经尝试更改LIKE'%ove',但是会生成一个正确和错误匹配的列表,其中包含来自word列的类似后缀,因为它忽略了相应的arpabet。
任何帮助都会很棒。
答案 0 :(得分: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");
打破它:
REPLACE(REPLACE(REPLACE(
将消除任何声音中的0,1,2。因为你不想与数字相匹配(压力)。看起来有点难看,但它完成了。substring_index(arpabet, ' ', -2)
保持不变,但现在它在REPLACE中。