2015-05-10 68 views
1

我有兩個mysql表tradecurrent。這兩個表具有相同的產品,但其名稱/屬性格式不相同。不同格式的同一文本的字符串匹配

我正在嘗試做一個字符串匹配。例如;

貿易表

$trade_name = "LIGUSTRUM JONANDRUM 3 Balls + 3 Stems"; 
    $trade_attribute = "Total H. 140/ 160"; 

當前表

$our_name = "Ligustrum Jonandrum (3 Balls/Pom Poms)"; 
$our_attribute = "Height (cm): 140 - 160 (cm)"; 

我可以很容易地爲這個做str_replace函數的個體,但我有超過1000行和格式並不一致。我需要一個函數來將商品名稱/屬性與current表格中的對應商品進行匹配。因爲我將提取交易價格並將其與current表中的價格進行匹配。

我該如何解決這個問題?

+0

我不認爲這是可以以合理的方式來回答,因爲從另一種格式的轉換是不平凡的,可能唯一的每個名稱和屬性。如你所述,*「格式不一致」*。但是你需要至少某種一致性來以編程方式表達它(除非你發明了人工智能或其他東西)。我們只能告訴你一些方法來做這個具體的例子,但我想這不是你問題的重點。 – Quasdunk

+0

只有格式不一致。名稱和屬性總是在兩者中。不管是在首都還是在括號內等。 – user892134

+0

所以文本總是一樣的嗎?對不起,我不太明白 - 也許你可以展示更多的數據集。 – Quasdunk

回答

0

字符串不一致是事實。所以相似性不是確定的。您只能生成一個統計算法來爲相似性結果產生最大的準確性,並冒最大接受率的風險。 STH這樣的:

<?php 
function replace($string){ 
return strtolower(str_replace(str_split('\\/:*+/()-."<>|'),'',$string)); 
} 

$trade_name = "LIGUSTRUM JONANDRUM 3 Balls + 3 Stems"; 
$trade_attribute = "Total H. 140/ 160"; 

$our_name = "Ligustrum Jonandrum (3 Balls/Pom Poms)"; 
$our_attribute = "Height (cm): 140 - 160 (cm)"; 

$trade_sum=replace($trade_name).replace($trade_attribute); 

    $our_name_sum=replace($our_name).replace($our_attribute); 

$first_array = explode(' ', $trade_sum); 
$second_array = explode(' ', $our_name_sum); 

$array_differences= array_diff($first_array, $second_array); 
$different_entries = count($array_differences); 

$total_entries = count($first_array); 
$similarity = 100-($different_entries/$total_entries) * 100; 
echo $similarity.'%'; 

//in your case we get 80% similarity