本例使用golang实现词频统计。步骤:
(1)从文件中读取一篇文章。
(2)统计词频,按单词出现的频率从大到小进行排序。
(3)写入到文件中。
注:任何非英文字母的符号均认为是单词分隔符(即等同于空格)。
效率:使用本程序统计一篇150W单词的文章,大约需要70ms.
1.核心代码:
package wordtest
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"runtime"
"sort"
"strings"
"time"
)
//简单的词频统计任务
func CountTestBase(inputFilePath string, outputFilePath string) {
//时间开始点
start := time.Now().UnixNano() / 1e6
//读取文件
fileData, err := ioutil.ReadFile(inputFilePath)
CheckError(err, "read file")
var fileText string = string(fileData)
//根据CPU核数新开协程
newRountineCount := runtime.NumCPU()*2 - 1
runtime.GOMAXPROCS(newRountineCount + 1)
//切分文件
parts := splitFileText(fileText, newRountineCount)
var ch chan map[string]int = make(chan