c#中如何用list对文本文件中的词语按行去重并统计每个词语的次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中如何用list对文本文件中的词语按行去重并统计每个词语的次数相关的知识,希望对你有一定的参考价值。

问题1:“文本1”中按行存放词语,不但要去重,还要把所有词语出现的次数统计出来,结果如“文本2”。
问题2:针对“文本2”按照词语次数的大小降序排列,结果如“文本3”。

这样的问题用Linq处理非常方便!

1)代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            //从文本文件中读出所有行
            string[] lines = File.ReadAllLines("文本1.txt");
            //构造一个Linq查询
            var qry = from s in lines
                      group s by s into ws
                      orderby ws.Count() descending
                      select new
                      
                          Num= ws.Count(),
                          Word = ws.Key
                      ;

            //将结果写入文件
            StreamWriter w = File.CreateText("文本3.txt");
            foreach (var item in qry)
            
                w.WriteLine(string.Format("0 1", item.Word, item.Num));    
            
            w.Close();
        
    

2)文本1.txt的内容


3)文本3.txt的内容(运行结果)

追问

非常感谢。您这个是用了SQL查询方面的语句吗,

这个方面没接触过,不是很懂。另外就是,在一个文件夹下如果有很多类似的“文本1”需要进行处理(也就是说批处理),这个怎么实现。还有能够不用那个查询语句实现吗。麻烦大神附上代码,谢谢。

参考技术A 给你个思路
用StreamReader 读入内存,然后定义语句变量

用 while ((line = sr.ReadLine()) != null)一行一行读入
然后相同变量相加。最后统计出来后写入
list中,代码不放了,自己想
参考技术B 不需要用到list吧。
直接逐行读取出来就是 字符串数组 了。

以上是关于c#中如何用list对文本文件中的词语按行去重并统计每个词语的次数的主要内容,如果未能解决你的问题,请参考以下文章

python做文本按行去重

excel怎么去重

JavaSE 计算2个List集合中的交集差集并集去重并集

shell命令技巧——文本去重并保持原有顺序

list 去重并保持原来排序

C#中如何用for循环遍历List<类>?