

clu0=[[分かち書きされ、各単語が''で格納された文章データ1],[同2]...[同n]]  
clu1=[[同3],[同4],[同5]...[同m]]  
...  
のようなデータセットがあるとします。

この時、clu0やclu1の重要単語を抽出したいです。  
そこで、3重の入れ子構造のリストを用いてtfidf値を算出しようと

[code]

    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)
    
[/code]

としてtfidf値を計算しようとしたところ

[code]

    TypeError: sequence item 0: expected str instance, list found
    
[/code]

となり、計算出来ませんでした。  
このコードによるtfidf計算はcludocs_listの部分が２重の入れ子構造リストでなければ上手くいかない、ということは分かるのですが、clu0やclu1を１つの文章として見立ててしまうと、ほとんどの単語のdfが1になってしまい、重要語ではなく頻度の高い単語が抽出されてしまいます。  
『clu0にあってclu1にはない特徴語』を算出するにはどのようにコードを改変すれば良いのでしょうか。

非常にわかりづらい質問かもしれませんが、どなたかご教授いただけますと幸いです。


CC BY-SA 4.0
2019-11-28T09:22:34.687
60916
2019-11-28T09:22:34.687
36375
question
python 自然言語処理
3重の入れ子構造のリストのtfidf値を算出したい