Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >两个文件中的字频计数

两个文件中的字频计数
EN

Stack Overflow用户
提问于 2015-05-05 07:57:53
回答 4查看 1.7K关注 0票数 2

我编写了Java代码来计算事件的总和。它使用2个.txt文件作为输入,并给出单词和频率作为输出。

我也想打印,哪个文件包含多少次给定的单词。你知道怎么做吗?

代码语言:javascript
运行
AI代码解释
复制
public class JavaApplication2
{

    public static void main(String[] args) throws IOException
    {     
        Path filePath1 = Paths.get("test.txt");
        Path filePath2 = Paths.get("test2.txt");

        Scanner readerL = new Scanner(filePath1);
        Scanner readerR = new Scanner(filePath2);

        String line1 = readerL.nextLine();
        String line2 = readerR.nextLine();

        String text = new String();
        text=text.concat(line1).concat(line2);

        String[] keys = text.split("[!.?:;\\s]");
        String[] uniqueKeys;
        int count = 0;
        System.out.println(text);
        uniqueKeys = getUniqueKeys(keys);

        for(String key: uniqueKeys)
        {
            if(null == key)
            {
                break;
            }           
            for(String s : keys)
            {
                if(key.equals(s))
                {
                    count++;
                }               
            }
            System.out.println("["+key+"] frequency : "+count);
            count=0;
        }
    }

