batdan / php-text-analysis
PHP Text Analysis 是一个使用 PHP 语言进行信息检索 (IR) 和自然语言处理 (NLP) 任务的库
Requires
- php: >=7.4
- batdan/nicknames: ~1
- batdan/stop-words: ~1
- symfony/console: >= 4.4
- wamania/php-stemmer: ~1
Requires (Dev)
- mockery/mockery: ^1
This package is auto-updated.
Last update: 2024-09-14 13:40:33 UTC
README
PHP Text Analysis 是一个使用 PHP 语言进行信息检索 (IR) 和自然语言处理 (NLP) 任务的库。该库中包含的工具可以执行以下操作:
- 文档分类
- 情感分析
- 比较文档
- 频率分析
- 分词
- 词干提取
- 基于点互信息的搭配
- 词汇多样性
- 语料库分析
- 文本摘要
该项目所有文档可以在书籍和维基百科中找到。
PHP Text Analysis 书籍 & 维基百科
目前正在编写一本书,需要您的贡献。您可以在 https://github.com/yooper/php-text-analysis-book 找到这本书。
此外,库的文档也位于维基百科上。 https://github.com/yooper/php-text-analysis/wiki
安装说明
将 PHP Text Analysis 添加到您的项目中
composer require batdan/php-text-analysis
分词
$tokens = tokenize($text);
您可以通过传递分词器类名来自定义要分词的类型
$tokens = tokenize($text, \TextAnalysis\Tokenizers\PennTreeBankTokenizer::class);
默认分词器是 \TextAnalysis\Tokenizers\GeneralTokenizer::class。一些分词器需要在实例化时设置参数。
规范化
默认情况下,normalize_tokens 使用 strtolower 函数将所有标记转换为小写。要自定义规范化函数,请传递一个函数或一个字符串,该字符串将由 array_map 使用。
$normalizedTokens = normalize_tokens(array $tokens);
$normalizedTokens = normalize_tokens(array $tokens, 'mb_strtolower'); $normalizedTokens = normalize_tokens(array $tokens, function($token){ return mb_strtoupper($token); });
频率分布
调用 freq_dist 返回一个 FreqDist 实例。
$freqDist = freq_dist(tokenize($text));
生成 n-gram
默认情况下生成 bigrams。
$bigrams = ngrams($tokens);
自定义 n-gram
// create trigrams with a pipe delimiter in between each word $trigrams = ngrams($tokens,3, '|');
词干提取
默认情况下使用 Porter 词干提取方法。
$stemmedTokens = stem($tokens);
您可以通过传递词干提取器类名来自定义要使用的词干提取器类型。
$stemmedTokens = stem($tokens, \TextAnalysis\Stemmers\MorphStemmer::class);
使用 Rake 提取关键词
存在使用 Rake 算法的快捷方法。在使用之前,您需要清理数据。第二个参数是提取的关键词的 n-gram 大小。
$rake = rake($tokens, 3); $results = $rake->getKeywordScores();
使用 Vader 进行情感分析
需要使用 PHP 进行情感分析?使用 Vader,https://github.com/cjhutto/vaderSentiment。PHP 实现可以轻松调用。只需在之前规范化数据即可。
$sentimentScores = vader($tokens);
使用朴素贝叶斯进行文档分类
需要使用 PHP 进行一些文档分类?尝试使用朴素贝叶斯的实现。在单元测试中可以找到一个分类电影评论的示例。
$nb = naive_bayes(); $nb->train('mexican', tokenize('taco nacho enchilada burrito')); $nb->train('american', tokenize('hamburger burger fries pop')); $nb->predict(tokenize('my favorite food is a burrito'));