Giter Site home page Giter Site logo

fukuball / jieba-php Goto Github PK

View Code? Open in Web Editor NEW
1.3K 55.0 258.0 39.31 MB

"結巴"中文分詞:做最好的 PHP 中文分詞、中文斷詞組件。 / "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best PHP Chinese word segmentation module.

Home Page: http://jieba-php.fukuball.com

License: MIT License

PHP 100.00%
nlp natural-language-processing chinese-text-segmentation machine-learning

jieba-php's Introduction

Build Status codecov.io Latest Stable Version Codacy Badge Made with Love

"結巴"中文分詞:做最好的 PHP 中文分詞、中文斷詞組件,目前翻譯版本為 jieba-0.33 版本,未來再慢慢往上升級,效能也需要再改善,請有興趣的開發者一起加入開發!若想使用 Python 版本請前往 fxsjy/jieba

現在已經可以支援繁體中文!只要將字典切換為 big 模式即可!

"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best PHP Chinese word segmentation module.

Scroll down for English documentation.

線上展示

Feature

  • 支持三種分詞模式:

  • 1)默認精確模式,試圖將句子最精確地切開,適合文本分析;

  • 2)全模式,把句子中所有的可以成詞的詞語都掃描出來,但是不能解決歧義。(需要充足的字典)

    1. 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。
  • 支持繁體斷詞

  • 支持自定義詞典

Usage

  • 自動安裝:使用 composer 安裝後,透過 autoload 引用

代碼示例

composer require fukuball/jieba-php:dev-master

代碼示例

require_once "/path/to/your/vendor/autoload.php";
  • 手動安裝:將 jieba-php 放置適當目錄後,透過 require_once 引用

代碼示例

require_once "/path/to/your/vendor/multi-array/MultiArray.php";
require_once "/path/to/your/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once "/path/to/your/class/Jieba.php";
require_once "/path/to/your/class/Finalseg.php";

Algorithm

  • 基於 Trie 樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)
  • 採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
  • 對於未登錄詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 算法
  • BEMS 的解釋 fxsjy/jieba#7

Interface

  • 組件只提供 jieba.cut 方法用於分詞
  • cut 方法接受兩個輸入參數: 1) 第一個參數為需要分詞的字符串 2)cut_all 參數用來控制分詞模式
  • 待分詞的字符串可以是 utf-8 字符串
  • jieba.cut 返回的結構是一個可迭代的 array

功能 1):分词

  • cut 方法接受想個輸入參數: 1) 第一個參數為需要分詞的字符串 2)cut_all 參數用來控制分詞模式
  • cutForSearch 方法接受一個參數:需要分詞的字符串,該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細
  • 注意:待分詞的字符串是 utf-8 字符串
  • cut 以及 cutForSearch 返回的結構是一個可迭代的 array

代碼示例 (Tutorial)

ini_set('memory_limit', '1024M');

require_once "/path/to/your/vendor/multi-array/MultiArray.php";
require_once "/path/to/your/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once "/path/to/your/class/Jieba.php";
require_once "/path/to/your/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init();
Finalseg::init();

$seg_list = Jieba::cut("怜香惜玉也得要看对象啊!");
var_dump($seg_list);

$seg_list = Jieba::cut("我来到北京清华大学", true);
var_dump($seg_list); #全模式

$seg_list = Jieba::cut("我来到北京清华大学", false);
var_dump($seg_list); #默認精確模式

$seg_list = Jieba::cut("他来到了网易杭研大厦");
var_dump($seg_list);

$seg_list = Jieba::cutForSearch("小明硕士毕业于**科学院计算所,后在日本京都大学深造"); #搜索引擎模式
var_dump($seg_list);

Output:

array(7) {
  [0]=>
  string(12) "怜香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "对象"
  [6]=>
  string(3) ""
}

Full Mode:
array(15) {
  [0]=>
  string(3) ""
  [1]=>
  string(3) ""
  [2]=>
  string(6) "来到"
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "北京"
  [6]=>
  string(3) ""
  [7]=>
  string(3) ""
  [8]=>
  string(6) "清华"
  [9]=>
  string(12) "清华大学"
  [10]=>
  string(3) ""
  [11]=>
  string(6) "华大"
  [12]=>
  string(3) ""
  [13]=>
  string(6) "大学"
  [14]=>
  string(3) ""
}

Default Mode:
array(4) {
  [0]=>
  string(3) ""
  [1]=>
  string(6) "来到"
  [2]=>
  string(6) "北京"
  [3]=>
  string(12) "清华大学"
}
array(6) {
  [0]=>
  string(3) ""
  [1]=>
  string(6) "来到"
  [2]=>
  string(3) ""
  [3]=>
  string(6) "网易"
  [4]=>
  string(6) "杭研"
  [5]=>
  string(6) "大厦"
}
(此處,“杭研“並沒有在詞典中,但是也被 Viterbi 算法識別出來了)

