我正在尝试使用mahout对一组文档(作为文本文件)执行TFIDF,以便按照本指南进行计算.
我已经成功创建了字典和向量权重,现在我正在尝试访问输出.在指南中,它说"你可以轻松地将生成的字典文件的内容加载到Map中,其中令牌索引为键,令牌为值."
我不知道如何将这个文件加载到地图中,因为他建议,有人知道它是如何完成的吗?
我从文本文件目录创建了我的向量,运行"./mahout seq2sparse ..."时遇到的一个问题是控制分析器的-a标志 - 应该是lucene的StandardAnalyzer.当尝试使用此标志运行时,我收到了ClassNotFoundException,但删除该标志解决了问题,我认为默认分析器也是这个,因此输出应该与示例相同.
如果有人知道如何将这本字典加载到地图中,我将永远感激不尽!
詹姆士
为什么tf-idf模型gensim会在我转换语料库后抛弃术语和计数?
我的代码:
from gensim import corpora, models, similarities
# Let's say you have a corpus made up of 2 documents.
doc0 = [(0, 1), (1, 1)]
doc1 = [(0,1)]
doc2 = [(0, 1), (1, 1)]
doc3 = [(0, 3), (1, 1)]
corpus = [doc0,doc1,doc2,doc3]
# Train a tfidf model using the corpus
tfidf = models.TfidfModel(corpus)
# Now if you print the corpus, it still remains as the flat frequency counts.
for d in corpus:
print d
print
# …Run Code Online (Sandbox Code Playgroud) 我想用scikit-learn尝试tfidf(或者nltk或者对其他建议持开放态度).我拥有的数据是相当多的讨论论坛帖子(~65k)我们已经抓取并存储在mongoDB中.每个帖子都有帖子标题,帖子的日期和时间,帖子消息的文本(或者re:如果对现有帖子的回复),用户名,消息ID以及是否是子帖或父帖(在帖子中) ,你有原始帖子,然后回复此操作,或嵌套回复,树).
我想每个帖子,将是一个单独的文档,类似于20newsgroups,每个文档将有我在顶部提到的字段,并在底部的消息发布的文本,我将从mongo中提取并写入到每个文本文件所需的格式.
为了将数据加载到scikit,我知道的:
http://scikit-learn.org/dev/modules/generated/sklearn.datasets.load_files.html (但我的数据未分类)
的http:// scikit学习. org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html - 对于输入,我知道我会使用文件名,但因为我会有大量的文件(每个帖子),有没有办法要么从文本文件中读取文件名?或者是否有某些示例实现有人可以指向我?
此外,任何关于为每个这些讨论论坛帖子构建文件名的建议,以便稍后识别我何时获得tfidf向量和余弦相似性数组
谢谢
假设我有这样的字典:
docDict = {"alpha": ["a", "b", "c", "a", "b"], "bravo": ["b", "c", "d", "c", "d"]}
Run Code Online (Sandbox Code Playgroud)
而我想要做的就像计算"文档频率":假设每个字典项都是一个文档,我有一个特定的单词,那么有多少文档包含该单词?
我看过很多帖子告诉我如何计算频率,但是如果"a"在文档中出现两次"alpha",我只需要计数为1.所以"频率" "a"应该是1,"c"应该是2.
我知道我可以迭代整个文档字典,并在文档中找到单词时添加计数器.或者我可以首先使每个文档中的单词都是唯一的,然后组合所有文档并计算单词.
但我认为有更好的方法,更有效的方式.有任何想法吗?
顺便说一下,有什么方法可以保持字典的结构吗?在这个例子中,我想得到一个结果{"alpha": {'c': 2, 'b': 2, 'a': 1}, "bravo": {'c': 2, 'b': 2, 'd': 1}
更新
如果在这里我只有一个列表(类似的东西[["a", "b", "c", "a", "b"], ["b", "c", "d", "c", "d"]]),我怎么能得到像这样的结果列表[[1, 2, 2, 0], [0, 2, 2, 1]].
我不知道.关键是要扩展每个列表并确保术语的顺序.思考?
我使用 scikit-learn 的 Tfidf 转换器得到了“奇怪”的结果。通常,我希望出现在语料库中所有文档中的单词的 idf 等于 0(不使用任何平滑或规范化),因为我将使用的公式是文档中文档数量的对数语料库除以包含该术语的文档数。显然(如下图所示)与我的手动实现相比,scikit-learn 的实现为每个 idf 值增加了一个。有人知道为什么吗?再次注意,我已将平滑和归一化设置为 None/False。
In [101]: from sklearn.feature_extraction.text import TfidfTransformer
In [102]: counts
Out[102]:
array([[3, 0, 1],
[2, 0, 0],
[3, 0, 0],
[4, 0, 0],
[3, 2, 0],
[3, 0, 2]])
In [103]: transformer = TfidfTransformer(norm=None, smooth_idf=False)
In [104]: transformer
Out[104]:
TfidfTransformer(norm=None, smooth_idf=False, sublinear_tf=False,
use_idf=True)
In [105]: tfidf = transformer.fit_transform(counts)
In [106]: tfidf.toarray()
Out[106]:
array([[ 3. , 0. , 2.09861229],
[ 2. , 0. , 0. ],
[ 3. , 0. …Run Code Online (Sandbox Code Playgroud) 我有一个场景,我从互联网上检索信息/原始数据,并将它们放入各自的json或.txt文件中.
从那以后,我想通过使用tf-idf来计算每个文档中每个术语的频率及其余弦相似度.
例如:有50个不同的文档/文本文件,包含5000个单词/字符串,每个我想从第一个文档/文本中取出第一个单词,并比较所有总共250000个单词找到它的频率然后对第二个单词和等等所有50个文件/文本.
每个频率的预期输出将是0 -1
我怎么能这样做.我一直指的是sklear包,但是大多数只包含每个比较中的几个字符串.
information-retrieval nltk tf-idf python-2.7 cosine-similarity
我正在尝试在一些训练和测试数据上训练svm模型.如果我将测试和训练数据结合起来,程序运行良好,但是如果我将它们分开并测试它所说的模型精度
Traceback (most recent call last):
File "/home/PycharmProjects/analysis.py", line 160, in <module>
main()
File "/home/PycharmProjects/analysis.py", line 156, in main
learn_model(tf_idf_train,target,tf_idf_test)
File "/home/PycharmProjects/analysis.py", line 113, in learn_model
predicted = classifier.predict(data_test)
File "/home/.local/lib/python3.4/site-packages/sklearn/svm/base.py", line 573, in predict
y = super(BaseSVC, self).predict(X)
File "/home/.local/lib/python3.4/site-packages/sklearn/svm/base.py", line 310, in predict
X = self._validate_for_predict(X)
File "/home/.local/lib/python3.4/site-packages/sklearn/svm/base.py", line 479, in _validate_for_predict
(n_features, self.shape_fit_[1]))
ValueError: X.shape[1] = 19137 should be equal to 4888, the number of features at training time
Run Code Online (Sandbox Code Playgroud)
这里的测试集大于列车集.因此测试集自然具有比trainset更多的特征.因此它给出值错误.
这是我的代码:
def load_train_file():
with open('~1k comments.csv',encoding='ISO-8859-1',) as …Run Code Online (Sandbox Code Playgroud) 我已经预先清理了数据,下面显示了前4行的格式:
[IN] df.head()
[OUT] Year cleaned
0 1909 acquaint hous receiv follow letter clerk crown...
1 1909 ask secretari state war whether issu statement...
2 1909 i beg present petit sign upward motor car driv...
3 1909 i desir ask secretari state war second lieuten...
4 1909 ask secretari state war whether would introduc...
Run Code Online (Sandbox Code Playgroud)
我已将train_test_split()称为如下:
[IN] X_train, X_test, y_train, y_test = train_test_split(df['cleaned'], df['Year'], random_state=2)
[Note*] `X_train` and `y_train` are now Pandas.core.series.Series of shape (1785,) and `X_test` and `y_test` are also …Run Code Online (Sandbox Code Playgroud) 我有一个客户评论语料库,想要识别罕见的单词,对我来说,这些单词出现在不到1%的语料库文档中.
我已经有了一个可行的解决方案,但它对于我的脚本来说太慢了:
# Review data is a nested list of reviews, each represented as a bag of words
doc_clean = [['This', 'is', 'review', '1'], ['This', 'is', 'review', '2'], ..]
# Save all words of the corpus in a set
all_words = set([w for doc in doc_clean for w in doc])
# Initialize a list for the collection of rare words
rare_words = []
# Loop through all_words to identify rare words
for word in all_words:
# Count in how many …Run Code Online (Sandbox Code Playgroud) 我正在关注本文档集群教程。作为输入,我提供了一个txt文件,可以在此处下载。它是3个其他txt文件的组合文件,并使用\ n进行了分隔。创建tf-idf矩阵后,我收到此警告:
,, UserWarning:您的stop_words可能与您的预处理不一致。标记停用词会生成标记['abov','afterafter','alon','alreadi','always','ani','anoth','anyon','anyth','anywher','becam' ,'becaus','becom','befor','besid','cri','describ','dure','els','elsewher','empti','everi','everyon',' Everyth”,“ everywher”,“ fifti”,“ forti”,“ henc”,“ hereaft”,“ herebi”,“ howev”,“ hundr”,“ inde”,“ mani”,“ meanwhil”,“ moreov” ,“ nobodi”,“ noon”,“ noth”,“ nowher”,“ onc”,“ onli”,“ otherwis”,“ ourselv”,“ perhap”,“ pleas”,“ sever”,“ sinc”,“ sincer”,“ sixti”,“ someon”,“ someth”,“ sometim”,“ somewher”,“ themselv” ,“ thenc”,“ thereaft”,“ therebi”,“ therefor”,“ togeth”,“ twelv”,“ twenti”,“ veri”,“ whatev”,“ whenc”,“ whenev”,“ wherea”,“ whereaft”,“ wherebi”,“ wherev”,“ whi”,“ yourselv”]不在stop_words中。“ stop_words”。%sorted(不一致))”。'thereaft','therebi','therefor','togeth','twelv','twenti','veri','whatev','whenc','whenev','wherea','whereaft','wherebi ','wherev','whi','yourselv']不在stop_words中。“ stop_words”。%sorted(不一致))”。'thereaft','therebi','therefor','togeth','twelv','twenti','veri','whatev','whenc','whenev','wherea','whereaft','wherebi ','wherev','whi','yourselv']不在stop_words中。“ stop_words”。%sorted(不一致))”。
我想这与复词和停用词的顺序有关,但是由于这是我在txt处理中的第一个项目,我有点迷路,而且我不知道该如何解决...
import pandas as pd
import nltk
from nltk.corpus import stopwords
import re
import os …Run Code Online (Sandbox Code Playgroud) tf-idf ×10
nlp ×4
python ×4
scikit-learn ×4
nltk ×3
counter ×2
dictionary ×1
frequency ×1
gensim ×1
hadoop ×1
imblearn ×1
java ×1
knn ×1
lucene ×1
mahout ×1
oversampling ×1
python-2.7 ×1
python-3.x ×1
stemming ×1
stop-words ×1
svm ×1