2013-12-19 96 views
2

這是一個非常基本的例子,即時消息試圖做的事情。用字符串中的同義詞代替單詞

我有這個字符串。

$text = 'stackoverflow is intelligent';

移除停止詞

$stopwords=array(
    'is', 
    'the', 
); 

$text = preg_replace($stopwords, "", $text);` 

輸出:

計算器智能

後通過空間

爆炸字符串

$text = explode(" ", $text);

輸出在陣列:

計算器,智能

現在我有2個字

$text[0]; // stackoverflow

$text[1]; // intelligent

在我的sql數據庫中,我有3個colums。第一個是單詞,第二個是她的同義詞,第三個是單詞leng的最短同義詞。像這樣:

word   synonym shortsynonym 

intelligent clever smart    

這是問題的最困難的部分:

第一步是檢查從字符串words在數據庫 的代名詞在這種情況下,我們必須檢查

$text[0]; // stackoverflow

$text[1]; // intelligent

檢查都WE R之後因爲$text[0]; // stackoverflow dosent有一個同義詞,所以我們按原樣離開。並且$text[1]; // intelligent的結果爲正值。

檢查後,我想在這種情況下與她的同義詞執行數據庫和replace搜索詞intelligent,並ifwordshortest synonymshortestif字dosent有一個同義詞保留原樣更換。

possibility1: output: 'stackoverflow is smart' 
possibility2: output: 'stackoverflow is clever' 
possibility3: output: 'stackoverflow is intelligent' 
在這種情況下

返回輸出將是後:

output: `stackoverflow is smart` 

(也許這是不是一個真正的問題要問在這裏,但你從將不勝感激任何幫助。和對不起我的英文不好)

+1

那麼究竟是什麼*不*工作? –

+0

那麼,你想讓整個程序達到這個目標? –

+0

我不知道如何在數據庫中執行搜索。第一步:檢查一個詞是否有同義詞,如果不是,則按原樣保留。步驟2:在步驟1中檢查並且結果爲肯定後,進行替換。 – mwweb

回答

0

檢查我要在數據庫中執行搜索,並在 取代這種情況下,聰明的她同義詞詞後,如果字有 最短的代名詞最短取代,如果單詞劑量具有 ,則同義詞保持原樣。

根據您在上面介紹的邏輯,相應的SQL將是:

$sql = "SELECT 
`word`, 
IF(NOT ISNULL(`shortsynonym`), `shortsynonym`, IFNULL(`synonym`, `word`)) as replacement 
FROM words 
WHERE `word` IN ('stackoverflow', 'intelligent')"; 

沒有測試過,但上面的應該可以幫助你......

0

與問題該程序的設計或寫入查詢的實際機制?

如果是設計,如果它很小,可能需要考慮「同義詞庫」的大小,在程序開始時查詢數據庫並將結果加載到鍵值數組中可能更有意義。然後你可以使用數組而不是每次請求都打你的數據庫。它也應該加快程序。

如果問題在於編寫sql查詢,您可能需要花時間在項目上閱讀一些教程。我會爲你的查詢推薦PDO PHP 5.4,如果你瞭解它,它會使你的查詢變得簡單。

PDO PHP API

相關問題