    private static String[] getUniqueKeys(String[] keys)
    {
        String[] uniqueKeys = new String[keys.length];

        uniqueKeys[0] = keys[0];
        int uniqueKeyIndex = 1;
        boolean keyAlreadyExists = false;

        for(int i=1; i<keys.length ; i++)
        {
            for(int j=0; j<=uniqueKeyIndex; j++)
            {
                if(keys[i].equals(uniqueKeys[j]))
                {
                    keyAlreadyExists = true;
                }
            }           

            if(!keyAlreadyExists)
            {
                uniqueKeys[uniqueKeyIndex] = keys[i];
                uniqueKeyIndex++;               
            }
            keyAlreadyExists = false;
        }       
        return uniqueKeys;
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-05 08:07:49

首先,不要使用数组作为唯一的键,而是使用HashMap<String, Integer>。效率要高很多。

最好的选择是在每一行/文件上分别运行处理,并分别存储这些计数。然后合并这两个计数,以获得总频率。

更多细节:

代码语言:javascript
运行
AI代码解释
复制
String[] keys = text.split("[!.?:;\\s]");
HashMap<String,Integer> uniqueKeys = new HashMap<>();

for(String key : keys){
    if(uniqueKeys.containsKey(key)){
        // if your keys is already in map, increment count of it
        uniqueKeys.put(key, uniqueKeys.get(map) + 1);
    }else{
        // if it isn't in it, add it
        uniqueKeys.put(key, 1);
    }
}

// You now have the count of all unique keys in a given text
// To print them to console

for(Entry<String, Integer> keyCount : uniqueKeys.getEntrySet()){
    System.out.println(keyCount.getKey() + ": " + keyCount.getValue());
}

// To merge, if you're using Java 8

for(Entry<String, Integer> keyEntry : uniqueKeys1.getEntrySet()){
    uniqueKeys2.merge(keyEntry.getKey(), keyEntry.getValue(), Integer::add);
}

// To merge, otherwise

for(Entry<String, Integer> keyEntry : uniqueKeys1.getEntrySet()){
    if(uniqueKeys2.containsKey()){
        uniqueKeys2.put(keyEntry.getKey(),
            uniqueKeys2.get(keyEntry.getKey()) + keyEntry.getValue());
    }else{
        uniqueKeys2.put(keyEntry.getKey(), keyEntry.getValue());
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-05-06 02:03:29

更新:word出现的代码(谢谢@George)

此示例用于文件,您可以将其用于多个文件:

代码语言:javascript
运行
AI代码解释
复制
public class MyTest {

    Map<String,Integer> mapTable;

    public MyTest(List<String> wordList){
        //initialize map
        makeMap(wordList);
    }

    public void makeMap(List<String> wordList){
        mapTable = new HashMap();

        for(int i = 0; i < wordList.size(); i++){
            //fill the map up
            mapTable.put(wordList.get(i), 0);
        }
    }

    //update occurences in a map
    public void updateMap(String [] _words){
        for(int i = 0; i < _words.length; i++){
            updateWordCount(_words[i]);
        }
    }

    public void updateWordCount(String _word){
        int value = 0;
        //check if a word present
        if(mapTable.containsKey(_word)){
            value = mapTable.get(_word);
            value++;
            mapTable.put(_word, value);
        }
    }

    public void DisplayCounts(){
        for( String key : mapTable.keySet()){
            System.out.println("Word : "+key+"\t Occurrence(s) :"+mapTable.get(key));
        }
    }

    public void getWordCount(){
        String filePath = "C:\\Users\\Jyo\\Desktop\\help.txt";
        String line = "";

        try {
            // FileReader reads text files in the default encoding.
            FileReader fileReader = new FileReader(filePath);

            // Always wrap FileReader in BufferedReader.
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            String _words[] = null;

            while((line = bufferedReader.readLine()) != null) {
                System.out.println(line);

                _words = line.split(" ");

                updateMap(_words);
            }    

            // Always close files.
            bufferedReader.close();  
        } catch (Exception e) {

            System.out.println("Error :"+e.getMessage());
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        List<String> wordList = new ArrayList<>();
        wordList.add("data");
        wordList.add("select");
        MyTest mt = new MyTest(wordList);
        mt.getWordCount();
        mt.DisplayCounts();


    }

}
票数 0
EN

Stack Overflow用户

发布于 2017-01-29 11:08:13

进口java.io.;进口java.util.

代码语言:javascript
运行
AI代码解释
复制
public class file1{
 public static void main(String[] args) throws Exception{
HashMap<String,Integer> words_fre = new HashMap<String,Integer>();
HashSet<String> words = new HashSet<String>();
try{  

       File folder = new File("/home/jsrathore/Dropbox/Semester 6th/IR_Lab/lab_01/one");
       File[] listOfFiles = folder.listFiles();

       BufferedReader bufferedReader=null;
       FileInputStream inputfilename=null;
       BufferedWriter out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("outfilename.txt",false), "UTF-8"));

        for(File file : listOfFiles){           
           inputfilename= new FileInputStream(file); 
           /*System.out.println(file); */    
           bufferedReader= new BufferedReader(new InputStreamReader(inputfilename, "UTF-8"));


             String s;
             while((s = bufferedReader.readLine()) != null){
               /*System.out.println(line);*/
                  s = s.replaceAll("\\<.*?>"," ");
                    if(s.contains("॥") || s.contains(":")|| s.contains("।")|| 
                     s.contains(",")|| s.contains("!")|| s.contains("?")){
                         s=s.replace("॥"," ");
                         s=s.replace(":"," ");
                         s=s.replace("।"," ");
                         s=s.replace(","," ");
                         s=s.replace("!"," ");
                         s=s.replace("?"," ");
                       }                                                   
                  StringTokenizer st = new StringTokenizer(s," ");
                  while (st.hasMoreTokens()) {         
                  /*out.write(st.nextToken()+"\n");*/
                  String str=(st.nextToken()).toString();
                  words.add(str);
                }
                for(String str : words){
                  if(words_fre.containsKey(str)){  
                           int a = words_fre.get(str);  
                           words_fre.put(str,a+1);             
                  }else{  
                      words_fre.put(str,1);/*uwords++;//unique words count */  
                  }                      
                }
                words.clear(); 

                  /*out.write("\n");
                  out.close();*/

             }             
             Object[] key =   words_fre.keySet().toArray();   
                  Arrays.sort(key);  
                  for (int i = 0; i < key.length; i++) {  
                    //System.out.println(key[i]+"= "+words_fre.get(key[i]));
                 out.write(key[i]+" : "+words_fre.get(key[i]) +"\n");
               }


         }

            out.close();
            bufferedReader.close();

      }catch(FileNotFoundException ex){
         System.out.println("Error in reading line");
        }catch(IOException ex){
            /*System.out.println("Error in reading line"+fileReader );*/
            ex.printStackTrace();
           }

}}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30057864

复制
相关文章
数字频率计数器参数详解
频率计也叫频率计数器,通常包含数字频率计数器、微波频率计等,一般专业用来对被测设备产生的频率信号进行测量的电子测量设备。频率计数器通常主要由时基(T)、电路、输入电路、控制电路以及技术显示电路等四个主要部分组成。
时频百晓生
2022/08/30
6200
python匹配两个文件中相同的内容
data_small.txt中内容如下: 343 0 5258 1 3973 2 data_big.txt中内容如下: 343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191 343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 23 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 56 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 5258 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 5258 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 545 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 3973 2009-05-14T20:47:20Z 39.0142536 -94.5928215833 12305 3973 2009-05-14T20:43:05Z 39.0146281324 -94.5907831192 9627
全栈程序员站长
2022/11/07
2.3K0
找出两个文件中相同的单词(java实现)
第二种比较单词的方法:将string【】数组转换成集合,通过集合的retainAll()方法 两个集合取交集
崔笑颜
2020/08/24
1.7K0
CSS中的计数器
     <p>Place the flour in a large bowl, make a well in the centre and pour in the milk and eggs. Give the liquid mixture a quick whisk before incorporating the flour. Continue to whisk until you have a smooth batter.</p>
大江小浪
2018/07/25
1.3K0
Python中的计数 - Counter类
在很多场景中经常会用到统计计数的需求,比如在实现 kNN 算法时统计 k 个标签值的个数,进而找出标签个数最多的标签值作为最终 kNN 算法的预测结果。Python内建的 collections 集合模块中的 Counter 类能够简洁、高效的实现统计计数。
触摸壹缕阳光
2020/07/22
2.2K0
C语言 文件单词的检索与计数
iMaster,iMatch;是扫描的变量,在未完成主串与匹配串的扫描时,当出现相同的字符时两者都会自加,一旦发现不同的立马回到主串的起始位置的下一个的位置,匹配串的扫描变量立马清零。扫描完了,返回主串存在匹配串的起始位置。
立羽
2023/08/24
2600
对大文件字符进行计数
但是当文件过大时,会报错,显示空间不足: sort: write failed: /tmp/sortbDyE0W: No space left on device
生信编程日常
2020/10/10
6300
struts2中文件上传的两个个限制
--struts2中文件上传的二个限制,一个是struts.multipart.maxSize,如果不设置,struts2 的核心包下的default.properties文件里有默认的大小设置struts.multipart.maxSize=2097152,即2M. 这是struts2文件上传的第一道关. 第二道关是inteceptor中的maximumSize. 当真实的文件大小能通过第一道关时.针对不同的action中配置的inteceptor,maximumSize才能发挥相应的拦截作用. 比如st
闵开慧
2018/03/30
8110
数字频率计简单介绍
数字频率计是一种常用的用数字显示被测信号频率的测量仪器。被测信号可以是方波、正弦波或其它周期性变化的信号。也可称之为智能计数器,采用十进制数字显示被测信号频率表,被广泛应用于航天、航空、电子技术、测控等技术领域。
时频专家
2019/09/17
4420
Wolf CMS 新旧两个版本中的文件上传漏洞分析
一、Wolfcms简介 Wolf CMS是一款内容管理系统(CMS),是在GNUGeneral Public License v3下发布的免费软件。Wolf CMS是由PHP语言编写,是Frog CMS的一个分支。在2010年Packet Publishing开源项目评奖的“Most Promising Open Source Project”分类中杀进了决赛。 软件的官网为:https://www.wolfcms.org/ 二、Wolfcms 0.8.2中存在任意文件上传漏洞 2.1 Wolf CMS 0
FB客服
2018/02/28
2.5K0
Wolf CMS 新旧两个版本中的文件上传漏洞分析
PHP-解决导出excel文件中数字过大科学计数法问题
用GOOGLE找了好几个办法,这两个是简单有效果的办法。 数字改字符串: //在给需要显示为正常数字的单元格赋值的时候,在值的前面或后面加一个空字符串,这样数值型就自动转换为字符型了。: $this->_excelObj->getActiveSheet()->setCellValue($v.$i, ' '.$data[$colName[$k]]); 把值的类型做转换,设置值为字符串类型: $this->_excelObj->getActiveSheet()->setCellValueExplicit(
兔山小旭
2023/04/06
1.3K0
DAX中与计数相关的聚合函数
不问花开几许,只愿浅笑安然 除了求和,另一个日常工作中最常用到的聚合方式应该是计数了。DAX提供了一系列关于计数的函数。他们可以帮助我们计算表中有多少行或者某个值出现了多少次。 DAX中包含的计数函数有: COUNT()函数,对列中值的数量进行计数,除了布尔型; COUNTA函数,对列中值的数量进行计数,包含布尔型; COUNTBLANK()函数,返回列中空单元格的计数; COUNTROWS()函数,返回表中行的计数; DISTINCTCOUNT()函数,返回列中值的不重复计数,包含空单元格。 DISTI
博文视点Broadview
2023/04/04
4.2K0
DAX中与计数相关的聚合函数
大数据-MapReduce中的计数器
计数器是收集作业统计信息的有效手段之一,用于质量控制或应用级统计。计数器还可辅 助诊断系统故障。如果需要将日志信息传输到 map 或 reduce 任务, 更好的方法通常是看 能否用一个计数器值来记录某一特定事件的发生。对于大型分布式作业而言,使用计数器 更为方便。除了因为获取计数器值比输出日志更方便,还有根据计数器值统计特定事件的 发生次数要比分析一堆日志文件容易得多。
cwl_java
2019/12/26
1.1K0
大数据-MapReduce中的计数器
如何设计数据中台
横向规划即在数据中台规划初期,需要打通企业各个业务系,打破数据孤岛现象。其实就是我们建设数据仓库的阶段。比如电信业务,我们要把客户、账务、客服、营销等业务板块打通数据,全盘考虑,融通数据形成数据资产。
数据社
2020/05/28
1.5K0
如何设计数据中台
python比较两个文件的差异
使用python脚本比较两个文件的差异内容并输出到html文档中,可以通过浏览器打开查看。
py3study
2020/01/07
4.6K0
用好collections模块,对李白诗集进行字频统计
初学Python的人很可能会遇到字频统计这样的练习题,那么很容易会想到使用for循环来做。
朱卫军 AI Python
2022/04/03
3930
用好collections模块,对李白诗集进行字频统计
两个目录中,删除其中一个目录中同名文件的做法
假设现在有一个目录/mnt/data,还有另外一个目录/opt/data,需要删除/opt/data目录中和/mnt/data目录中的同名文件。 巧妙做法:利用xargs 实例如下: [root@centos6-vm01 ~]# ll /mnt/data/ total 0 -rw-r--r--. 1 root root 0 Jan 10 23:24 anhui -rw-r--r--. 1 root root 0 Jan 10 23:24 bobo -rw-r--r--. 1 root root 0 Jan
洗尽了浮华
2018/01/23
1.5K0
内存中的Python:Python引用计数指南
Python中的变量是内存引用。如果输入x = [1,2]时会发生什么?[1,2]是对象。
天道Vax的时间宝藏
2021/08/11
1.4K0
如何区分数字频率计的分辨率和精度?
通常人们会认为数字频率计显示位数越多,测量结果越精确,其实这个想法并不一定正确。通常犯的一个错误就是把数字频率的分辨率和精度等同起来。它们的确相互联系,但却是不同的概念。下面就为大家详细介绍一下数字频率计分辨率和精度的区别以及影响。
时频专家
2020/06/12
9010
MapReduce的输入文件是两个
马 克-to-win @ 马克java社区:这一小节,我们将继续第一章大数据入门的HelloWorld例子做进一步的研究。这里,我们研究如何输入文件是两个文件。
马克java社区
2021/07/05
3400

相似问题

文件中的字频计数器

42

计数字频率

11

计数字频率

11

字频计数Java 8

1018

字频计数器

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文