Php 如何检查句子中是否存在关键字集?

Php 如何检查句子中是否存在关键字集?,php,algorithm,Php,Algorithm,我试着检查这个关键词是否存在于某个句子中。 如果关键字只有一个,则很容易确定是否匹配。 但是,如果给出了一个大的关键字集,则需要花费太多的时间才能找到。所以我找到了一个需要线性时间才能找到的算法。 但是算法没有帮助。因为它比使用strpos函数需要更多的时间。 我认为关键字集太大了 这是使用navite php函数实现的 $sentence = "The big brown fox jumps over the lazy dog"; $keywords = array(...); // $key

我试着检查这个关键词是否存在于某个句子中。 如果关键字只有一个,则很容易确定是否匹配。 但是,如果给出了一个大的关键字集,则需要花费太多的时间才能找到。所以我找到了一个需要线性时间才能找到的算法。 但是算法没有帮助。因为它比使用
strpos
函数需要更多的时间。 我认为关键字集太大了

这是使用navite php函数实现的

$sentence = "The big brown fox jumps over the lazy dog";
$keywords = array(...); // $keywords count is about 1,000,000
$keywordsCount = count($keywords);
$isMatched = false;
for ($i = 0; $i < $keywordsCount; $i++) {
    if (strpos($sentence, $keywords[$i])) {
        $isMatched = true;
    }
}
使用aho-corasick算法的速度大约是使用
strpos
php函数的3倍。
如何更快速有效地检查关键字是否匹配?

对于所有帐户,包括官方PHP手册,
strpos()
是迄今为止在另一个字符串中查找字符串的最快方法

直接从手册:

如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反

它比
pregmatch()
快得多,后者在内存方面已经非常高效,甚至比
strstrstr()快得多


我的观点是,我严重怀疑,通过任何方法,你都会发现一个函数或一个算法比原生的
strops()

更快,包括官方的PHP手册,
strops()
是迄今为止在另一个字符串中查找字符串的最快方法

直接从手册:

如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反

它比
pregmatch()
快得多,后者在内存方面已经非常高效,甚至比
strstrstr()快得多


我的观点是,我严重怀疑,通过任何方法,你都会发现一个函数或一个算法比原生的
strops()

更快,包括官方的PHP手册,
strops()
是迄今为止在另一个字符串中查找字符串的最快方法

直接从手册:

如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反

它比
pregmatch()
快得多,后者在内存方面已经非常高效,甚至比
strstrstr()快得多


我的观点是,我严重怀疑,通过任何方法,你都会发现一个函数或一个算法比原生的
strops()

更快,包括官方的PHP手册,
strops()
是迄今为止在另一个字符串中查找字符串的最快方法

直接从手册:

如果您只想确定某个特定的针是否出现在 haystack,使用更快、内存占用更少的函数strpos() 相反

它比
pregmatch()
快得多,后者在内存方面已经非常高效,甚至比
strstrstr()快得多


我的观点是,我严重怀疑,通过任何方法,你都不会找到比本机
strpos()

更快的函数或算法,假设
$keywords
是一个简单的数组

$sentence = "The big brown fox jumps over the lazy dog";
$words = explode(' ', strtolower($sentence));

$keywords = array(...); // $keywords count is about 1,000,000
$keywords_map = array_flip($keywords); // assuming all keywords are already lowercase

$isMatched = false;

foreach ($words as $word) {
    if (array_key_exists($word, $keywords_map)) {
        $isMatched = true;
        break;
    }
}

假设
$keywords
是一个简单的数组

$sentence = "The big brown fox jumps over the lazy dog";
$words = explode(' ', strtolower($sentence));

$keywords = array(...); // $keywords count is about 1,000,000
$keywords_map = array_flip($keywords); // assuming all keywords are already lowercase

$isMatched = false;

foreach ($words as $word) {
    if (array_key_exists($word, $keywords_map)) {
        $isMatched = true;
        break;
    }
}

假设
$keywords
是一个简单的数组

$sentence = "The big brown fox jumps over the lazy dog";
$words = explode(' ', strtolower($sentence));

$keywords = array(...); // $keywords count is about 1,000,000
$keywords_map = array_flip($keywords); // assuming all keywords are already lowercase

$isMatched = false;

foreach ($words as $word) {
    if (array_key_exists($word, $keywords_map)) {
        $isMatched = true;
        break;
    }
}

假设
$keywords
是一个简单的数组

$sentence = "The big brown fox jumps over the lazy dog";
$words = explode(' ', strtolower($sentence));

$keywords = array(...); // $keywords count is about 1,000,000
$keywords_map = array_flip($keywords); // assuming all keywords are already lowercase

$isMatched = false;

foreach ($words as $word) {
    if (array_key_exists($word, $keywords_map)) {
        $isMatched = true;
        break;
    }
}

也许你可以用另一种方式。您可以拆分句子并检查关键字数组中是否存在每个单词,而不是迭代数组中的每个元素。我认为如果你有短句,这会更快。使用strpos()需要多长时间?它需要多快?关键字数组的易变性有多大?是否要在第一次匹配后退出,计算匹配数,返回句子中包含的关键字,或者执行其他操作?或许可以采用其他方法。您可以拆分句子并检查关键字数组中是否存在每个单词,而不是迭代数组中的每个元素。我认为如果你有短句,这会更快。使用strpos()需要多长时间?它需要多快?关键字数组的易变性有多大?是否要在第一次匹配后退出,计算匹配数,返回句子中包含的关键字,或者执行其他操作?或许可以采用其他方法。您可以拆分句子并检查关键字数组中是否存在每个单词,而不是迭代数组中的每个元素。我认为如果你有短句,这会更快。使用strpos()需要多长时间?它需要多快?关键字数组的易变性有多大?是否要在第一次匹配后退出,计算匹配数,返回句子中包含的关键字,或者执行其他操作?或许可以采用其他方法。您可以拆分句子并检查关键字数组中是否存在每个单词,而不是迭代数组中的每个元素。我认为如果你有短句,这会更快。使用strpos()需要多长时间?它需要多快?关键词数组的易变性如何?你想在第一次匹配后退出,计算匹配数,返回句子中包含的关键词,还是其他什么?非常聪明,我喜欢。如果$keywords数组实际上将关键字作为其键而不是其值,那么您的算法将非常快(假设PHP使用哈希表处理键/值数组)。如果$keywords数组实际上将关键字作为其键而不是其值,那么您的算法将非常快(假设PHP使用哈希表处理键/值数组)。如果$keywords数组实际上将关键字作为其键而不是其值