Search Engine Mode:
array(18) {
  [0]=>
  string(6) "小明"
  [1]=>
  string(6) "硕士"
  [2]=>
  string(6) "毕业"
  [3]=>
  string(3) ""
  [4]=>
  string(6) "**"
  [5]=>
  string(6) "科学"
  [6]=>
  string(6) "学院"
  [7]=>
  string(9) "科学院"
  [8]=>
  string(15) "**科学院"
  [9]=>
  string(6) "计算"
  [10]=>
  string(9) "计算所"
  [11]=>
  string(3) ""
  [12]=>
  string(3) ""
  [13]=>
  string(6) "日本"
  [14]=>
  string(6) "京都"
  [15]=>
  string(6) "大学"
  [16]=>
  string(18) "日本京都大学"
  [17]=>
  string(6) "深造"
}

功能 2):添加自定義詞典

  • 開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫裡沒有的詞。雖然 jieba 有新詞識別能力,但是自行添加新詞可以保證更高的正確率

  • 用法: Jieba::loadUserDict(file_name) # file_name 為自定義詞典的絕對路徑

  • 詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分為三部分,一部分為詞語,一部分為詞頻,一部分為詞性,用空格隔開

  • 範例:

    云计算 5 n 李小福 2 n 创新办 3 n

    之前: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 / 加載自定義詞庫後: 李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /

說明:"通过用户自定义词典来增强歧义纠错能力" --- fxsjy/jieba#14

功能 3):關鍵詞提取

  • JiebaAnalyse::extractTags($content, $top_k)
  • content 為待提取的文本
  • top_k 為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20
  • 可使用 setStopWords 增加自定義 stop words

代碼示例 (關鍵詞提取)

ini_set('memory_limit', '600M');

require_once "/path/to/your/vendor/multi-array/MultiArray.php";
require_once "/path/to/your/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once "/path/to/your/class/Jieba.php";
require_once "/path/to/your/class/Finalseg.php";
require_once "/path/to/your/class/JiebaAnalyse.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
use Fukuball\Jieba\JiebaAnalyse;
Jieba::init(array('mode'=>'test','dict'=>'small'));
Finalseg::init();
JiebaAnalyse::init();

$top_k = 10;
$content = file_get_contents("/path/to/your/dict/lyric.txt", "r");

$tags = JiebaAnalyse::extractTags($content, $top_k);

var_dump($tags);

JiebaAnalyse::setStopWords('/path/to/your/dict/stop_words.txt');

$tags = JiebaAnalyse::extractTags($content, $top_k);

var_dump($tags);

Output:

array(10) {
  '沒有' =>
  double(1.0592831964595)
  '所謂' =>
  double(0.90795702553671)
  '是否' =>
  double(0.66385043195443)
  '一般' =>
  double(0.54607060161899)
  '雖然' =>
  double(0.30265234184557)
  '來說' =>
  double(0.30265234184557)
  '肌迫' =>
  double(0.30265234184557)
  '退縮' =>
  double(0.30265234184557)
  '矯作' =>
  double(0.30265234184557)
  '怯懦' =>
  double(0.24364586159392)
}
array(10) {
  '所謂' =>
  double(1.1569129841516)
  '一般' =>
  double(0.69579963754677)
  '矯作' =>
  double(0.38563766138387)
  '來說' =>
  double(0.38563766138387)
  '退縮' =>
  double(0.38563766138387)
  '雖然' =>
  double(0.38563766138387)
  '肌迫' =>
  double(0.38563766138387)
  '怯懦' =>
  double(0.31045198493419)
  '隨便說說' =>
  double(0.19281883069194)
  '一場' =>
  double(0.19281883069194)
}

功能 4):詞性分詞

代碼示例 (Tutorial)

ini_set('memory_limit', '600M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
require_once dirname(dirname(__FILE__))."/class/Posseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
use Fukuball\Jieba\Posseg;
Jieba::init();
Finalseg::init();
Posseg::init();

$seg_list = Posseg::cut("这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。");
var_dump($seg_list);

Output:

array(21) {
  [0]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [1]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [2]=>
  array(2) {
    ["word"]=>
    string(6) "一个"
    ["tag"]=>
    string(1) "m"
  }
  [3]=>
  array(2) {
    ["word"]=>
    string(18) "伸手不见五指"
    ["tag"]=>
    string(1) "i"
  }
  [4]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(2) "uj"
  }
  [5]=>
  array(2) {
    ["word"]=>
    string(6) "黑夜"
    ["tag"]=>
    string(1) "n"
  }
  [6]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "x"
  }
  [7]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [8]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [9]=>
  array(2) {
    ["word"]=>
    string(9) "孙悟空"
    ["tag"]=>
    string(2) "nr"
  }
  [10]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "x"
  }
  [11]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [12]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [13]=>
  array(2) {
    ["word"]=>
    string(6) "北京"
    ["tag"]=>
    string(2) "ns"
  }
  [14]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "x"
  }
  [15]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [16]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [17]=>
  array(2) {
    ["word"]=>
    string(6) "Python"
    ["tag"]=>
    string(3) "eng"
  }
  [18]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "c"
  }
  [19]=>
  array(2) {
    ["word"]=>
    string(3) "C++"
    ["tag"]=>
    string(3) "eng"
  }
  [20]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "x"
  }
}

