我一直在考虑我想做的一个项目,我不是高级用户,我只是在学习。不知道这是否可能:
假设我们有100个html文档,其中包含许多表格和文本。
第一个问题是:是否有可能分析所有这些文本并找出重复的单词并计算它?
是的,用一些函数是可以做到的,但问题是:如果我们不知道要查找的单词怎么办?也就是说,我们必须告诉代码一个单词是什么意思。
例如,假设一个单词是七个字符的并集,我们的想法是找到其他类似的模式并提到它。最好的方法是什么?提前谢谢你。
的例子:
搜索:下一个短语的五个字符模式:
文本:文本二:
结果"海洋是咸水体"
Takes 1
Break 1
water 1
Ocean 2
提前感谢您的帮助。
function get_word_counts($phrases) {
$counts = array();
foreach ($phrases as $phrase) {
$words = explode(' ', $phrase);
foreach ($words as $word) {
$word = preg_replace("#[^a-zA-Z-]#", "", $word);
$counts[$word] += 1;
}
}
return $counts;
}
$phrases = array("It takes an ocean of water not to break!", "An ocean is a body of saline water, or so I am told.");
$counts = get_word_counts($phrases);
arsort($counts);
print_r($counts);
Array
(
[of] => 2
[ocean] => 2
[water] => 2
[or] => 1
[saline] => 1
[body] => 1
[so] => 1
[I] => 1
[told] => 1
[a] => 1
[am] => 1
[An] => 1
[an] => 1
[takes] => 1
[not] => 1
[to] => 1
[It] => 1
[break] => 1
[is] => 1
)
编辑
更新处理基本标点符号,基于@Jack的评论
使用内置函数的另一种方法,该方法也会忽略短单词:
function get_word_counts($text)
{
$words = str_word_count($text, 1);
foreach ($words as $k => $v) if (strlen($v) < 4) unset($words[$k]); // ignore short words
$counts = array_count_values($words);
return $counts;
}
$counts = get_word_counts($text);
arsort($counts);
print_r($counts);
注意:这里假设一个文本块,如果处理一个短语数组,添加foreach ($phrases as $phrase)
等