tf-idf

how can I implement the tf-idf and cosine similarity in Lucene?

让人想犯罪 __ 提交于 2020-02-22 05:19:10
问题 How can I implement the tf-idf and cosine similarity in Lucene? I'm using Lucene 4.2. The program that I've created does not use tf-idf and Cosine similaryty, it only uses TopScoreDocCollector. import com.mysql.jdbc.Statement; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.util.Version; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index

基于TF-IDF的文本关键词抽取方法

牧云@^-^@ 提交于 2020-02-11 01:52:53
基于TF-IDF的文本关键词抽取方法 # * coding:utf-8_*_ # 作者 :XiangLin # 创建时间 :06/01/2020 15:10 # 文件 :基于TF-IDF的文本关键词抽取方法.py # IDE :PyCharm # 采用TF-IDF方法提取文本关键词 # http://scikit-learn.org/stable/modules/feature_extraction.html#tfidf-term-weighting import sys , codecs import pandas as pd import numpy as np import jieba . posseg import jieba . analyse from sklearn import feature_extraction from sklearn . feature_extraction . text import TfidfTransformer from sklearn . feature_extraction . text import CountVectorizer "" " TF - IDF权重: 1 、CountVectorizer 构建词频矩阵 2 、TfidfTransformer 构建tfidf权值计算 3 、文本的关键字 4 、对应的tfidf矩阵 "

相似性度量总结

末鹿安然 提交于 2020-02-07 02:59:32
cosine Jaccard系数(杰卡德系数) cosine更适合稠密空间,Jaccard和tfidf都适合稀疏空间. 狭义Jaccard相似度,计算两个集合之间的相似程度,元素的“取值”为0或1 对集合A和B,Jaccard相似度计算如下: Jaccard(A, B)= |A intersectB| / |A union B| 相似度数值在[0, 1]之间,当A==B的时候,为1. 优缺点,就是元素的取值只能是0或者1,无法利用更丰富的信息 由相似度,可以转换成Jaccard距离: Jaccard distance (A, B) = 1- Jaccard(A, B) TF-IDF 大概估计文本相似度时,使用TF就可以了。当我们使用文本相似度进行检索的类似场景时(如搜索引擎中的query relevence的计算),此时TF-IDF更好一些。 tf/tf-idf为每一个词汇计算得到一个数字,而word embedding将词汇表示成向量 tf/tf-idf在文本分类的任务中表现更好一些,而word embedding的方法更适用于来判断上下文的语义信息(这可能是由word embedding的计算方法决定的)。 曼哈顿距离 如果直接使用AB的欧氏距离(欧几里德距离:在二维和三维空间中的欧氏距离的就是两点之间的距离),则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即可

机器学习------NLP

