如何从PHP中的文本文件目录中获取唯一单词的计数?

如何从PHP中的文本文件目录中获取唯一单词的计数?,php,Php,我有一个文本文件目录。我想循环遍历目录中的每个文本文件,并获得唯一单词的总计数(词汇表计数),不是针对每个单独的文件,而是针对所有文件。换句话说,我想要的是所有文件中的唯一单词数,而不是每个文件中的唯一单词数 例如,我在一个目录中有三个文本文件。内容如下: file1.txt->这里是一些文本 file2.txt->这里有更多文本 file3.txt->更多文本 因此,在本例中,此文本文件目录的唯一单词数为6 我已尝试使用此代码: $files = glob("C:\\wamp\\dir");

我有一个文本文件目录。我想循环遍历目录中的每个文本文件,并获得唯一单词的总计数(词汇表计数),不是针对每个单独的文件,而是针对所有文件。换句话说,我想要的是所有文件中的唯一单词数,而不是每个文件中的唯一单词数

例如,我在一个目录中有三个文本文件。内容如下:

file1.txt->这里是一些文本

file2.txt->这里有更多文本

file3.txt->更多文本

因此,在本例中,此文本文件目录的唯一单词数为6

我已尝试使用此代码:

$files = glob("C:\\wamp\\dir");

$out = fopen("mergedFiles.txt", "w");


  foreach($files as $file){
      $in = fopen($file, "r");
      while ($line = fread($in)){
           fwrite($out, $line);
      }
      fclose($in);
  }


  fclose($out);
要合并所有文本文件,然后在使用此代码后,我计划在mergedFiles.txt上使用数组_unique()。但是,代码不起作用

如何以最佳方式获取目录中所有文本文件的唯一字数?

您可以尝试以下方法:

$allWords = array();

foreach (glob("*.txt") as $filename) // loop on each file
{
    $contents = file_get_contents($filename); // Get file contents
    $words = explode(' ', $contents); // Make an array with words

    if ( $words )
        $allWords = array_merge($allWords, $words); // combine global words array and file words array
}

var_dump(count(array_unique($allWords)));
编辑其他版本:

  • 去除斑点
  • 删除多个空格
  • 若句子结尾和新单词之间缺少空格,则匹配单词


但是,代码不起作用
它到底是如何起作用的?我认为您不需要将所有文本合并在一起,只需连续打开文件即可。阅读每一行,去掉标点符号,并使大小写正常化。拆分为单词并添加到集合中,或作为键(而不是值)添加到关联数组中,该数组在值中存储该单词的计数。最后,数组/集合的大小是唯一单词的数量。这太过分了,而且不是所有的单词都以空格结尾来分解。“句子结尾的词是什么?”汉基说웃Panky:最后一个单词也将与explode一起出现在数组中<代码>分解(“”,“这里有一些文本”)将返回4个单词。这仅适用于1个句子。那么,即使是在你提到的情况下,你是说
文本。
是一个词吗?nope
text
is;没有经期。@Hanky웃潘基,你说得对。使用其他版本编辑代码以匹配特定案例。
function removeDot($string) {
    return rtrim($string, '.');
}

$words = explode(' ', preg_replace('#\.([a-zA-Z])#', '. $1', preg_replace('/\s+/', ' ',$contents)));
$words = array_map("removeDot", $words);