自建分詞服務維護成本高,Discuz! 提供免費的線上中文分詞 API,僅需發送 HTTP 請求即可取得關鍵字。本文封裝一個 dz_segment() 函數,輸入標題與內容,回傳關鍵字陣列,開箱即用。
/**
* Discuz! 在線中文分詞
* @param string $title 標題(必填)
* @param string $content 內容(選填,限長)
* @param string $encode 編碼,預設 utf-8
* @return array|false 關鍵字陣列或 false
*/
function dz_segment($title = '', $content = '', $encode = 'utf-8') {
if ($title == '') return false;
$title = rawurlencode(strip_tags($title));
$content = strip_tags($content);
if (strlen($content) > 2400) {
$content = mb_substr($content, 0, 800, $encode);
}
$content = rawurlencode($content);
$url = "https://keyword.discuz.com/related_kw.html?title={$title}&content={$content}&ics={$encode}&ocs={$encode}";
$xml_array = simplexml_load_file($url);
$result = $xml_array->keyword->result;
$data = [];
foreach ($result->item as $key => $value) {
$data[] = (string)$value->kw;
}
return $data ? $data : false;
}
https://keyword.discuz.com/related_kw.html?title=高三歷史全程復習精品教程&content=&ics=utf-8&ocs=utf-8
<?xml version="1.0" encoding="utf-8"?>
<total_response>
<svalid>36000</svalid>
<keyword>
<info>
<count>1</count>
<errno>0</errno>
<nextuptime>1291287160</nextuptime>
<keep>0</keep>
</info>
<result>
<item>
<kw><![CDATA[高三歷史]]></kw>
</item>
</result>
</keyword>
</total_response>
simplexml_load_file,需開啟 allow_url_fopen 或改用 cURL。ocs 參數控制,建議統一使用 UTF-8。