改进后的单词计数器

原创 2004年12月29日 08:47:00

package treeroot.util.wordcount;


/**
 * The class is the elment of the Word Set return by WordCount.
 * The instance have the word value and the apperance times.
 * <strong>NOTE</strong>:the word ignore the case,
 * so word "hello","Hello","HELLO" are
 * the same word.
 *
 * @author  treeroot
 * @version 1.0, 04/12/06
 * @see WordCount
 */
public class Word{
 private String value;
 /**
  * Construct a Word object,has the count 1.
  */
 public Word(String value){
  this.value=value.toLowerCase();
 }
 private int count=1;
 
 //this method is only invoked by WordCount class
 protected void increase(){
  count++;
 }
 
 /**
  * @return the word as the lower case.
  */
 public String getWord(){
  return value;
 }
 /**
     * @return the apperance times of this word.
     */
 public int getCount(){
  return count;
 }
 /**
     * @return if the word was the same ignore case,return true.
     */
 public boolean equals(Object o){
  return (o instanceof Word)&&(((Word)o).value.equals(value));
 }
 /**
     * @return the hashCode of the word.
     */
 public int hashCode(){
  return value.hashCode();
 }
}


package treeroot.util.wordcount;
/**
 * WordCount provides a static method to count the words of a text.
 * You can give a hyphens that the words can use to connect letters,
 * or it will be use the default hyphens.
 * the dafault hyphens are '-','_',''',but the first letter must be
 * a English letter(a-z,A-Z).
 * SO: a-b,a-b,it's are words,but the -ab,_ab,'as are't a word.
 * You can use a comparator to sort the Set,by dictionary or frequency,
 * if you don't give a comparator,dicitonary comparator will be used.
 *
 */

import java.util.Map;
import java.util.Set;
import java.util.HashMap;
import java.util.TreeSet;
import java.util.Comparator;
import java.util.Collections;

public class WordCount
{
 //the default hyphen collection.
 private static String regex="//-_'";
 
 /**
     * return the words as a Set by default comparator and hyphens
     * @see #getWordCount(String,String,Comparator)
     */
 public static Set getWordCount(String text){
  return getWordCount(text,regex,WordCount.DICTIONARY_ORDER);
 }
 
 /**
     * return the words as a Set by the default comparator
     * @see #getWordCount(String,String,Comparator)
     */
 public static Set getWordCount(String text,String regex){
  return getWordCount(text,regex,WordCount.DICTIONARY_ORDER);  
 }
 
 /**
  * return the words as a Set by the default hyphens
     * @see #getWordConut(String,String,Comparator)
     */
 public static Set getWordCount(String text,Comparator order){
  return getWordCount(text,regex,order); 
 }
 /**
  *  return the words as a Set by the text,the word are all changed to
  *  lower case.
     *  @param text  the English text you want to split.
     *  @param regex the hyphens that the word can use.
     *  @param order the order of the Set returned by.
     *  @return the word Set that the text contains.
     */ 
 public static Set getWordCount(String text,String regex,Comparator order){
  Map map=new HashMap();
  String split1="[^a-zA-Z"+regex+"]+";
  String split2="[^a-zA-Z]+"+regex+"[^a-zA-Z]*";
  String split3="[^a-zA-Z]*"+regex+"[^a-zA-Z]+";
  
  String reg = "("+split2+")|("+split3+")|("+split1+")";
  String[] words = text.split(reg);
  for(int i=0;i<words.length;i++){
   Object o=new Word(words[i]);
   if(map.containsKey(o)){
    ((Word)map.get(o)).increase();
   }
   else {
    map.put(o,o);
   }
  }
  
  Set sort=new TreeSet(order);
  sort.addAll(map.keySet());
  
  return Collections.unmodifiableSet(sort);
 }
 
 /**
     * the sort constant of DICTIONARY,the default sort contant.
     */
 public static final Comparator DICTIONARY_ORDER=new Comparator(){
  public int compare(Object o1,Object o2){
   Word w1=(Word)o1;
   Word w2=(Word)o2;
   return w1.getWord().compareTo(w2.getWord());
  }
 };
 /**
     * the sort contant of FREQUENCY,the words was sorted by the apperance
     * times in the Set.
     */
 public static final Comparator FREQUENCY_ORDER =new Comparator(){
  public int compare(Object o1,Object o2){
   Word w1=(Word)o1;
   Word w2=(Word)o2;
   int i=w2.getCount()-w1.getCount();
   if(i==0){
    return w1.getWord().compareTo(w2.getWord());
   }
   return i;
  }
 };
}


 

数据结构实训——单词检索统计程序

/***********************************************************   * 版权所有 (C)2016,WuHao  *   * 项目名称:单词检索...
  • wuhao5211314
  • wuhao5211314
  • 2016年12月30日 15:03
  • 1100

MapReduce计数器详解

计数器:计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析。 1. 内置计数器 ...
  • Xw_Classmate
  • Xw_Classmate
  • 2016年03月22日 15:44
  • 1856

Java实现的高效计数器

1.  2.  3.  4. 性能差异 5. Keith的评论(如下所示) 6. 总结 原文地址:Efficie...
  • snarlfuture
  • snarlfuture
  • 2013年11月30日 23:55
  • 6343

Verilog HDL计数器设计(作业1)

Verilog HDL计数器设计(作业1)目录:Verilog HDL计数器设计作业1 设计内容 信号定义 RTL设计图 Quartus RTL电路图 计数器波形仿真图 计数器代码 设计内容 信号定义...
  • gyh3313
  • gyh3313
  • 2016年11月20日 22:24
  • 2223

HBase总结(9)--计数器

一、介绍 如果在HBase中使用某一行的值进行Put操作进行计数器功能,为了保证原子性操作,必然会导致一个客户端对计数器所在行的资源占有,如果在大量进行计数器操作时,则会占有大量资源,并且一旦某一客...
  • u011518678
  • u011518678
  • 2016年03月16日 20:40
  • 937

作业1:计数器仿真实验作业

计数器在电路复位后会循环的从0值递增计数到最大值,计数最大值是一个循环变化的过程,计数器复位之后,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环。...
  • wickedwtq
  • wickedwtq
  • 2016年11月13日 16:31
  • 619

虚拟项目——计数器的verilog实现

在各种条件允许的情况下控制一个寄存器进行向上或向下的计数。当达到门限值的时候进入报警系统,产生一个信号输出持续八个单位并清零寄存器。...
  • qq_27712865
  • qq_27712865
  • 2015年10月27日 17:57
  • 1649

十进制计数器的设计

十进制计数器的设计 总结:虽然在功能上完全实现了课题的要求,即实现了十进制计数器的设计的全部要求,但是相应的不足之处还应该考虑到。虽然是细节问题,但往往可以决定成败,试着理解程序。...
  • a1260157543
  • a1260157543
  • 2015年10月20日 18:50
  • 1877

Hadoop之——自定义计数器

1、Mapper类的实现 /** * KEYIN 即k1 表示行的偏移量 * VALUEIN 即v1 表示行文本内容 * KEYOUT 即k2 表示行中出现的单词 * VALU...
  • l1028386804
  • l1028386804
  • 2015年05月28日 00:01
  • 1373

计数器仿真测试实验

手工绘制的电路结构RTL图 计数器代码 ////////////////////////// 计数器代码  /////////////////////////////// mod...
  • wozhenbang
  • wozhenbang
  • 2016年11月24日 13:19
  • 654
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改进后的单词计数器
举报原因:
原因补充:

(最多只允许输入30个字)