从数据库中的文本中查找包含单词的句子
Find a sentence that contains a word in text from database
我想用一个例子来解释我想要完成的事情。假设我的 posts
table.
中有两行
It snows a lot in winter in Norway. While it barely snows where I live.
I run four miles every morning. I am trying to get fit.
当我搜索in winter
时,我想得到句子It snows a lot in winter in Norway.
我知道我可以通过以下方式获得这一行:
$posts = \App\Models\Post::where('body', 'like', "%{in winter}%")->get();
但我不确定如何得到准确的句子。
虽然在技术上可能使用 SQL
来获取准确的句子,但您最好使用 PHP 从集合中获取准确的句子。
我创建了一个使用集合的示例(因为您正在使用 Laravel),从您提供的 Post 查询开始(尽管我确实从 like 字符串中删除了大括号)。
1.获取正文为搜索查询的帖子集合
$posts = Post::where('body', 'like', "%in winter%")->get();
2。将帖子集合映射到单个句子。展平以删除空句子。
$postSentences = $posts->map( function($post) {
// preg split makes sure the text is splitted on . or ! or ?
return preg_split('/\.|\?|!/', $post->body);
})->flatten();
3。使用过滤器和 Str::contains()
获取相应的句子
$matchingSentences = $postSentences->filter( function($sentence) {
return Str::contains($sentence, 'in winter');
});
$matchingSentences
应该 return:
Illuminate\Support\Collection
all: [
"It snows a lot in winter in Norway",
],
}
示例可能会根据您的需要进行更改/缩短。但这应该可以解决上述问题。
我想用一个例子来解释我想要完成的事情。假设我的 posts
table.
It snows a lot in winter in Norway. While it barely snows where I live.
I run four miles every morning. I am trying to get fit.
当我搜索in winter
时,我想得到句子It snows a lot in winter in Norway.
我知道我可以通过以下方式获得这一行:
$posts = \App\Models\Post::where('body', 'like', "%{in winter}%")->get();
但我不确定如何得到准确的句子。
虽然在技术上可能使用 SQL
来获取准确的句子,但您最好使用 PHP 从集合中获取准确的句子。
我创建了一个使用集合的示例(因为您正在使用 Laravel),从您提供的 Post 查询开始(尽管我确实从 like 字符串中删除了大括号)。
1.获取正文为搜索查询的帖子集合
$posts = Post::where('body', 'like', "%in winter%")->get();
2。将帖子集合映射到单个句子。展平以删除空句子。
$postSentences = $posts->map( function($post) {
// preg split makes sure the text is splitted on . or ! or ?
return preg_split('/\.|\?|!/', $post->body);
})->flatten();
3。使用过滤器和 Str::contains()
获取相应的句子$matchingSentences = $postSentences->filter( function($sentence) {
return Str::contains($sentence, 'in winter');
});
$matchingSentences
应该 return:
Illuminate\Support\Collection
all: [
"It snows a lot in winter in Norway",
],
}
示例可能会根据您的需要进行更改/缩短。但这应该可以解决上述问题。