功能 5):切換成繁體字典

代碼示例 (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('mode'=>'default','dict'=>'big'));
Finalseg::init();

$seg_list = Jieba::cut("怜香惜玉也得要看对象啊!");
var_dump($seg_list);

$seg_list = Jieba::cut("憐香惜玉也得要看對象啊!");
var_dump($seg_list);

Output:

array(7) {
  [0]=>
  string(12) "怜香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "对象"
  [6]=>
  string(3) ""
}
array(7) {
  [0]=>
  string(12) "憐香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "對象"
  [6]=>
  string(3) ""
}

功能 5):切換成繁體字典

代碼示例 (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('mode'=>'default','dict'=>'big'));
Finalseg::init();

$seg_list = Jieba::cut("怜香惜玉也得要看对象啊!");
var_dump($seg_list);

$seg_list = Jieba::cut("憐香惜玉也得要看對象啊!");
var_dump($seg_list);

Output:

array(7) {
  [0]=>
  string(12) "怜香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "对象"
  [6]=>
  string(3) ""
}
array(7) {
  [0]=>
  string(12) "憐香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "對象"
  [6]=>
  string(3) ""
}

功能 6):保留日语或者朝鲜语原文不进行过滤

代碼示例 (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('cjk'=>'all'));
Finalseg::init();

$seg_list = Jieba::cut("한국어 또는 조선말은 제주특별자치도를 제외한 한반도 및 그 부속 도서와 한민족 거주 지역에서 쓰이는 언어로");
var_dump($seg_list);

$seg_list = Jieba::cut("日本語は、主に日本国内や日本人同士の間で使われている言語である。");
var_dump($seg_list);

// 加载日语词库可以对日语进行简单的分词
Jieba::loadUserDict("/path/to/your/japanese/dict.txt");
$seg_list = Jieba::cut("日本語は、主に日本国内や日本人同士の間で使われている言語である。");
var_dump($seg_list);

Output:

array(15) {
  [0]=>
  string(9) "한국어"
  [1]=>
  string(6) "또는"
  [2]=>
  string(12) "조선말은"
  [3]=>
  string(24) "제주특별자치도를"
  [4]=>
  string(9) "제외한"
  [5]=>
  string(9) "한반도"
  [6]=>
  string(3) ""
  [7]=>
  string(3) ""
  [8]=>
  string(6) "부속"
  [9]=>
  string(9) "도서와"
  [10]=>
  string(9) "한민족"
  [11]=>
  string(6) "거주"
  [12]=>
  string(12) "지역에서"
  [13]=>
  string(9) "쓰이는"
  [14]=>
  string(9) "언어로"
}
array(21) {
  [0]=>
  string(6) "日本"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "日本"
  [6]=>
  string(6) "国内"
  [7]=>
  string(3) ""
  [8]=>
  string(6) "日本"
  [9]=>
  string(3) ""
  [10]=>
  string(6) "同士"
  [11]=>
  string(3) ""
  [12]=>
  string(3) ""
  [13]=>
  string(3) ""
  [14]=>
  string(3) "使"
  [15]=>
  string(3) ""
  [16]=>
  string(6) "れて"
  [17]=>
  string(6) "いる"
  [18]=>
  string(6) "言語"
  [19]=>
  string(3) ""
  [20]=>
  string(6) "ある"
}
array(17) {
  [0]=>
  string(9) "日本語"
  [1]=>
  string(3) ""
  [2]=>
  string(6) "主に"
  [3]=>
  string(9) "日本国"
  [4]=>
  string(3) ""
  [5]=>
  string(3) ""
  [6]=>
  string(9) "日本人"
  [7]=>
  string(6) "同士"
  [8]=>
  string(3) ""
  [9]=>
  string(3) ""
  [10]=>
  string(3) ""
  [11]=>
  string(3) "使"
  [12]=>
  string(3) ""
  [13]=>
  string(6) "れて"
  [14]=>
  string(6) "いる"
  [15]=>
  string(6) "言語"
  [16]=>
  string(9) "である"
}

功能 7):返回詞語在原文的起止位置

代碼示例 (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('mode'=>'test','dict'=>'big'));
Finalseg::init();

$seg_list = Jieba::tokenize("永和服装饰品有限公司");
var_dump($seg_list);

Output:

array(4) {
  [0] =>
  array(3) {
    'word' =>
    string(6) "永和"
    'start' =>
    int(0)
    'end' =>
    int(2)
  }
  [1] =>
  array(3) {
    'word' =>
    string(6) "服装"
    'start' =>
    int(2)
    'end' =>
    int(4)
  }
  [2] =>
  array(3) {
    'word' =>
    string(6) "饰品"
    'start' =>
    int(4)
    'end' =>
    int(6)
  }
  [3] =>
  array(3) {
    'word' =>
    string(12) "有限公司"
    'start' =>
    int(6)
    'end' =>
    int(10)
  }
}

