yooper/php-text-analysis

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

1.9.1 2023-09-23 13:32 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 yooper/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));

Ngram生成

默认情况下生成二元组。

$bigrams = ngrams($tokens);

自定义ngram

// 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算法的快捷方法。在使用之前,您需要清理数据。第二个参数是要提取的关键词的ngram大小。

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