gpt4 book ai didi

php - 数组值与字符串 PHP 的匹配

转载 作者:可可西里 更新时间:2023-11-01 00:51:57 25 4
gpt4 key购买 nike

我正在做一个小项目,我需要一些帮助。我有一个包含 150,000 行的 CSV 文件(每行有 10 列数据)。我正在使用 fscvread 读取文件,在循环期间我想将每行的其中一列(称为 stringx)与 10,000 个单词的数组进行匹配。如果 stringx 中存在 10,000 个单词中的任何一个,则使用 preg_replace 将其删除。

现在这一切都很好。我一切正常,但问题是它太慢了。

我尝试了两种方法来匹配数组。1) 我使用 explode("", $stringx) 将 stringx 转换为数组,然后使用 array_diff($array_stringx, $array_10000);2) 在 $array_10000 上使用 foreach 并在 $stringx 上使用 preg_replace

方法 1 大约需要 60 秒来遍历 200 行数据,方法 2 可以在 60 秒内循环 500 行。

有更好的方法吗?

再一次,我正在寻找一种有效的方法(基本上)一次对 10,000 个单词的数组与 150,000 个字符串进行 array_diff。

非常感谢您的帮助。

最佳答案

以下只是备选方案。它可能会也可能不会满足您的要求。

它在我的笔记本电脑上使用 10k 单词字典和 15k 字符串执行 84 次操作/秒。

缺点是它不会删除单词周围的空格。

$wordlist 只是每行一个单词,可以是一个文件。

$dict = array_flip(preg_split('/\n/',$wordlist));

function filter($str,$dict) {
$words = preg_split('/\s/',$str);
sort($words);
$words = array_unique($words);

foreach ($words as $word) {
if (key_exists($word,$dict)) {
$removeWords[] = '/\b' . $word . '\b/';
}
}
return preg_replace($removeWords, '', $str);
}

另一个执行速度更快的示例(107ops/s,15kb 字符串和 10k 单词字典)

function filter2($str,$dict) {
$words = preg_split('/\b/',$str);
foreach ($words as $k => $word) {
if (key_exists($word,$dict)) {
unset($words[$k]);
}
}
return implode('', $words);
}

关于php - 数组值与字符串 PHP 的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com