首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >统计文本文件中特定词的出现频率

统计文本文件中特定词的出现频率
EN

Stack Overflow用户
提问于 2010-12-24 01:04:47
回答 4查看 11.3K关注 0票数 1

我有一个文本文件存储为字符串变量。对文本文件进行处理,使其只包含小写单词和空格。现在,假设我有一个静态字典,它只是一个特定单词的列表,我想从文本文件中计算字典中每个单词的出现频率。例如:

代码语言:javascript
代码运行次数:0
运行
复制
Text file:

i love love vb development although i m a total newbie

Dictionary:

love, development, fire, stone

我希望看到的输出如下所示,列出了字典中的单词及其计数。如果它使编码变得更简单,它也只能列出文本中出现的字典单词。

代码语言:javascript
代码运行次数:0
运行
复制
===========

WORD, COUNT

love, 2

development, 1

fire, 0

stone, 0

============

使用正则表达式(例如"\w+")我可以获得所有匹配的单词,但我不知道如何获得字典中也有的计数,所以我被卡住了。效率在这里至关重要,因为字典很大(大约100,000个单词),文本文件也不小(每个文件大约200KB)。

我很感谢你的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-24 01:08:45

代码语言:javascript
代码运行次数:0
运行
复制
var dict = new Dictionary<string, int>();

foreach (var word in file)
  if (dict.ContainsKey(word))
    dict[word]++;
  else
    dict[word] = 1;
票数 5
EN

Stack Overflow用户

发布于 2010-12-24 01:09:33

您可以通过对字符串中的单词进行分组并将其转换为字典来计算其数量:

代码语言:javascript
代码运行次数:0
运行
复制
Dictionary<string, int> count =
  theString.Split(' ')
  .GroupBy(s => s)
  .ToDictionary(g => g.Key, g => g.Count());

现在,您只需检查字典中是否存在这些单词,如果存在,则显示计数。

票数 6
EN

Stack Overflow用户

发布于 2010-12-24 01:28:59

使用Groovy regex facilty,我会这样做:

代码语言:javascript
代码运行次数:0
运行
复制
def input="""
    i love love vb development although i m a total newbie
"""

def dictionary=["love", "development", "fire", "stone"]


dictionary.each{
    def pattern= ~/${it}/
    match = input =~ pattern
    println "${it}" + "-"+ match.count
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4520876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档