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数组实际上将关键字作为其键而不是其值