1. 简介
百度文心一言(Baidu Brain One Piece)是百度提供的一个免费的文本生成API,能够随机生成不同类型的短句,如情话、鸡汤、搞笑等。在实际的开发中,我们可以使用该API来增加一些趣味性和人性化的内容,例如网页中的一些个性化提示、情感化的反馈等。
本文将详细介绍如何使用PHP来连接百度文心一言API,并通过自定义排序和过滤方法,获取特定类型句子。
2. 连接百度文心一言API
在使用百度文心一言API之前,我们需要先申请一个API的密钥,申请地址为:https://ai.baidu.com/ai-doc/BODY/bk20z293r
申请完密钥后,我们可以使用以下代码来连接百度文心一言API:
/**
* 获取百度文心一言API返回的内容
*
* @param string $type 返回句子的类型(默认为null,表示随机返回各类句子)
* @param float $temperatue 返回句子的主题偏好度(0~1之间的小数,值越接近1,返回的句子与指定类型越贴切)
* @return string
*/
function getOnePiece($type = null, $temperature = 0.5) {
$url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/realtime_generation?access_token=' . ACCESS_TOKEN;
$data = [
'model_id' => '1',
'prompt' => $type,
'temperature' => $temperature,
'max_word' => '50'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output, true);
return $output['data']['generation'][0]['content'];
}
上述代码中,我们首先定义了一个名为getOnePiece的函数,该函数接受两个参数:句子类型和温度参数。然后定义了要访问的API地址、发送到API的参数。使用curl库向API发起请求,并获取返回的内容。
3. 获取特定类型的句子
通过调用getOnePiece函数,我们可以获取到各类随机生成的句子。但是,在实际应用中,我们常常需要获取特定类型的句子。
例如,我们需要获取所有情话类型的句子。我们可以使用以下代码实现:
$type = '情话';
$content = getOnePiece($type);
上述代码中,我们首先指定了$type为“情话”,然后调用了getOnePiece函数,并将$type作为参数传入。调用结果即为符合指定类型的句子。
4. 自定义排序方法
接下来,我们需要将获取到的句子按照指定的要求排序。为了方便演示,我们以句子长度为排序依据。
我们可以定义一个自定义的排序方法,实现对获取到的句子按照长度从小到大排序:
/**
* 自定义排序方法
*
* @param string $a 待比较的字符串a
* @param string $b 待比较的字符串b
* @return int
*/
function sortByLength($a, $b) {
$alen = mb_strlen($a);
$blen = mb_strlen($b);
if ($alen == $blen) {
return 0;
}
return ($alen > $blen) ? 1 : -1;
}
上述代码中,我们定义了一个名为sortByLength的函数,用于比较两个字符串的长度,返回值为比较结果的整数值。
5. 自定义过滤方法
我们可能希望获取到符合指定类型的句子中,过滤掉某些不需要的内容。
例如,在获取到的情话类型的句子中,我们希望过滤掉“我爱你”等常见用语,以获得更多新颖的内容。我们可以编写一个自定义的过滤方法,过滤掉包含指定词汇的句子。
/**
* 自定义过滤方法
*
* @param string $content 待过滤的字符串
* @param array $filter 包含需要过滤的关键词的数组
* @return bool
*/
function filterContent($content, $filter) {
foreach ($filter as $value) {
if (mb_strpos($content, $value) !== false) {
return true;
}
}
return false;
}
上述代码中,我们定义了一个名为filterContent的函数,该函数接收两个参数:待过滤的字符串和需要过滤的关键词的数组。函数通过循环判断待过滤字符串是否包含需要过滤的关键词,若包含则返回true,即该句子需要被过滤掉。
6. 完整代码实现
在上述基础上,我们可以继续完善我们的获取特定类型句子、排序和过滤的代码:
/**
* 获取符合类型、排序和过滤要求的句子
*
* @param string $type 返回句子的类型(默认为null,表示随机返回各类句子)
* @param int $num 返回句子的数量
* @param bool $filter 是否过滤
* @param array $words 过滤用的关键词
* @return array
*/
function getSpecialOnePiece($type = null, $num = 10, $filter = true, $words = []) {
$pieces = [];
while (count($pieces) < $num) {
$content = getOnePiece($type);
if (!$filter || !filterContent($content, $words)) {
$pieces[] = $content;
}
}
usort($pieces, 'sortByLength');
return $pieces;
}
$type = '情话';
$num = 10;
$filter = true;
$words = ['我爱你', '亲爱的'];
$pieces = getSpecialOnePiece($type, $num, $filter, $words);
foreach ($pieces as $piece) {
echo '<p>' . $piece . '</p>';
}
上述代码中,我们先定义了一个名为getSpecialOnePiece的函数,该函数用于获取符合类型、排序和过滤要求的指定数量的句子。该函数接受四个参数:句子类型、数量、是否进行过滤和过滤用的关键词数组。
在函数内部,我们使用while循环不断调用getOnePiece函数,直到获取到指定数量的句子为止。在每次获取到的句子中,我们将是否过滤标志和关键词数组传入filterContent函数,并根据返回结果决定是否将该句子加入结果数组。
最后,我们调用usort函数对结果数组按照字符串长度排序,并返回该数组。
在主函数中,我们首先指定了用于获取句子的类型、数量和过滤内容的关键词数组。然后调用getSpecialOnePiece函数,获取符合条件的指定数量的句子。最后,使用foreach循环遍历结果数组,并以段落的方式展示每个句子。
7. 总结
本文介绍了如何使用PHP连接百度文心一言API,并通过自定义排序和过滤方法,获取特定类型句子。我们通过编写一个自定义的排序方法,实现按照字符串长度排序;通过编写一个自定义的过滤方法,实现过滤字符串中包含指定词汇的句子。
在实际应用中,可以通过调整排序和过滤方法,实现更加灵活的文本筛选和处理。