其他詞典

  1. 佔用內容較小的詞典 https://github.com/fukuball/jieba-php/blob/master/src/dict/dict.small.txt

  2. 支持繁體斷詞的詞典 https://github.com/fukuball/jieba-php/blob/master/src/dict/dict.big.txt

常見問題

  1. 模型的數據是如何生成的? fxsjy/jieba#7
  2. 這個庫的授權是? fxsjy/jieba#2

jieba-php English Document

Online Demo

Feature

  • Support three types of segmentation mode:
    1. Accurate Mode, attempt to cut the sentence into the most accurate segmentation, which is suitable for text analysis;
    1. Full Mode, break the words of the sentence into words scanned
    1. Search Engine Mode, based on the Accurate Mode, with an attempt to cut the long words into several short words, which can enhance the recall rate

Usage

  • Installation: Use composer to install jieba-php, then require the autoload file to use jieba-php.

Algorithm

  • Based on the Trie tree structure to achieve efficient word graph scanning; sentences using Chinese characters constitute a directed acyclic graph (DAG).
  • Employs memory search to calculate the maximum probability path, in order to identify the maximum tangential points based on word frequency combination.
  • For unknown words, the character position HMM-based model is used, using the Viterbi algorithm.
  • The meaning of BEMS fxsjy/jieba#7.

Interface

  • The cut method accepts two parameters: 1) first parameter is the string to segmentation 2)the second parameter cut_all to control segmentation mode.
  • The string to segmentation may use utf-8 string.
  • cutForSearch accpets only on parameter: the string that requires segmentation, and it will cut the sentence into short words
  • cut and cutForSearch return an segmented array.

Function 1) Segmentation

Example (Tutorial)

ini_set('memory_limit', '1024M');

require_once "/path/to/your/vendor/multi-array/MultiArray.php";
require_once "/path/to/your/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once "/path/to/your/class/Jieba.php";
require_once "/path/to/your/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init();
Finalseg::init();

$seg_list = Jieba::cut("怜香惜玉也得要看对象啊!");
var_dump($seg_list);

seg_list = jieba.cut("我来到北京清华大学", true)
var_dump($seg_list); #全模式

seg_list = jieba.cut("我来到北京清华大学", false)
var_dump($seg_list); #默認精確模式

seg_list = jieba.cut("他来到了网易杭研大厦")
var_dump($seg_list);

seg_list = jieba.cut_for_search("小明硕士毕业于**科学院计算所,后在日本京都大学深造") #搜索引擎模式
var_dump($seg_list);

Output:

array(7) {
  [0]=>
  string(12) "怜香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "对象"
  [6]=>
  string(3) ""
}

Full Mode:
array(15) {
  [0]=>
  string(3) ""
  [1]=>
  string(3) ""
  [2]=>
  string(6) "来到"
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "北京"
  [6]=>
  string(3) ""
  [7]=>
  string(3) ""
  [8]=>
  string(6) "清华"
  [9]=>
  string(12) "清华大学"
  [10]=>
  string(3) ""
  [11]=>
  string(6) "华大"
  [12]=>
  string(3) ""
  [13]=>
  string(6) "大学"
  [14]=>
  string(3) ""
}

Default Mode:
array(4) {
  [0]=>
  string(3) ""
  [1]=>
  string(6) "来到"
  [2]=>
  string(6) "北京"
  [3]=>
  string(12) "清华大学"
}
array(6) {
  [0]=>
  string(3) ""
  [1]=>
  string(6) "来到"
  [2]=>
  string(3) ""
  [3]=>
  string(6) "网易"
  [4]=>
  string(6) "杭研"
  [5]=>
  string(6) "大厦"
}
(此處,“杭研“並沒有在詞典中,但是也被 Viterbi 算法識別出來了)

Search Engine Mode:
array(18) {
  [0]=>
  string(6) "小明"
  [1]=>
  string(6) "硕士"
  [2]=>
  string(6) "毕业"
  [3]=>
  string(3) ""
  [4]=>
  string(6) "**"
  [5]=>
  string(6) "科学"
  [6]=>
  string(6) "学院"
  [7]=>
  string(9) "科学院"
  [8]=>
  string(15) "**科学院"
  [9]=>
  string(6) "计算"
  [10]=>
  string(9) "计算所"
  [11]=>
  string(3) ""
  [12]=>
  string(3) ""
  [13]=>
  string(6) "日本"
  [14]=>
  string(6) "京都"
  [15]=>
  string(6) "大学"
  [16]=>
  string(18) "日本京都大学"
  [17]=>
  string(6) "深造"
}

Function 2) Add a custom dictionary

  • Developers can specify their own custom dictionary to include in the jieba thesaurus. jieba has the ability to identify new words, but adding your own new words can ensure a higher rate of correct segmentation.

  • Usage: Jieba::loadUserDict(file_name) # file_name is a custom dictionary path.

  • The dictionary format is the same as that of dict.txt: one word per line; each line is divided into two parts, the first is the word itself, the other is the word frequency, separated by a space.

  • Example:

    云计算 5 李小福 2 创新办 3

    之前: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 / 加載自定義詞庫後: 李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /

