batdan/php-text-analysis

PHP Text Analysis 是一个使用 PHP 语言进行信息检索 (IR) 和自然语言处理 (NLP) 任务的库

v1.0.1 2023-07-14 11:01 UTC

This package is auto-updated.

Last update: 2024-09-14 13:40:33 UTC


README

alt text

Latest Stable Version

Total Downloads

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'));