3重の入れ子構造のリストのtfidf値を算出したい
clu0=[[分かち書きされ、各単語が''で格納された文章データ1],[同2]...[同n]]
clu1=[[同3],[同4],[同5]...[同m]]
...
のようなデータセットがあるとします。
この時、clu0やclu1の重要単語を抽出したいです。
そこで、3重の入れ子構造のリストを用いてtfidf値を算出しようと
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import TruncatedSVD
from sklearn.preprocessing import Normalizer
def tf(doc):
vectorizer = CountVectorizer(token_pattern=u'(?u)\\b\\w+\\b')
features = vectorizer.fit_transform(doc)
terms = vetures, terms
def tfidf(cludocs_list):
vectorizer = TfidfVectorizer(min_df=1, max_df=50, token_pattern=u'(?u)\\b\\w+\\b')
features = vectorizer.fit_transform(cludocs_list)
terms = vectorizer.get_feature_names()
return features, terms
def reduction(x, dim=10):
'''
dimensionality reduction using LSA
'''
lsa = TruncatedSVD()
x = lsa.fit_transform(x)
x = Normalizer(copy=False).fit_transform(x)
return x
if __name__ == '__main__':
cludocs_list = [clu0_docs,clu1_docs]
cludocs_list = [' '.join(d) for d in cludocs_list]
features, terms = tfidf(cludocs_list)
としてtfidf値を計算しようとしたところ
TypeError: sequence item 0: expected str instance, list found
となり、計算出来ませんでした。
このコードによるtfidf計算はcludocs_listの部分が2重の入れ子構造リストでなければ上手くいかない、ということは分かるのですが、clu0やclu1を1つの文章として見立ててしまうと、ほとんどの単語のdfが1になってしまい、重要語ではなく頻度の高い単語が抽出されてしまいます。
『clu0にあってclu1にはない特徴語』を算出するにはどのようにコードを改変すれば良いのでしょうか。
非常にわかりづらい質問かもしれませんが、どなたかご教授いただけますと幸いです。