Function 3) Keyword Extraction

  • JiebaAnalyse::extractTags($content, $top_k)
  • content: the text to be extracted
  • top_k: to return several TF/IDF weights for the biggest keywords, the default value is 20

Example (keyword extraction)

ini_set('memory_limit', '600M');

require_once "/path/to/your/vendor/multi-array/MultiArray.php";
require_once "/path/to/your/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once "/path/to/your/class/Jieba.php";
require_once "/path/to/your/class/Finalseg.php";
require_once "/path/to/your/class/JiebaAnalyse.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
use Fukuball\Jieba\JiebaAnalyse;
Jieba::init(array('mode'=>'test','dict'=>'small'));
Finalseg::init();
JiebaAnalyse::init();

$top_k = 10;
$content = file_get_contents("/path/to/your/dict/lyric.txt", "r");

$tags = JiebaAnalyse::extractTags($content, $top_k);

var_dump($tags);

Output:

array(10) {
  ["是否"]=>
  float(1.2196321889395)
  ["一般"]=>
  float(1.0032459890209)
  ["肌迫"]=>
  float(0.64654314660465)
  ["怯懦"]=>
  float(0.44762844339349)
  ["藉口"]=>
  float(0.32327157330233)
  ["逼不得已"]=>
  float(0.32327157330233)
  ["不安全感"]=>
  float(0.26548304656279)
  ["同感"]=>
  float(0.23929673812326)
  ["有把握"]=>
  float(0.21043366018744)
  ["空洞"]=>
  float(0.20598261709442)
}

Function 4) Word Segmentation and Tagging

Example (word tagging)

ini_set('memory_limit', '600M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
require_once dirname(dirname(__FILE__))."/class/Posseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
use Fukuball\Jieba\Posseg;
Jieba::init();
Finalseg::init();
Posseg::init();

$seg_list = Posseg::cut("这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。");
var_dump($seg_list);

Output:

array(21) {
  [0]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [1]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [2]=>
  array(2) {
    ["word"]=>
    string(6) "一个"
    ["tag"]=>
    string(1) "m"
  }
  [3]=>
  array(2) {
    ["word"]=>
    string(18) "伸手不见五指"
    ["tag"]=>
    string(1) "i"
  }
  [4]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(2) "uj"
  }
  [5]=>
  array(2) {
    ["word"]=>
    string(6) "黑夜"
    ["tag"]=>
    string(1) "n"
  }
  [6]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "w"
  }
  [7]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [8]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [9]=>
  array(2) {
    ["word"]=>
    string(9) "孙悟空"
    ["tag"]=>
    string(2) "nr"
  }
  [10]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "w"
  }
  [11]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [12]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [13]=>
  array(2) {
    ["word"]=>
    string(6) "北京"
    ["tag"]=>
    string(2) "ns"
  }
  [14]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "w"
  }
  [15]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "r"
  }
  [16]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "v"
  }
  [17]=>
  array(2) {
    ["word"]=>
    string(6) "Python"
    ["tag"]=>
    string(3) "eng"
  }
  [18]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "c"
  }
  [19]=>
  array(2) {
    ["word"]=>
    string(3) "C++"
    ["tag"]=>
    string(3) "eng"
  }
  [20]=>
  array(2) {
    ["word"]=>
    string(3) ""
    ["tag"]=>
    string(1) "w"
  }
}

Function 5):Use Traditional Chinese

Example (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('mode'=>'default','dict'=>'big'));
Finalseg::init();

$seg_list = Jieba::cut("怜香惜玉也得要看对象啊!");
var_dump($seg_list);

$seg_list = Jieba::cut("憐香惜玉也得要看對象啊!");
var_dump($seg_list);

Output:

array(7) {
  [0]=>
  string(12) "怜香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "对象"
  [6]=>
  string(3) ""
}
array(7) {
  [0]=>
  string(12) "憐香惜玉"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "對象"
  [6]=>
  string(3) ""
}

Function 6):Keeping Japanese or Korean original text

Example (Tutorial)

ini_set('memory_limit', '1024M');

require_once dirname(dirname(__FILE__))."/vendor/multi-array/MultiArray.php";
require_once dirname(dirname(__FILE__))."/vendor/multi-array/Factory/MultiArrayFactory.php";
require_once dirname(dirname(__FILE__))."/class/Jieba.php";
require_once dirname(dirname(__FILE__))."/class/Finalseg.php";
use Fukuball\Jieba\Jieba;
use Fukuball\Jieba\Finalseg;
Jieba::init(array('cjk'=>'all'));
Finalseg::init();

$seg_list = Jieba::cut("한국어 또는 조선말은 제주특별자치도를 제외한 한반도 및 그 부속 도서와 한민족 거주 지역에서 쓰이는 언어로");
var_dump($seg_list);

$seg_list = Jieba::cut("日本語は、主に日本国内や日本人同士の間で使われている言語である。");
var_dump($seg_list);

// Loading custom Japanese dictionary can do a simple word segmentation
Jieba::loadUserDict("/path/to/your/japanese/dict.txt");
$seg_list = Jieba::cut("日本語は、主に日本国内や日本人同士の間で使われている言語である。");
var_dump($seg_list);

