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])
似乎与您的问题中的任何内容都不对应。您可能应该查看有关如何创建一个应用程序的指南。