# tfidfkdong
## 文本分词后利用tfidf算法计算每个文档的tfidf值,以便后期跑实验使用
1.读取文件夹下的文档并分词
[ReadFiles类的使用](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/xudong/ReadFiles.java)
readFile方法:读取所有文件夹下的文件路径,返回一个list文件路径列表
readContent方法:将一个文档中的所有内容读成一个字符串,返回一个string文档内容
readFileAllContent方法:将所有文档中的内容读到一起,返回一个map,key是文档名,value是文档内容
cutWordtoMap方法:将每个文档中内容分词,返回一个map,key是文档名,value是分完词后的内容,是一个字符串,单词以空格分割。
注:分词软件,[张华平分词软件:](http://ictclas.nlpir.org/downloads)
2.读取分完词的文档并计算每个文档的单词tfidf的值
[Tfidf类的使用](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/xudong/Tfidf.java)
该类中定义了两个静态变量:一个是文档索引一个是单词索引
static Map<String, Integer> docIndex=new HashMap<String, Integer>();
static Map<String, Integer> wordIndex=new LinkedHashMap<String, Integer>();
saveIndex方法:String wordfile,String docfile,Map<String,String> doc_words三个参数,该方法将步骤1中分完词的map传进来,处理成文档索引和单词索引并保存到文件中。
tfCalculate方法:String wordAll参数是分完词的文档内容,计算每个文档中单词的tf值,并返回一个map,key是单词,value是单词tf值
tfidfCalculate方法:int D, Map<String,String> doc_words,Map<String,Float> tf三个参数,D是所有文档的数量,doc_words是步骤1中分完词的map,tf是单个文档的单词的tf值。
3.程序主类
[ComputeTfIdf类的使用](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/xudong/ComputeTfIdf.java)
3.1首先创建一个ReadFiles对象,将文件读到map,对应的是(文档名,文档内容)Map<String,String> doc_content=rf.readFileAllContent(filepath);
3.2分词 Map<String,String> doc_words=rf.cutWordtoMap((HashMap<String, String>) doc_content);计算总文档数量int D=doc_words.keySet().size();
3.3调用saveIndex方法,创建文档索引和单词索引,然后保存文档索引和单词索引到文件 Tfidf.saveIndex(wordfile, docfile, doc_words);
3.4计算每个文档的单词的tfidf值并保存到文本
4.主程序入口
[Test类main方法](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/xudong/Test.java)
String filepath="";//定义文档的文件路径,是一个文件夹
String outputPath="";//定义输出文件
String docfile="";//定义文档索引输出路径
String wordfile="";//定义单词索引输出路径
ComputeTfIdf.compute(filepath, outputPath, docfile, wordfile);
5.工具类
[FileUtils类](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/xudong/FileUtils.java)
此类是HFUT电商所杜非师兄编写,[他的github地址:](https://github.com/df19900725)
本人自己写的一个简单的FileUtils类,用来读取文件夹或文件的下的内容并作相关的处理,然后保存到文本
[FileUtils](https://github.com/xudongMk/tfidfkdong/blob/master/textRankdong/src/Files/FileUtils.java)
java编写的文本分词后利用tfidf计算每个文档的单词的tfidf值,并保存到文件中.zip
需积分: 0 154 浏览量
更新于2023-10-04
收藏 12KB ZIP 举报
在IT领域,文本处理是一项非常重要的任务,尤其是在信息检索、自然语言处理和机器学习中。本项目涉及到的是使用Java编程语言进行文本分词,并通过TF-IDF(Term Frequency-Inverse Document Frequency)算法来计算每个文档中单词的权重,然后将这些值保存到文件中。下面我们将详细探讨这个过程。
让我们理解一下什么是TF-IDF。TF-IDF是一种在信息检索和文本挖掘中用于评估一个词在文档中的重要性的统计方法。TF(Term Frequency)是指一个词在文档中出现的频率,而IDF(Inverse Document Frequency)是该词在整个文档集合中出现的逆文档频率。TF-IDF的值是这两者的乘积,它平衡了词频和文档中词的稀有性,使得那些在大量文档中普遍存在的词的权重降低,而在少数文档中出现的词的权重提高。
在这个项目中,我们先需要对文本进行分词。分词是将连续的文本分割成有意义的语言单元,如单词或短语。在Java中,我们可以使用开源库如jieba分词或者Stanford NLP来进行分词工作。jieba分词是中国最流行的中文分词库之一,它支持精确模式、全模式、搜索引擎模式等多种分词策略。而Stanford NLP则是一个强大的NLP工具包,对于英文分词效果极佳,同时也有一定的中文处理能力。
接下来,我们需要计算每个文档中每个词的TF值。TF值可以简单地定义为一个词在文档中出现的次数除以文档的总词数。为了防止频繁出现的常用词(停用词)对结果产生过大的影响,通常会去除这些词后再计算TF值。
然后是计算IDF值。IDF值的计算公式通常是:IDF = log(总文档数 / (1 + 文档包含该词的数量))。这里的总文档数是整个文档集合的数量,文档包含该词的数量是指包含这个词的文档数加一,加一是为了避免除以零的情况。
TF-IDF值就是TF值与IDF值的乘积。对于每个文档,我们可以创建一个词频矩阵,其中的每个元素表示一个词在该文档中的TF-IDF值。这种矩阵形式方便后续的数据分析和处理,例如文档相似度计算或建立倒排索引。
在Java中,我们可以使用Apache Lucene这样的全文搜索引擎库来实现TF-IDF的计算。Lucene提供了一系列接口和类,如`TfidfSimilarity`和`TFIDFWeight`,可以方便地进行TF-IDF计算。此外,也可以自定义逻辑来实现这个过程。
将计算得到的TF-IDF值保存到文件中,通常采用CSV或TSV格式,以便于其他程序读取和分析。文件结构可能包括文档ID、单词和对应的TF-IDF值,如“doc_id,word,tfidf_value”。
这个项目涵盖了文本预处理、分词、TF-IDF计算和数据存储等多个步骤,对于理解和应用文本挖掘技术具有很好的实践意义。通过这个项目,开发者可以掌握如何在Java环境中处理文本数据,提升文本分析和信息检索的能力。
天天501
- 粉丝: 622
- 资源: 5905