Output:

array(15) {
  [0]=>
  string(9) "한국어"
  [1]=>
  string(6) "또는"
  [2]=>
  string(12) "조선말은"
  [3]=>
  string(24) "제주특별자치도를"
  [4]=>
  string(9) "제외한"
  [5]=>
  string(9) "한반도"
  [6]=>
  string(3) ""
  [7]=>
  string(3) ""
  [8]=>
  string(6) "부속"
  [9]=>
  string(9) "도서와"
  [10]=>
  string(9) "한민족"
  [11]=>
  string(6) "거주"
  [12]=>
  string(12) "지역에서"
  [13]=>
  string(9) "쓰이는"
  [14]=>
  string(9) "언어로"
}
array(21) {
  [0]=>
  string(6) "日本"
  [1]=>
  string(3) ""
  [2]=>
  string(3) ""
  [3]=>
  string(3) ""
  [4]=>
  string(3) ""
  [5]=>
  string(6) "日本"
  [6]=>
  string(6) "国内"
  [7]=>
  string(3) ""
  [8]=>
  string(6) "日本"
  [9]=>
  string(3) ""
  [10]=>
  string(6) "同士"
  [11]=>
  string(3) ""
  [12]=>
  string(3) ""
  [13]=>
  string(3) ""
  [14]=>
  string(3) "使"
  [15]=>
  string(3) ""
  [16]=>
  string(6) "れて"
  [17]=>
  string(6) "いる"
  [18]=>
  string(6) "言語"
  [19]=>
  string(3) ""
  [20]=>
  string(6) "ある"
}
array(17) {
  [0]=>
  string(9) "日本語"
  [1]=>
  string(3) ""
  [2]=>
  string(6) "主に"
  [3]=>
  string(9) "日本国"
  [4]=>
  string(3) ""
  [5]=>
  string(3) ""
  [6]=>
  string(9) "日本人"
  [7]=>
  string(6) "同士"
  [8]=>
  string(3) ""
  [9]=>
  string(3) ""
  [10]=>
  string(3) ""
  [11]=>
  string(3) "使"
  [12]=>
  string(3) ""
  [13]=>
  string(6) "れて"
  [14]=>
  string(6) "いる"
  [15]=>
  string(6) "言語"
  [16]=>
  string(9) "である"
}

詞性說明

a 形容词 (取英语形容词 adjective 的第 1 个字母。)
  ad 副形词 (直接作状语的形容词,形容词代码 a 和副词代码 d 并在一起。)
  ag 形容词性语素 (形容词性语素,形容词代码为 a,语素代码 g 前面置以 a。)
  an 名形词 (具有名词功能的形容词,形容词代码 a 和名词代码 n 并在一起。)
b 区别词 (取汉字「别」的声母。)
c 连词 (取英语连词 conjunction 的第 1 个字母。)
d 副词 (取 adverb 的第 2 个字母,因其第 1 个字母已用于形容词。)
  df 副词*
  dg 副语素 (副词性语素,副词代码为 d,语素代码 g 前面置以 d。)
e 叹词 (取英语叹词 exclamation 的第 1 个字母。)
eng 外语
f 方位词 (取汉字「方」的声母。)
g 语素 (绝大多数语素都能作为合成词的「词根」,取汉字「根」的声母。)
h 前接成分 (取英语 head 的第 1 个字母。)
i 成语 (取英语成语 idiom 的第 1 个字母。)
j 简称略语 (取汉字「简」的声母。)
k 后接成分
l 习用语 (习用语尚未成为成语,有点「临时性」,取「临」的声母。)
m 数词 (取英语 numeral 的第 3 个字母,n,u 已有他用。)
  mg 数语素
  mq 数词*
n 名词 (取英语名词 noun 的第 1 个字母。)
  ng 名语素 (名词性语素,名词代码为 n,语素代码 g 前面置以 n。)
  nr 人名 (名词代码n和「人(ren)」的声母并在一起。)
  nrfg 名词*
  nrt 名词*
  ns 地名 (名词代码 n 和处所词代码 s 并在一起。)
  nt 机构团体 (「团」的声母为 t,名词代码 n 和 t 并在一起。)
  nz 其他专名 (「专」的声母的第 1 个字母为 z,名词代码 n 和 z 并在一起。)
o 拟声词 (取英语拟声词 onomatopoeia 的第 1 个字母。)
p 介词 (取英语介词 prepositional 的第 1 个字母。)
q 量词 (取英语 quantity 的第 1 个字母。)
r 代词 (取英语代词 pronoun的 第 2 个字母,因 p 已用于介词。)
  rg 代词语素
  rr 代词*
  rz 代词*
s 处所词 (取英语 space 的第 1 个字母。)
t 时间词 (取英语 time 的第 1 个字母。)
  tg 时语素 (时间词性语素,时间词代码为 t,在语素的代码 g 前面置以 t。)
u 助词 (取英语助词 auxiliary 的第 2 个字母,因 a 已用于形容词。)
  ud 助词*
  ug 助词*
  uj 助词*
  ul 助词*
  uv 助词*
  uz 助词*
