2017-01-10 38 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'。