gpt4 book ai didi

php - 如何在文本开头查找短语(单词)

转载 作者:行者123 更新时间:2023-11-29 13:18:21 27 4
gpt4 key购买 nike

如何在文本开头查找短语(单词)

我需要非常快速的解决方案来查明文本是否以某些已知短语开头

我在 Mysql (innodb) 表中的短语如下:

CREATE TABLE IF NOT EXISTS `phrase` (
`id` int(10) unsigned NOT NULL,
`text` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `text` (`text`)
) ENGINE=InnoDB;

INSERT INTO phrase VALUES (1, 'one');
INSERT INTO phrase VALUES (2, 'one two');
INSERT INTO phrase VALUES (3, 'two');
INSERT INTO phrase VALUES (4, 'three');

短语文本是一个或多个单词。表包含大约 20.000 行

现在我从用户请求中获取文本,并需要知道该文本是否像任何短语一样开头。但我需要找出数据库中最长的短语

我应该将行预先缓存到服务器内存中,或者我可以在 mysql 表中搜索。

我试过了

 $_REQUEST['text'] = 'one two three';
$_REQUEST['text'] = explode(' ', $_REQUEST['text']);
$search = ''; $found = null;
foreach ($_REQUEST['text'] as $next_word) {
$search .= (($search == '') ? '' : ' ').$next_word;
$query = "SELECT SQL_CACHE * FROM phrase WHERE phrase = '{$search}' LIMIT 1;";
...
$row = mysql_fetch_assoc($result);
if ( ... not found ... ) break;
else $found = $row;
}
print_r($row); // print latest found phrase "one two"

我认为这种方式很慢,因为我需要对每个单词进行全表扫描

您知道更快的解决方案吗?

最佳答案

相反

$query = "SELECT SQL_CACHE * FROM phrase WHERE phrase = '{$search}' LIMIT 1";

你可以这样做:

$query = "SELECT SQL_CACHE * FROM phrase WHERE phrase like '%{$search}%' LIMIT 1";

或者另外,您可以像这样减少代码:

$count = count($_REQUEST['text']);
$where = "";
for($loop=0;$count<$loop;$loop++) {
if($loop!=($count-1))
$where .= "phrase like '%".$_REQUEST['text'][$loop]."%' OR";
else
$where .= "phrase like '%".$_REQUEST['text'][$loop]."%'";
}
$query = "SELECT SQL_CACHE * FROM phrase WHERE $where LIMIT 1;";

关于php - 如何在文本开头查找短语(单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184539/

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