v 动词 (取英语动词 verb 的第一个字母。)
  vd 副动词 (直接作状语的动词,动词和副词的代码并在一起。)
  vg 动语素
  vi 动词*
  vn 名动词 (指具有名词功能的动词,动词和名词的代码并在一起。)
  vq 动词*
w 标点符号
x 非语素字 (非语素字只是一个符号,字母 x 通常用于代表未知数、符号。)
y 语气词 (取汉字「语」的声母。)
z 状态词 (取汉字「状」的声母的前一个字母。)
  zg 状态词*

Donate

If you find fuku-ml useful, please consider a donation. Thank you!

  • bitcoin: 1BbihQU3CzSdyLSP9bvQq7Pi1z1jTdAaq9
  • eth: 0x92DA3F837bf2F79D422bb8CEAC632208F94cdE33

License

The MIT License (MIT)

Copyright (c) 2015 fukuball

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

jieba-php's People

Contributors

bryce13950 avatar chinaclaw avatar citywill avatar fukuball avatar graychu avatar hippolin avatar number201724 avatar sinojyj avatar tianhe1986 avatar vanjor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jieba-php's Issues

升級 jieba-php 0.21 版本

找個時間來升級成 jieba-php 0.21 版本,有人想幫忙可以事先跟我說,不然我就自己來做囉~

作者你好,提个优化内存消耗和加载字典时间的建议

如果能写成单例模式就好了,结合swoole让实例常驻内存。
然后搭建一个swoole api应用。使用的时候请求api接口,因为实例常驻内存,不用每次都初始化,所以内存消耗和加载速度非常的快。
我测了一下:内存消耗和时间花费都在加载字典上面。停词花费的时间并不多。
我把搜狗的几个词库加进去,10万3000行左右。加载速度特别慢,其他的步骤还好。

  • 内存使用:0.67919158935547|初始化之前| 花费时间:0
  • 内存使用:79.676719665527|结巴初始化完成| 花费时间:0.12999987602234
  • 内存使用:82.161094665527|Finalseg初始化完成| 花费时间:0.14949989318848
  • 内存使用:109.49954223633|JiebaAnalyse初始化完成| 花费时间:0.33049988746643
  • 内存使用:207.0001373291|加载字典完成| 花费时间:2.8549997806549
  • 内存使用:207.19972229004|加载停词完成| 花费时间:2.8864998817444
  • 内存使用:207.19972229004|0 | 花费时间:2.8864998817444
  • 内存使用:208.78179931641|1| 花费时间:3.0029997825623
  • 内存使用:208.78179931641|2| 花费时间:3.0714998245239
  • 内存使用:208.78179931641|3| 花费时间:3.1409997940063
  • 内存使用:208.78179931641|4| 花费时间:3.2099997997284
  • 内存使用:208.78179931641|5| 花费时间:3.2795000076294
  • 内存使用:208.78179931641|6| 花费时间:3.3494999408722
  • 内存使用:208.78179931641|7| 花费时间:3.4249999523163
  • 内存使用:208.78179931641|8| 花费时间:3.4954998493195
  • 内存峰值:224.774879455579| 花费时间:3.5649998188019

这个有词频分析和数据输出么?

我想要在一个句子中,取出前3个使用频率最高的名词,或者说最重要的前三个词。单纯的分词实现不了。不知道jieba-php有分词功能么?

自定义词对词性分词无效?

加载了自定义词后 Jieba::cut()没有问题 但是Posseg::cut() 无法分词

        Jieba::init();
        Jieba::loadUserDict('/Users/christian/Downloads/1.txt');
        Finalseg::init();
        Posseg::init();
        $words = Jieba::cut('luckin30');
        print_r($words);
        $words = Posseg::cut('luckin30');
        print_r($words);
        die();   
Array ( [0] => luckin [1] => 30 ) Array ( [0] => Array ( [word] => luckin30 [tag] => m ) )

关于若干请求后,内存溢出问题

因为PHP无法常驻内存,所有每个对象都是page Scope的,用户每次的请求都会重新初始化一遍jieba-php的服务,现在遇到缓存无法释放,执行若干次后,内存溢出,请问你们是怎么处理的

如何在分词完成后,载入停用词表去除停用词

作者你好,有一个疑问,当我分词完成后,无法设置停用词表过滤。看了文档之后发现也并没有这个功能,只有在关键词提取里面才可以设置,请问在分词里面可以设置停用词表吗?

關於分詞的一些建議

為甚麼不採用CRF分詞呢?我是php的支持者和繁體用戶,試了不同方法去做分詞,但感覺CRF是分得最好的,但很可惜並沒有CRF的庫。
例如 蔡英文管理台灣
CRF分詞能準確把蔡英文分出來。
而當前這個庫會把 蔡 和 英文 分開了。

Laravel 使用总是报错

一般会出现三种情况:

  1. 报错500没有任何返回信息,页面崩溃
  2. 报错内存"Allowed memory size of 134217728 bytes exhausted (tried to allocate 18874368 bytes)"但是 php 内存已经设定到了 1G 了。
  3. 正常输出结果

