每天我都会从不同的公司获得几个包含产品信息的excel文件,并且通过产品名称将产品与我自己的数据库匹配的唯一方法。这些公司没有组织,产品名称是手工输入的,可能会在同一个excel文件中有所不同。
找到与我自己的产品列表最匹配的最佳方法是什么?有时公司A可能会称之为“玩具车”和“玩具车100”。在我不关心它是哪个号码的地方,我只是称之为“玩具车”#34;。然而,有时他们可能会称之为不同的东西,例如"提供玩具作为汽车"然后我需要将它与我的玩具车相匹配"产品
进行字符串匹配的最佳方法是什么,基本上我想匹配最相似的字符串。
我当前的实现涉及编写许多这样的if语句,当变体无法正确匹配时创建新的if语句。
foreach ($prodset as $p) {
if (strpos(strtolower($dd['offer_name']), strtolower($p['prod_info'])) !== false && $p['active'] == 1) {
$dd['product_id'] = $p['prod_id'];
$result = $dd;
return $result;
}
}
答案 0 :(得分:1)
您可以使用similar_text函数来计算两个字符串之间的相似度。
<?php
$base = 'Toy car';
$variations = array(
'Provision for toy that is a car',
'Toy that looks like a car',
'Toy Car',
'Toy CAR'
);
foreach($variations as $variation) {
echo "{$base} and {$variation} = " . similar_text($base, $variation);
}
因此它会以区分大小写的方式匹配字符,您可以strtolower
两个字符串以获得更好的结果。
请注意,复杂度为O(N**3)
,其中N是最长字符串的长度。
答案 1 :(得分:0)
也可以使用strpos(),你只需要添加额外的条件你要检查多少个单词。逻辑是这样的,
$str = "Toy car";
$splits = split(" ",$str);
if ( strpos($splits[0]) !== false && strpos($splits[1]) !== false ){
echo "found";
}