我們正在建立一個幫助臺應用程序來運行我們的服務公司,我試圖找出協助呼叫中心人員根據客戶的問題描述分配一個類別。在數據庫中查找類似的說明PHP/MySQL
我的主要想法是將客戶給出的描述與之前的描述進行比較,並根據最常用的類別使用先前服務調用中使用的類別。
任何想法如何做到這一點?
我的描述字段是一個blob字段,因爲一些描述很長。我寧願找到一種方法來做到這一點,這需要最少的系統資源。
感謝任何輸入:)
邁克
我們正在建立一個幫助臺應用程序來運行我們的服務公司,我試圖找出協助呼叫中心人員根據客戶的問題描述分配一個類別。在數據庫中查找類似的說明PHP/MySQL
我的主要想法是將客戶給出的描述與之前的描述進行比較,並根據最常用的類別使用先前服務調用中使用的類別。
任何想法如何做到這一點?
我的描述字段是一個blob字段,因爲一些描述很長。我寧願找到一種方法來做到這一點,這需要最少的系統資源。
感謝任何輸入:)
邁克
我的自定義代碼的人;如果你使用大的,臃腫的系統,我不覺得這項工作是正確的,所以如果你不想自己編寫代碼,那麼就用一點鹽吧。然而,這可能並不像你所做的那麼難;是的,我肯定會使用標記系統。但是,它不一定非常複雜。
這是我將如何處理它:
首先,用3個表的數據庫;一個用於類別,標籤和「鏈接」(類別和標籤之間的鏈接)。
然後,創建一個初始化數組的PHP函數(空白工作正常),並推送新的(小寫)單詞(如果它們不存在)。一個例子可能是:
<?php
// Pass the new description to this
// function.
function getCategory($description)
{
// Lowercase it all
$description = strtolower($description);
// Kill extra whitespace
$description = trim($description);
$description = preg_replace('~\s\s+~', ' ', $description);
// Kill anything that isn't a number or a letter
// NOTE: This is untested, so just edit this however you'd like to make it work. The
// idea is to just eliminate everything that isn't a letter or number. Just don't take out
// spaces; we need them!
$descripton = trim($description, "[email protected]#$%^&*()_+-=[]{};:'\"\\\n\r|<>?,./");
// Now the description should just contain words with a single space in between them.
// Let's break them up.
$dict = explode(" ", $description);
// And find the unique ones...
$dict = array_unique($dict, SORT_STRING);
// If you wanted to, you could trim either common words you specify,
// or any words under, say, 4 characters. Up to you!
return $dict;
}
?>
接下來,填充你想要的數據庫;做一些類別和一些標記,然後將它們鏈接在一起(如果你想獲得幻想,切換MySQL的引擎InnoDB和做的關係。使事情變得有點快!)
Table `Categories`
|-------------------------|
| Column: Category |
| Rows: |
| Food |
| Animals |
| Plants |
| |
|-------------------------|
Table `Tags`
|-------------------------|
| Column: Tag |
| Rows: |
| eat |
| hamburger |
| meat |
| leaf |
| stem |
| seed |
| fur |
| hair |
| claws |
| |
|-------------------------|
Table `Links`
|-------------------------|
| Columns: tag, category |
| Rows: |
| eat, Food |
| hamburger, Food |
| meat, Food |
| leaf, Food |
| leaf, Plant |
| stem, Plant |
| fur, Animals |
| ... |
|-------------------------|
通過使用MySQL的InnoDB的關係,鏈接表將不會佔用更多的空間通過創建行;這是因爲他們是鏈接,在某種程度上,都是通過引用存儲的。這將極大地減少數據庫大小。
現在,對於踢球者,一個聰明的MySQL數據庫查詢,其步驟如下:
這會給你一個很好的匹配計數最高的類別列表。您想如何製作MySQL查詢取決於您。
雖然這看起來像很多設置,但它確實不是。您最多有3個表格,一個或兩個PHP函數和一些MySQL查詢。數據庫將只有類別,標籤和對兩者的引用(在鏈接表中;引用不佔用太多空間!)
要更新數據庫, t存在於標籤數據庫中,並將它們鏈接到您決定分配給描述的類別。這將擴大數據庫的標籤範圍,隨着時間的推移,您的數據庫將更加適合您的描述(即更準確)。
如果你想獲得真正詳細,你會插入複製類別和標籤之間鏈接創建排序加權標籤系統的,這將讓你的系統更準確。
好的,所以基本上只需將標籤分配給類別,然後將描述中的標籤計數與標籤的類別計數進行比較。也就是說,如果描述包含標籤(吃,肉,毛),那麼最高可能性就是(食物),因爲它與這兩個詞「連接」,但可能與動物有第二次匹配。 – 2010-12-01 06:04:21