`
java--hhf
  • 浏览: 308724 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多
package com.cmcm.goods_classification;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class WordProcess {
	
	private static final String DATASOURCEPATH = "D://mallet_data//0DataSource//Watches_Child//Sports_Watches";
	private static final String STOPWORDSPATH = "C://mallet-2.0.7//stoplists//en.txt";
	public static final String RESULTPATH = "D://automotives//result.txt";
	private static Map<String, Integer> dataHash = new HashMap<String, Integer>();
	private static Set<String> stopWordsSet = new HashSet<String>();
	
	public static void main(String[] args) throws Exception {
		loadStopWords();
		FileProcess.readFolder(DATASOURCEPATH);
		List<Map.Entry<String, Integer>> dataList = hashSort();
		FileProcess.writeFile(dataList);
	}
	
	public static void pruneText(String textPath) {
		String text = FileProcess.readFile(textPath).toLowerCase();// 将所有字母化为小写
		text = text.replaceAll("^[a-zA-Z0-9']|\\s+|\t|\r", " "); // 将非字母字符、多个空格回车换行均化为一个空格
		String words[] = text.split("\\s+");// 取出单词,并将单词存入数组中
		getFrequency(words);
	}
	
	public static void getFrequency(String[] words) {
		for (int i = 0; i < words.length; i++) {
			String key = words[i]; // key对应单词
			if ((dataHash.get(key) != null) && (!stopWordsSet.contains(key))) {
				int value = ((Integer) dataHash.get(key)).intValue(); // value对应单词出现的频率,单词已在map中存在则value+1
				value++;
				dataHash.put(key, new Integer(value));
			} else {
				dataHash.put(key, new Integer(1)); // 单词未在map中存在则value初始化为1
			}
		}		
	}
	
	public static List<Map.Entry<String, Integer>> hashSort() {
		List<Map.Entry<String, Integer>> list_Data = new ArrayList<Map.Entry<String, Integer>>(dataHash.entrySet());
		Collections.sort(list_Data, new Comparator<Map.Entry<String, Integer>>() {
			public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
				if (o2.getValue() != null && o1.getValue() != null && o2.getValue().compareTo(o1.getValue()) > 0) {
					return 1;
				} else {
					return -1;
				}
			}
		});
		return list_Data;
	}
	
	public static void loadStopWords() {
		String stopWordsText = FileProcess.readFile(STOPWORDSPATH);	
//		System.out.println(stopWordsText);
		String words[] = stopWordsText.split("\\s+|\\t|\\r|\\n");// 取出单词,并将单词存入数组中
		System.out.println(words.length);
		for(String word : words){
			stopWordsSet.add(word);
		}
	}
}

 

package com.cmcm.goods_classification;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class FileProcess {
	
	/**
	 * read all file in folder
	 * @param path
	 */
	public static void readFolder(String path) {
		int fileNum = 0, folderNum = 0;
		File file = new File(path);
		if (file.exists()) {
			LinkedList<File> list = new LinkedList<File>();
			File[] files = file.listFiles();
			for (File file2 : files) {
				if (file2.isDirectory()) {//System.out.println("DIR : " + file2.getAbsolutePath());
					list.add(file2);
					folderNum++;
				} else {
					System.out.println("FILE: " + file2.getAbsolutePath());
					WordProcess.pruneText(file2.getAbsolutePath());
					fileNum++;
				}
			}
			File temp_file;
			while (!list.isEmpty()) {
				temp_file = list.removeFirst();
				files = temp_file.listFiles();
				for (File file2 : files) {
					if (file2.isDirectory()) {//System.out.println("DIR : " + file2.getAbsolutePath());
						list.add(file2);
						folderNum++;
					} else {
						System.out.println("FILE: " + file2.getAbsolutePath());
						fileNum++;
						WordProcess.pruneText(file2.getAbsolutePath());
					}
				}
			}
		} else {
			System.out.println("File is not exist!");
		}
		System.out.println("    num dir is: " + folderNum + "\n    num file is: "+ fileNum);
	}
	
	/**
	 * read content from filePath and return content
	 * @param filePath
	 */
	public static String readFile(String filePath) {
		File file = new File(filePath);
		StringBuffer result = new StringBuffer();
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			while ((tempString = reader.readLine()) != null) {
				result.append(" ");
				result.append(tempString);
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}			
		}		
		return result.toString();
	}

	/**
	 * write content into filePath
	 * @param dataList
	 */
	public static void writeFile(List<Map.Entry<String, Integer>> dataList) {
		System.out.println("start write word and frequency");
		int size = dataList.size();
		File file = null;
		FileWriter fileWrite = null;
		PrintWriter pw = null;
		int count = 1;
		try {
			// if file exist ,append ; if not, create 
			file = new File(WordProcess.RESULTPATH);
			fileWrite = new FileWriter(file, true);
			pw = new PrintWriter(fileWrite);
			for (int i = 0; i < size; i++) {
				String word = dataList.get(i).getKey();
				int frequency = dataList.get(i).getValue();
//				System.out.println(word + " : " + frequency);
				pw.print(word);
				pw.print(" ");
				pw.print(count++);
				pw.print(" ");
				pw.print(frequency);
				pw.println();
			}
			pw.flush();
			fileWrite.flush();			
		} catch(IOException e) {
			e.printStackTrace();
		}finally{
			try {
				pw.close();
				fileWrite.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println("end write word and frequency");
		}
	}
}

 

0
5
分享到:
评论

相关推荐

    Java词频统计程序MVC

    Java词频统计程序MVC是一种基于Java编程语言实现的、采用Model-View-Controller(MVC)设计模式的软件架构来统计文本中单词出现频率的应用。MVC模式是软件工程中一种常用的设计模式,用于将应用程序的业务逻辑、用户...

    Java词频统计算法(使用单词树)

    ### Java词频统计算法(使用单词树) #### 背景与问题 在文本处理领域,词频统计是一项常见的任务。例如,在自然语言处理、搜索引擎优化、文档分类等应用场景中,了解某个词语出现的频率至关重要。传统的词频统计...

    Java词频统计SortWord.zip

    使用词表,遍历替换文章单词,再进行词频统计 使用两重循环,分别遍历时态替换表 lemmas.txt 和介词表 disablewords.txt 替换文章重复时态和介词,之后使用 treeMap 统计对应词的数量

    Java词频统计程序

    统计文本文档中汉字、字母、数字等的频次,并输入到新的文本文档中去。

    THULAC_lite_java_v1.zip_THULAC_java_v1.jar_THULAC分词_java词频统计_thu

    THULAC Lite Java v1是一个专门用于中文文本处理的工具包,主要功能是进行中文文本的分词和词频统计。这个压缩包包含了THULAC Lite的Java版本,即`THULAC_java_v1.jar`,它是一个可执行的Java程序,能够帮助开发者在...

    Java中英文文章词频分拣统计器【算法实现、一键分拣】

    通过以上知识点的综合应用,我们可以构建出一个功能完备的Java词频统计器,它不仅能够处理中文文章,也能应对英文文本,并且具备用户友好的交互界面。这个项目不仅可以锻炼编程技能,也是对自然语言处理技术的一次...

    文本分类之词频统计(分词、词干提取、去停用词、计算词频,有界面

    在这个场景下,我们关注的是一个实现文本分类过程的工具,特别强调了词频统计的环节,它对于理解文本内容和特征提取至关重要。这个工具不仅能够对文本进行基本的处理,如分词、词干提取和去除停用词,还提供了用户...

    JAVA-词频统计工具.zip

    这个名为“JAVA-词频统计工具.zip”的压缩包提供了一个使用Java实现的词频统计工具,它可以帮助我们了解一段文本中各个词汇出现的频率。以下是对该工具及其相关知识点的详细解释: 1. **Java编程语言**: Java是一...

    wordstat_java.rar_word stat_wordst_wordstat_java_词频 JAVA_词频统计

    本项目聚焦于一个具体的文本处理功能——词频统计,通过Java语言实现。词频统计是指计算一段文本中各个词汇出现的次数,它可以帮助我们理解文本的主题和结构。下面将详细介绍这个Java实现的词频统计工具及其相关知识...

    java版中文汉字字频统计

    该程序是一个java的中文汉字字频统计,从诸如txt文件中读取语料,然后生成一个前100个高频汉字的字频统计结果的txt文件,并且还会生成前100、200、600、2000、等汉字的字频和的另一个txt文件。该程序是借用treeMap来...

    java大作业之词频统计

    在本项目“java大作业之词频统计”中,我们主要关注的是如何使用Java 8的Stream API来实现一个高效且简洁的词频统计程序。这个项目不仅包含了源代码实现,还提供了答辩PPT,方便理解和展示项目的核心思想。下面我们...

    Java Map、List、Set Swing 英文词频统计

    本项目利用这些数据结构进行英文词频统计,结合Swing构建用户界面,提供了一种交互式的文本分析工具。 Map接口在Java中用于存储键值对,它允许通过键来快速查找对应的值。在这个词频统计项目中,Map可以用来存储...

    Storm API实现词频统计

    在这个“Storm API实现词频统计”的案例中,我们将深入探讨如何利用Java编程语言和Storm API来构建一个实时的词频统计应用。 首先,我们需要理解Storm的基本架构。Storm由多个组件构成,包括Spout(数据源)、Bolt...

    IKAnalyzer 实现分词 词频统计

    本教程将详细介绍如何使用IKAnalyzer进行分词处理,并实现词频统计。 首先,我们需要下载并引入IKAnalyzer到项目中。你可以从官方网站或者GitHub仓库获取最新版本的IKAnalyzer源码或jar包。在Eclipse中,可以通过...

    采用多种方式实现词频统计

    一、利用Java程序实现词频统计 二、利用Scala程序实现词频统计 三、利用Python程序实现词频统计 四、利用Akka和Scala实现词频统计 五、利用MapReduce实现词频统计 六、利用Hive实现词频统计 七、利用Storm实现词频...

    词频统计(未排序)

    自然语言理解 关于词频统计的代码 利用treemap来完成

    大数据技术实践——Spark词频统计

    【Spark技术实践——词频统计】在大数据领域,Spark作为一种高效的数据处理框架,以其快速、通用和可扩展性而受到广泛关注。本实践旨在基于已经搭建的Hadoop平台,利用Spark组件进行文本词频统计,以此深入理解Scala...

    林敏锐-词频统计.zip

    这个"林敏锐-词频统计.zip"文件包含了一个使用Java实现的多线程词频统计程序,以及相关的解决方案文档。让我们详细了解一下这个项目所涉及的知识点。 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,它...

Global site tag (gtag.js) - Google Analytics