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"); } } }
相关推荐
Java词频统计程序MVC是一种基于Java编程语言实现的、采用Model-View-Controller(MVC)设计模式的软件架构来统计文本中单词出现频率的应用。MVC模式是软件工程中一种常用的设计模式,用于将应用程序的业务逻辑、用户...
### Java词频统计算法(使用单词树) #### 背景与问题 在文本处理领域,词频统计是一项常见的任务。例如,在自然语言处理、搜索引擎优化、文档分类等应用场景中,了解某个词语出现的频率至关重要。传统的词频统计...
使用词表,遍历替换文章单词,再进行词频统计 使用两重循环,分别遍历时态替换表 lemmas.txt 和介词表 disablewords.txt 替换文章重复时态和介词,之后使用 treeMap 统计对应词的数量
统计文本文档中汉字、字母、数字等的频次,并输入到新的文本文档中去。
THULAC Lite Java v1是一个专门用于中文文本处理的工具包,主要功能是进行中文文本的分词和词频统计。这个压缩包包含了THULAC Lite的Java版本,即`THULAC_java_v1.jar`,它是一个可执行的Java程序,能够帮助开发者在...
通过以上知识点的综合应用,我们可以构建出一个功能完备的Java词频统计器,它不仅能够处理中文文章,也能应对英文文本,并且具备用户友好的交互界面。这个项目不仅可以锻炼编程技能,也是对自然语言处理技术的一次...
在这个场景下,我们关注的是一个实现文本分类过程的工具,特别强调了词频统计的环节,它对于理解文本内容和特征提取至关重要。这个工具不仅能够对文本进行基本的处理,如分词、词干提取和去除停用词,还提供了用户...
这个名为“JAVA-词频统计工具.zip”的压缩包提供了一个使用Java实现的词频统计工具,它可以帮助我们了解一段文本中各个词汇出现的频率。以下是对该工具及其相关知识点的详细解释: 1. **Java编程语言**: Java是一...
本项目聚焦于一个具体的文本处理功能——词频统计,通过Java语言实现。词频统计是指计算一段文本中各个词汇出现的次数,它可以帮助我们理解文本的主题和结构。下面将详细介绍这个Java实现的词频统计工具及其相关知识...
该程序是一个java的中文汉字字频统计,从诸如txt文件中读取语料,然后生成一个前100个高频汉字的字频统计结果的txt文件,并且还会生成前100、200、600、2000、等汉字的字频和的另一个txt文件。该程序是借用treeMap来...
在本项目“java大作业之词频统计”中,我们主要关注的是如何使用Java 8的Stream API来实现一个高效且简洁的词频统计程序。这个项目不仅包含了源代码实现,还提供了答辩PPT,方便理解和展示项目的核心思想。下面我们...
本项目利用这些数据结构进行英文词频统计,结合Swing构建用户界面,提供了一种交互式的文本分析工具。 Map接口在Java中用于存储键值对,它允许通过键来快速查找对应的值。在这个词频统计项目中,Map可以用来存储...
在这个“Storm API实现词频统计”的案例中,我们将深入探讨如何利用Java编程语言和Storm API来构建一个实时的词频统计应用。 首先,我们需要理解Storm的基本架构。Storm由多个组件构成,包括Spout(数据源)、Bolt...
本教程将详细介绍如何使用IKAnalyzer进行分词处理,并实现词频统计。 首先,我们需要下载并引入IKAnalyzer到项目中。你可以从官方网站或者GitHub仓库获取最新版本的IKAnalyzer源码或jar包。在Eclipse中,可以通过...
一、利用Java程序实现词频统计 二、利用Scala程序实现词频统计 三、利用Python程序实现词频统计 四、利用Akka和Scala实现词频统计 五、利用MapReduce实现词频统计 六、利用Hive实现词频统计 七、利用Storm实现词频...
自然语言理解 关于词频统计的代码 利用treemap来完成
【Spark技术实践——词频统计】在大数据领域,Spark作为一种高效的数据处理框架,以其快速、通用和可扩展性而受到广泛关注。本实践旨在基于已经搭建的Hadoop平台,利用Spark组件进行文本词频统计,以此深入理解Scala...
这个"林敏锐-词频统计.zip"文件包含了一个使用Java实现的多线程词频统计程序,以及相关的解决方案文档。让我们详细了解一下这个项目所涉及的知识点。 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,它...