【发布时间】:2010-09-23 08:49:21
【问题描述】:
我有两个包含公司名称的文本块。两者都包含数百家公司的名称,较新的列表有更多公司。如何从两个列表中删除重复的公司名称,以便只留下新名称? 示例文本块一:
Company Name One, Address line 1, line 2, phone, email
..
Random text
..
Company Name Two
Address, Phone,email
..
Random text
..
Company Name 3
Address, Phone,email
示例文本块二:
..Random Text..
M/s Company Name One Extra Random Text, Address line 1, line 2, phone,
..random text...
M/s Company Name Two
Address, Phone
...
公司名称、地址等相似不一样。第二个块在所有公司名称前都有 M/s 字样。 我想在 php 中执行此操作,也许使用正则表达式。
我想输出匹配的公司名称,例如。在上面给出的示例中,我想输出公司名称:公司名称一,公司名称二对于两个测试块都是通用的。
更新:感谢@Wrikken,我有两个字符串中的文本。我可以使用 M/s 炸开第二个方块,并得到一个数组。然后如何检查该数组中的每个项目以匹配第一个长字符串的文本块?
虽然,我已经手动完成了这项工作,但我仍然想知道如何比较两个文本块的相似性以及赏金。
更新:@Joyce Babu 代码的输出
..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. ..Random Text.. M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, M/s Company Name One Extra Random Text, Address line 1, line 2, phone, ..random text... ..random text... ..random text... ..random text... ..random text... ..random text... ..random text... ..random text... ..random text... ..random text... M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two M/s Company Name Two Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone Address, Phone ... ... ... ... ... ... ... ... ... ... ... ...
@nikic 的输出
array(2) { [0]=> string(17) "..Random Text.. " [4]=> string(16) "Address, Phone " }
@Joyce Babu 第二篇文章的输出
andom Text..andom Text..andom Text..andom Text..andom Text..andom Text..andom Text..andom Text..andom Text..andom Text..Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,Company Name One Extra Random Text, Address line 1, line 2, phone,andom text...andom text...andom text...andom text...andom text...andom text...andom text...andom text...andom text...andom text...Company Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name TwoCompany Name Tworess, Phoneress, Phoneress, Phoneress, Phoneress, Phoneress, Phoneress, Phoneress, Phoneress, Phoneress, Phone
@Joyce Babu 最终代码
<?php
set_time_limit(500);
$arOld = file('olddata.txt');
$arNew = file('newdata.txt');
$G=0;
$c=0;
foreach($arNew as $line){
if(substr($line, 0, 4) == 'M/s '){
$c++;
echo "<BR/>".$c.".)";
$line = trim(substr($line, 4));
foreach($arOld as $old){
similar_text($line, $old, $percentage);
if ($percentage > 80){
continue;
}
}
echo $line;
}else{
$G++;
}
}
echo "<br/>".$G . " DID NOT MATCH";
?>
@Joyce Babu 的输出最终代码
1.)Company Name One Extra Random Text, Address line 1, line 2, phone,
2.)Company Name Two
4 DID NOT MATCH
【问题讨论】:
-
这两个文本块看起来与您的示例文本中的完全一样吗?如果是这样,你想保留什么?你想删除什么?如果不是这种情况,我认为您应该发布一些与您的两个文本块完全相同的示例文本。如果你愿意,我也许可以帮助你。
-
@matsolof。我已经更新了问题
-
每条记录一行?它们可以是两条记录之间的随机数据行吗?
-
有些记录是多行的,没有顺序或统一性,文本块唯一的共同点是公司名称。
-
块 1 中使用什么标记来指示公司名称的开始?你怎么知道这是公司名称而不是随机文本?
标签: php regex comparison diff