旧城冷巷雨未停 提交于 2020-02-04 18:02:32
文章目录 文本相似度分析 情感分类 NLP: Natural Language Processing 自然语言处理 文本相似度分析 指从海量数据(文章,评论)中,把相似的数据挑选出来 步骤如下 : 1: 把评论翻译成机器看的懂的语言 中文分词 :把句子拆分成词语 工具:结巴分词 (Terminal中 pip install jieba -i https://pypi.douban.com/simple/ ) 结巴中文分析支持的三种分词模式包括: (1)精确模式:试图将句子最精确的切开,适合文本分析(默认模式) (2)全模式:把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义问题 (3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜素引擎分词 text = "我来到北京清华大学" seg_list = jieba.cut(text, cut_all=True) print("全模式:", "/ ".join(seg_list)) 执行结果: 全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学 自制字典进行关键字提取 ,字典范围小效果不好。 import jieba import jieba.analyse jieba.load_userdict('./mydict.txt') text = "故宫的著名景点包括乾清宫

NLTK: How to create a corpus from csv file

烈酒焚心 提交于 2020-02-02 15:09:28
问题 I have a csv file as col1 col2 col3 some text someID some value some text someID some value in each row, col1 corresponds to the text of an entire document. I would like to create a corpus from this csv. my aim is to use sklearn's TfidfVectorizer to compute document similarity and keyword extraction. So consider tfidf = TfidfVectorizer(tokenizer=tokenize, stop_words='english') tfs = tfidf.fit_transform(<my corpus here>) so then i can use str = 'here is some text from a new document' response

二月一号博客

Deadly 提交于 2020-02-02 00:39:47
今天学习自然语言的算法 TF-IDF 算法 : 关键词提取 TF-IDF 的主要思想就是:如果某个词在一篇文档中出现的频率高,也就是 TF 高;在语料库中其他的文档中很少出现,就是 DF 低,也就是 IDF 高,则认为这个词具有很好的类区分能力。 TF 为词频( Term Frequency ),表示词 t 在文档 d 中出现的频率,计算公式 其中, ni,j 是该词 ti 在文件 dj 中的出现次数,而分母则是在文件 dj 中所有字词的出现次数之和。 IDF 为逆文档频率( Inverse Document Frequency ),表示语料库中包含词 t 的文档的数目的倒数,计算公式: 其中, |D| 表示语料库中的文件总数, |{j:ti∈dj}| 表示 包含词 ti 的文件数目,如果该词语不在语料库中,就会导致被除数为零,因此一般情况下使用 1+|{j:ti∈dj}| 。 TF-IDF 在实际中主要是将二者相乘,也即 TF * IDF , 计算公式: 因此, TF-IDF 倾向于过滤掉常见的词语,保留重要的词语。例如,某一特定文件内的高频率词语,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的 TF-IDF 。 J ieba 中基于 TF-IDF 算法的关键词抽取: jieba代码: #_*_coding:utf-8_*_ import jieba.analyse

python中文文本分类

怎甘沉沦 提交于 2020-01-29 05:37:22
,中文文本分类流程: 预处理 中文分词 结构化表示-构建词向量空间 权重策略—TF-IDF 分类器 评价. 二,具体实现 预处理 1.1 打标签: 对评论数据打好标签,这里将汽车评论数据分为正面和负面两类。假设负面标签为0,正面标签为1. 1.2 整理数据集: 一般可分为训练集,验证集和测试集。为什么要这么分,这篇博文给了浅显的解释:训练集、验证集和测试集的意义本试验将数据分为训练集和测试集两类。 1.3 得到训练集预料库: 例如,训练集文本的路径:train_data/train_positive.xlsx , train_data/train_negtive.xlsx… 1.4 得到测试集语料库: 例如,测试集文本的路径:test_data/test_negtive.xlsx , test_data/test_positive.xlsx… 2 中文分词 2.1 概述 第1节预处理中的语料库都是没有分词的原始语料(即连续的句子,而后面的工作需要把文本分为一个个单词),现在需要对这些文本进行分词,只有这样,才能在基于单词的基础上,对文档进行结构化表示。 中文分词有其特有的难点(相对于英文而言),最终完全解决中文分词的算法是基于概率图模型的条件随机场(CRF),CRF的原理我们不细说了,直接调用中文分词的工具,这里用的是python第三方分词库jieba(所采用的算法就是条件随机场)

how to choose parameters in TfidfVectorizer in sklearn during unsupervised clustering

回眸只為那壹抹淺笑 提交于 2020-01-24 20:52:14
问题 TfidfVectorizer provides an easy way to encode & transform texts into vectors. My question is how to choose the proper values for parameters such as min_df, max_features, smooth_idf, sublinear_tf? update: Maybe I should have put more details on the question: What if I am doing unsupervised clustering with bunch of texts. and I don't have any labels for the texts & I don't know how many clusters there might be (which is actually what I am trying to figure out) 回答1: If you are, for instance,

文本数据挖掘一般步骤

霸气de小男生 提交于 2020-01-24 12:03:52
转载自潇一: 简要的谈谈文本数据挖掘的一般步骤 原文 一、获取文本 一般来说网络文本的获取,主要是网页的形式。我们要把网络中的文本获取形成一个文本数据库(数据集)。利用一个爬虫(这是另外一个知识点),抓取到网络中的信息。爬取的策略有广度和深度爬取;根据用户的需求,爬虫可以有主题爬虫和通用爬虫之分,主题爬取主要是在相关站点爬取或者爬取相关主题的文本,而通用爬虫则一般对此不加限制。爬虫可以自己写,当然现在网络上已经存在很多开源的爬虫系统。当然如果需要定制,自己写还是可以的。 二、对文本进行预处理 通过上面的步骤,我们已经获得了做菜的材料了,可以说,有了它,做出一道菜已经是顺利成当了。但是,菜好不好吃,可不可口,还需要经过很多步骤的。 我们知道,网页中存在很多不必要的信息,比如说一些广告,导航栏,html、js代码,注释等等,我们并不感兴趣的信息,可以delete掉。所以,我们还需要对文本中的信息进行筛选。这个步骤相当于我们做菜的洗菜过程,洗掉泥土等,吃起来才会口感好,否则,没有清洗过的菜,就算再牛逼的大厨,我想也很难做出佳肴吧。 三、分词系统 经过上面的步骤,我们会得到比较干净的素材。我们知道,文本中起到关键作用的是一些词,甚至主要词就能起到决定文本取向。比如说一篇文章讲的是体育还是娱乐,肯定是对文章中的中心词进行分析得到的结果。那么怎么样才能找到那些能够影响中心意思的词语呢? 别忘了

scikit learn implementation of tfidf differs from manual implementation

為{幸葍}努か 提交于 2020-01-23 01:21:09
问题 I tried to manually calculate tfidf values using the formula but the result I got is different from the result I got when using scikit-learn implementation. from sklearn.feature_extraction.text import TfidfVectorizer tv = TfidfVectorizer() a = "cat hat bat splat cat bat hat mat cat" b = "cat mat cat sat" tv.fit_transform([a, b]).toarray() # array([[0.53333448, 0.56920781, 0.53333448, 0.18973594, 0. , # 0.26666724], # [0. , 0.75726441, 0. , 0.37863221, 0.53215436, # 0. ]]) tv.get_feature_names