写好了分词的基本算法, 让我们看看他的基本应用吧-----如何比较2个文本的相似程度。大家先看下, google 吴军的科普文章(http://www.googlechinablog.com/2006/07/12.html , http://googlechinablog.com/2006/06/blog-post_27.html )。 很有意思的文章。不过还是很简单, 不足够实现代码。

看上面的公式, 如何计算TF/IDF. 仔细体会下这个公式, 是不是上面公式的翻啊, 哈哈。。。。
Map<Integer, Word> src = (Map<Integer, Word>) srcDoc.getData();
Map<Integer, Word> dest = (Map<Integer, Word>) destDoc.getData();
Word w1, w2;
double tf = 0;
double idf_x = 0;
double idf_y = 0;
double count = 0;
Set<Integer> set = src.keySet().size() > dest.keySet().size() ? dest.keySet() : src.keySet();
for (Integer i : set) {
w1 = src.get(i);
if (w1 != null) {
w2 = dest.get(i);
if (w2 != null) {
tf += w1.eigenvalue * w2.eigenvalue; // d1*c1
idf_x += w1.eigenvalue * w1.eigenvalue; // |d1|
idf_y += w2.eigenvalue * w2.eigenvalue;// |c1|
count += 1;
}
}
}
idf_x = Math.sqrt(idf_x);
idf_y = Math.sqrt(idf_y);
return (tf / (idf_x * idf_y));
这个代码其他参数可以,或者数据结构,你都不用关心, w.eigenvalue 你肯定很关心这个值是怎么得到的。这是个分词后得到的一种特征值。 该词根据统计语言模型计算出来的一个值。 其实是个词的信息熵。 TF/IDF也是一个信息熵。不过是2个文本的差异。 特征值得计算:(如何来的, 可以去查看一些资料, 不列觉了)
double n1, n2;
for (Word w : words) {
if (w.position != -1) {
n1 = (double) w.frequency / (double) textLen;
n2 = Math.abs(Math.log(((double) D) / ((double) w.dicFrequency)));
w.eigenvalue = n1 * n2;
}
}
太晚了, 明天继续写, 哈哈。
分享到:
相关推荐
在这个项目实践中,我们首先需要对文档进行预处理,包括分词、去除停用词、标点符号等,得到分好词的句子。然后,对于每个句子,我们使用gensim库的Word2Vec模型将每个词转化为词向量。最后,通过一定的聚合策略(如...
标题 "人工智能-项目实践-搜索引擎-基于java开发的聚合搜索引擎" 暗示了这是一个关于使用Java编程语言实现人工智能在搜索引擎领域的实际应用项目。在这个项目中,我们将关注的重点是构建一个能够聚合多个数据源的...
Reduce阶段则负责聚合这些中间结果,进一步处理并输出最终结果。 **朴素贝叶斯算法:** 朴素贝叶斯算法基于贝叶斯定理,其核心思想是通过计算每个类别的先验概率和每个特征在每个类别下的条件概率,来预测新样本的...
DataFrame API 提供了丰富的操作选项,包括但不限于数据查询、转换、聚合等。这种API设计使得用户能够更方便地进行数据探索、预处理和机器学习建模等工作。 #### 基本统计(Basic Statistics) - **关联(Correlation)...
索引器则将抓取到的数据进行预处理(如分词、去重、建立倒排索引),以便快速查找;最后,检索器接收用户的查询,通过匹配算法在索引中找到相关网页,并返回结果。 在Python分布式爬虫方面,我们需要掌握如Scrapy-...
5. **评分系统**:Lucene使用TF-IDF(词频-逆文档频率)算法来计算文档的相关性。TF-IDF考虑了词在文档中的出现频率和在整个文集中的普遍程度,从而确定文档的相关度。 6. **过滤和高亮**:Lucene支持过滤器...
K-NN算法的基本思想是,将每篇文档与现有的K个最近邻进行比较,根据邻居的类别决定新文档的类别。初始时,所有文档都视为独立的类别,随着聚类过程的进行,相似的文档会被归并到同一类别。 在实际操作中,我们可能...
【新闻内容排重算法大全】 新闻内容排重算法主要用于识别和消除互联网上的重复内容,确保信息的多样性和原创性。以下是一些常见的排重...这些算法的应用对于搜索引擎优化、内容管理系统以及新闻聚合平台都至关重要。
Map阶段对每个文档进行分词,生成形如`(单词, 文档ID)`的键值对,Reduce阶段则计算每个单词的共现情况。 **5. MapReduce文档倒排索引算法** 在文档倒排索引中,Map阶段将文档分割为单词,生成`(单词, 文档ID列表)`...
### 基于STC的中文文本聚类算法 #### 摘要 本文提出了一种新型的中文文本聚类方法,旨在优化用户的检索...通过对现有技术的综合分析与改进,该算法不仅解决了传统方法存在的问题,还在实践中证明了其可行性和有效性。
这些算法可以评估查询词与文档的相关性。 6. **用户接口**:一个优秀的搜索引擎还需要有一个用户友好的界面,让用户能够方便地输入查询、浏览和筛选结果。HTML、CSS和JavaScript是构建前端界面的基础,而React或Vue...
2. 关键词优化:通过分析搜索引擎的算法,插件可以提供关键词密度建议,帮助用户优化文章中的关键词分布,避免过度优化或不足的问题。 3. 自动内链:插件可以智能地为网站内容添加内链,增强内部链接结构,提高搜索...
1. **文档预处理**:包括分词、去除标点符号、停用词过滤、词干提取等,目的是将文本转化为可处理的形式。 2. **创建词汇表**:收集所有文档中的独特单词,形成一个词汇表。 3. **文档向量化**:将每个文档转化为...
- 分词器与分析器:选择合适的分词器和分析器对文本进行预处理,影响搜索效果。 - 模糊搜索:支持模糊匹配和近似搜索,提高用户输入的容忍度。 - 断词提示:提供拼写检查和建议,改善用户体验。 7. **实时监控与...
中文分词是NLP的基础任务,因为中文没有明显的词边界,需要通过算法来识别词语。Ansj分词库由纳兰志祥开发,支持歧义消除、新词识别等功能,广泛应用于搜索引擎、情感分析和文本挖掘等场景。 "关键词匹配规则"是...
1. **分词(Tokenization)**:在Lucene中,分词是将输入的文档内容分解成一系列独立的、有意义的单元——称为“词元”(Tokens)。这个过程由分词器(Tokenizer)完成,它根据特定的语言规则将连续的字符序列切分成...
- **IK分词器原理**:从底层解释IK分词器的工作原理,包括其词典构建、分词算法等。 - **中文分词实战**:通过实战演练,学习如何利用IK分词器构建高效的中文搜索引擎。 - **源码级定制修改**:讲解如何根据实际需求...
- **排序与评分**:LUCENE根据TF-IDF(词频-逆文档频率)算法计算相关性,对搜索结果进行排序。 3. **搜索引擎构建步骤** - **初始化**:导入LUCENE库,设置索引目录。 - **文档分析**:使用Analyzer对文档内容...
1. **预处理**:将原始文档分词,去除停用词,转换为小写等。 2. **构建倒排索引**:为每个词创建一个索引,包含所有包含该词的文档及其词频。 3. **计算IDF**:统计每个词在文档集合中的文档频率,计算其对应的IDF...
- 分词器的核心部分包括:词典管理、动态词典加载、基于Aho-Corasick算法的多级模糊匹配、歧义消除策略等。 - 它还提供了对英文、数字及符号的处理能力,以及自定义分词规则的功能,使得用户可以根据具体应用需求...