PHP:计算文件或数组中单词出现频率

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

    <?php
    $str = file_get_contents("/path/to/file.txt"); //get string from file
    preg_match_all("/\b(\w+[-]\w+)|(\w+)\b/",$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行数据

时间: 2024-11-09 05:08:38

PHP:计算文件或数组中单词出现频率的相关文章

php 计算多维数组中所有值的总和

php 内置函数 array_sum() 函数返回数组中所有值的总和,只能返回一维数组的总和: 计算多维数组所有值的和就要自定义函数了: 1 function get_sum($array) { 2 $num = 0; 3 foreach($array as $k => $v) { 4 if(is_array($v)) { 5 $num += get_sum($v); 6 } 7 } 8 return $num + array_sum($array); 9 }10 get_sum($array)

统计文件中单词的频率,给出前N的单词

package test10; import java.io.*; import java.util.*; import java.util.Map.Entry; public class Frequency { public static int n=0;// public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s; int count=0; int num=1; //作为File

php中计算二维数组中某一元素之和

[0] => array(5) { ["id"] => string(2) "11" ["name"] => string(5) "1.jpg" ["suffix"] => string(3) "jpg" ["url"] => string(29) "./Uploads/1/5292f55d208e8.jpg" [&q

统计文档中单词出现频率

一.先贴出自己的代码 1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileReader; 4 import java.io.IOException; 5 import java.util.Arrays; 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.Map; 9 import java.ut

Python - 统计一篇文章中单词的频率

def frenquence_statistic(file_name): frequence = {} for line in open(file_name,'r').readlines(): words =line.strip().split(" ") for word in words: word = ''.join(list(filter(str.isalpha,word))).lower() if frequence.get(word) == None : frequence[

简单的方法来统计文件中单词和各种标点符号个数

此小程序使用最基本的方法来统计文本中英文单词的个数,想法也比较简单: (1)从文本中文本读取内容,使用BufferedReader类每次读取一行并添加到StringBuffer类型变量中, 最后StringBuffer类型变量即为文本的内容,如StringBuffer sb: (2)把sb的内容全部转化成小写字母(或大写字母): (3)统计文件中各种标点符号个数: (4)把所有标点符号统一替换成一种标点符号,如替换成逗号 (5)替换后的文本使用字符串的分割函数来获取返回的字符串数组的长度,此长度

解析plist文件(字典里包着数组,数组中又包含字典)

1 #import "RootTableViewController.h" 2 #import "City.h" 3 4 @interface RootTableViewController () 5 6 // 声明存放所有城市的大字典 7 @property (nonatomic, strong) NSMutableDictionary *allDataDict; 8 9 // 存储所有的key数组(存放省份) 10 @property (nonatomic, s

六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

/* 设计一个函数,用来计算b的n次方 递归的2个条件: 1.函数自己调用自己 2.必须有个明确的返回值 */ #include <stdio.h> int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return 0; } /* pow2(b, 0) == 1 pow2(b, 1) == b == pow2(b, 0) * b pow2(b, 2) == b*b == po

给出一个数组,计算数组中少了哪个数据的实现

题目:给一个数组,长度为99.里面存储了从0到99中100个字符,求计算少了那个数未在数组中? 实现方法1:正向存储的思维,时间和空间复杂度为o(1) import java.math: public class findMissDate{      public void main(Strings[] args)      int arr[] = new int[99];      public int findmiss(){         int k= (int)(Math.Random(