这三种情况会随机出现。Laravel 版本是 5.6

jieba不考虑换掉词典格式吗?

结巴的词典格式非常慢,随便一句话还没开始分词都要接近一秒。
跟SCWS的txt词典一样慢,但SCWS有sqlite跟xdb词典可用。

请问如何提高执行速度

您好:
我用的small库,每次一句有10个汉子左右,可是每次执行都要3-4秒,如何能提高速度呢,精简词库也可以。

关于词频的问题

我现在使用jieba 分词来处理系统的关键词,但是有好多并不是我想要的。我觉得如果我可以生成一个自己的词频词库或许能够更好地提取关键词。所以想问一下,我应该如何训练 jieba 生成自己的词库呢

Jieba::loadUserDict 問題

Jieba::loadUserDict("/var/www/html/test/jieba/dict/user_dict.txt");
載入後, Posseg::cut($raw_text) 也會參考自定義的嗎?

关于执行效率

我在本地调试的时候,20字的句子切词需要30秒以上,请问会是哪些因素影响速度?

JiebaAnalyse 配置不起作用

使用 JiebaAnalyse 配置 big 結果沒有任何改變,JiebaAnalyse.php 63行 是否應該隨著配置做變動,而不是寫死呢?

linux 服务器 php7.2

Undefined index: B" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(8) ["file":protected]=> string(69) "/home/www/wechat_api/vendor/fukuball/jieba-php/src/class/Finalseg.php"

cutforsearch

Hi, this is my first time using this. so please bear with me :).
i tried the cutforsearch demo,
$seg_list = Jieba::cutForSearch("小明硕士毕业于**科学院计算所,后在日本京都大学深造"); #搜索引擎模式
var_dump($seg_list);

the output is array(18) without comma but I run it on my local the output is array(19) with comma
image (and it is using the Jieba::init(array('mode'=>'test','dict'=>'big'));)

but if i use Jieba::init only the output is array(20)

image

超出内存限制

场景
默认精确度,初始化完成后,在swoole协程中循环运行。大概执行 1W+ 次分词后,会报超出内存限制,从报错前一刻最后一个数据开始重新执行分词任务,又会继续正常运行,但执行1W+次分词后又会再次出现。
PHP Fatal error: Allowed memory size of 335544320 bytes exhausted (tried to allocate 1179648 bytes) in /<隐藏路径>/vendor/fukuball/jieba-php/src/vendor/multi-array/MultiArray.php on line 121

疑问
请问有什么原因吗?或者是我需要提供更具体的信息?

升級 jieba-php 0.20 版本

找個時間來升級成 jieba-php 0.20 版本,有人想幫忙可以事先跟我說,不然我就自己來做囉~

我自定义的字典,词的权重不会发生改变呢

我载入了自定义字典,想对部分词的权重进行提升,但是实际结果该词的权重并没有收到任何影响。
举个栗子: 我没有在自定义词库里添加销量这个词的时候,它分出来的权重值是0.061093127894683,如下图1
image1
(图1)
然后我把销量这个词加入自定义词库,权重设为100,再进行分词,结果还是这个,丝毫不受影响,如下图2
image2
(图2)
这是我的自定义字典userdict.txt的内容,图3
image4
(图3)
这是我的代码,图4
image3
(图4)
请问这是为什么呢

需要内存太大了

总提显内存不足。
能不能提供一个mysql 版本 或 sqlite 版本的?

如何根据自定义词典,从文本中提取词典中的关键词?

需求:
如何根据自定义词典,从文本中提取词典中的关键词。

设想三种方案:
1、输入文本,获取结巴分词结果,编写一套代码根据分词结果对比自定义词典,输出同时包含在文本中和词典中的词。
2、输入文本,编写一套代码,逐个查询词典中的词是否在文本中出现,输出同时包含在文本中和词典中的词。
3、利用结巴词性标注的功能,在自定义词典中,将自定义词全部标注为某一特殊词性,利用结巴根据词性提取关键词功能,输入文本,提取指定词性的关键词。
4、利用结巴自定义词典功能,分词完全根据指定的自定义词典进行分词,输入文本,调用指定词典,输出分词结果。
5、利用结巴权重功能,输出分词结果中将指定自定义词典中的词的权重调大,其他词权重调低,输出分词结果后,截取权重靠前的几个词。

问题:
哪种方案可以实现需求?
结巴有没有直接根据算定义词典提取关键词的功能?

因为没有看到可以直接实现类似这样需求的资料,所以在此提问,请不吝赐教!

如果您了解这方面技术,请提供一下思路,如果能提供一下教程学习地址,或者写点参考代码就更好了。谢谢,不胜感激!

你好,laravel5.5 初始化init的时候错误

你好,我在控制器中初始化这两个Jieba::init();Finalseg::init();

线上环境500 ; 本地没有问题;

注释掉这两句后,网页正常打开;

在这两句前后dd('test');正常;

就是init的时候不知道什么问题,laravel.log没有记录;network显示500没有提示信息

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.