基于词频减少文本的算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于词频减少文本的算法相关的知识,希望对你有一定的参考价值。
如何在php中基于词频减少文本?
例如,如果我有这个文字:
house house house house book book book
它应该简化为这样(或任何类似的形式):
house house book
所以这种方式最常用的词仍然是2和1书。
问题实际上很有趣。据我所知,它不是关于压缩,而是词频 - 这是我的朋友,是自然语言处理领域。
我的第一个想法是:推荐使用NLTK(并在需要时学习Python),因为没有真正的PHP等价物(最近的库可能是NlpTools)。然而,事实证明,早期的NlpTools贡献者Dan Cardin创建了一个独立的库来处理你的问题:yooper/php-text-analysis
PHP Text Analysis是一个使用PHP语言执行信息检索(IR)和自然语言处理(NLP)任务的库
将PHP Text Analysis添加到项目中
composer require yooper/php-text-analysis
以下是如何使用它的示例:
<?php
require_once('vendor/autoload.php');
$book = file_get_contents('pg74.txt'); // tom sawyer from the gutenberg project http://www.gutenberg.org/cache/epub/74/pg74.txt
// Create a tokenizer object to parse the book into a set of tokens
$tokenizer = new TextAnalysisTokenizersGeneralTokenizer();
$tokens = $tokenizer->tokenize($book);
$freqDist = new TextAnalysisAnalysisFreqDist($tokens);
//Get the top 10 most used words in Tom Sawyer
$top10 = array_splice($freqDist->getKeyValuesByFrequency(), 0, 10);
对freq_dist
的调用返回一个FreqDist实例。
然后,您可以自己计算单词的权重(freq / numberOfAllTokens)或使用getKeyValuesByWeight()
方法。
$top10[0]/$freqDist->getTotalTokens();
$weights = $freqDist->getKeyValuesByWeight();
...或者通过出现最不频繁的首字词来标准化所选单词的频率,例如:
foreach ($top10 as $word => $freq) {
$relWeight[$word] = $freq/end($top10);
}
根据你的输入,你会发现你最常用的词是a
,the
,that
等。这就是为什么你要删除stopwords。我们才开始..
Here是一些更多的样本。
在PHP中压缩和解压缩字符串:gzcompress,gzuncompress
例:
$text = "house house house house book book book";
echo "Orignal text lenght : ". strlen($text)."<br>";
$compressed = gzcompress($text, 9);
echo "Compressed text: ".$compressed."<br>";
echo "Compress text length :". strlen($compressed);
echo "<br>";
echo "Uncompressed text :".$uncompressed = gzuncompress($compressed);
输出:
原文长度:38
压缩文本:x /-NU R
压缩文本长度:22
未压缩的文本:房子的房子房子书书
以上是关于基于词频减少文本的算法的主要内容,如果未能解决你的问题,请参考以下文章