zoukankan      html  css  js  c++  java
  • PHP:计算文件或数组中单词出现频率

    一:如果是小文件,可以一次性读入到数组中,使用方便的数组计数函数进行词频统计(假设文件中内容都是空格隔开的单词):

        <?php  
        $str = file_get_contents("/path/to/file.txt"); //get string from file  
        preg_match_all("/(w+[-]w+)|(w+)/",$str,$r); //place words into array $r - this includes hyphenated words  
        $words = array_count_values(array_map("strtolower",$r[0])); //create new array - with case-insensitive count  
        arsort($words); //order from high to low   
        print_r($words)  
    

     二:如果是大文件,读入内存就不合适了,可以采用如下方法:

        <?php  
        $filename = "/path/to/file.txt";  
        $handle = fopen($filename,"r");  
        if ($handle === false) {  
          exit;  
          }  
        $word = "";  
        while (false !== ($letter = fgetc($handle))) {  
          if ($letter == ' ') {  
            $results[$word]++;  
            $word = "";  
            }  
          else {  
            $word .= $letter;  
            }  
        }  
        fclose($handle);  
        print_r($results);  
    

    Linux命令经典面试题:统计文件中出现次数最多的前10个单词

    使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词。

    cat words.txt | sort | uniq -c | sort -k1,1nr | head -10

      主要考察对sort、uniq命令的使用,相关解释如下,命令及参数的详细说明请自行通过man查看,简单介绍下以上指令各部分的功能:

    sort:  对单词进行排序

    uniq -c:  显示唯一的行,并在每行行首加上本行在文件中出现的次数

    sort -k1,1nr:  按照第一个字段,数值排序,且为逆序

    head -10:  取前10行数据

     

     

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/Alight/p/4443304.html
Copyright © 2011-2022 走看看