Python 3.x 如何转换数据并计算TFIDF值?
我的数据格式是:Python 3.x 如何转换数据并计算TFIDF值?,python-3.x,scikit-learn,nlp,tf-idf,Python 3.x,Scikit Learn,Nlp,Tf Idf,我的数据格式是: datas={[1,2,4,6,7],[2,3],[5,6,8,3,5],[2],[93,23,4,5,11,3,5,2],…} 数据中的每个元素都是一个句子,每个数字都是一个单词。我想获取每个数字的TFIDF值。如何使用sklearn或其他方法来实现它 我的代码: from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_extraction.text import
datas={[1,2,4,6,7],[2,3],[5,6,8,3,5],[2],[93,23,4,5,11,3,5,2],…}
数据中的每个元素都是一个句子,每个数字都是一个单词。我想获取每个数字的TFIDF值。如何使用sklearn或其他方法来实现它
我的代码:
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
datas = {[1,2,4,6,7],[2,3],[5,6,8,3,5],[2],[93,23,4,5,11,3,5,2]}
vectorizer=CountVectorizer()
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(datas))
print(tfidf)
我的代码不工作。错误:
Traceback (most recent call last): File
"C:/Users/zhuowei/Desktop/OpenNE-master/OpenNE-
master/src/openne/buildTree.py", line 103, in <module>
X = vectorizer.fit_transform(datas) File
"C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature_extraction\text.py", line 869, in fit_transform
self.fixed_vocabulary_) File "C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature_extraction\text.py", line 792, in _count_vocab
for feature in analyze(doc): File
"C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature_extraction\text.py", line 266, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words) File
"C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature_extraction\text.py", line 232, in <lambda>
return lambda x: strip_accents(x.lower())
AttributeError: 'int' object has no attribute 'lower'
回溯(最近一次调用上次):文件
“C:/Users/zhuowei/Desktop/OpenNE master/OpenNE-
master/src/openne/buildTree.py”,第103行,在
X=矢量器.fit_转换(数据)文件
“C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature\u extraction\text.py”,第869行,在fit\u转换中
self.fixed_词汇表文件“C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature\u extraction\text.py”,第792行,在
对于分析(文档)中的功能:文件
“C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature\u extraction\text.py”,第266行,中
标记化(预处理(self.decode(doc))、停止字)文件
“C:\Users\zhuowei\Anaconda3\lib\site-
packages\sklearn\feature\u extraction\text.py”,第232行,在
返回lambda x:strip_重音(x.lower())
AttributeError:“int”对象没有属性“lower”
您使用的是CountVectorizer
,它需要一组字符串。比如:
datas = ['First sentence',
'Second sentence', ...
...
'Yet another sentence']
但是您的数据是一个列表列表,这就是错误发生的原因。您需要将内部列表设置为字符串,以便CountVectorizer工作。您可以这样做:
datas = [' '.join(map(str, x)) for x in datas]
这将导致数据如下所示:
['1 2 4 6 7', '2 3', '5 6 8 3 5', '2', '93 23 4 5 11 3 5 2']
现在,CountVectorizer
可以使用此表单。但即使这样,您也不会得到正确的结果,因为默认情况是:
令牌\u模式:'(?u)\b\w\w+\b'
字符串正则表达式,表示组成
“令牌”,仅在analyzer=='word'时使用。默认的regexp选择
2个或更多字母数字字符的标记(标点符号完全不可用
忽略并始终视为令牌分隔符)
为了让它把你的数字当作单词,你需要改变它,这样它就可以接受单个字母作为单词:
vectorizer = CountVectorizer(token_pattern=r"(?u)\b\w+\b")
那么它应该会起作用。但是现在您的数字被更改为字符串您使用的是
CountVectorizer
,它需要一组字符串。比如:
datas = ['First sentence',
'Second sentence', ...
...
'Yet another sentence']
但是您的数据是一个列表列表,这就是错误发生的原因。您需要将内部列表设置为字符串,以便CountVectorizer工作。您可以这样做:
datas = [' '.join(map(str, x)) for x in datas]
这将导致数据如下所示:
['1 2 4 6 7', '2 3', '5 6 8 3 5', '2', '93 23 4 5 11 3 5 2']
现在,CountVectorizer
可以使用此表单。但即使这样,您也不会得到正确的结果,因为默认情况是:
令牌\u模式:'(?u)\b\w\w+\b'
字符串正则表达式,表示组成
“令牌”,仅在analyzer=='word'时使用。默认的regexp选择
2个或更多字母数字字符的标记(标点符号完全不可用
忽略并始终视为令牌分隔符)
为了让它把你的数字当作单词,你需要改变它,这样它就可以接受单个字母作为单词:
vectorizer = CountVectorizer(token_pattern=r"(?u)\b\w+\b")
那么它应该会起作用。但是现在你的数字变成了字符串为了解决这个问题,你搜索了什么?你找到了什么?你尝试了什么,为什么不起作用?我已经把我的代码放在上面了谢谢你的代码。尽管如此,请仍然包括完整的回溯。好吧,我已经添加了完整的回溯,我认为我的方法是错误的,但我不知道如何及时修复iTunes,这看起来不像是一个完整的回溯。此外,回溯中的
str(节点[0])
似乎与您的问题中的任何内容都不对应。你可能应该回顾一下如何创建一个应用程序的指南。为了解决这个问题,你搜索了什么,你发现了什么?你尝试了什么,为什么不起作用?我已经把我的代码放在上面了谢谢你的代码。尽管如此,请仍然包括完整的回溯。好吧,我已经添加了完整的回溯,我认为我的方法是错误的,但我不知道如何及时修复iTunes,这看起来不像是一个完整的回溯。此外,回溯中的str(节点[0])
似乎与您的问题中的任何内容都不对应。您可能应该查看有关如何创建一个应用程序的指南。