【问题标题】:Calculate tf-idf of strings计算字符串的 tf-idf
【发布时间】:2014-06-10 16:45:52
【问题描述】:

我有 2 个文档 doc1.txtdoc2.txt。这两个文件的内容是:

 #doc1.txt
 very good, very bad, you are great

 #doc2.txt
 very bad, good restaurent, nice place to visit

我想让我的语料库与, 分开,这样我的最终DocumentTermMatrix 就变成了:

      terms
 docs       very good      very bad        you are great   good restaurent   nice place to visit
 doc1       tf-idf          tf-idf         tf-idf          0                    0
 doc2       0               tf-idf         0               tf-idf             tf-idf

我知道如何计算单个单词的DocumentTermMatrix(使用http://scikit-learn.org/stable/modules/feature_extraction.html),但不知道如何在Python 中计算stringsDocumentTermMatrix

【问题讨论】:

    标签: python scikit-learn tf-idf


    【解决方案1】:

    您可以将TfidfVectorizeranalyzer 参数指定为以自定义方式提取特征的函数:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    docs = ['very good, very bad, you are great',
            'very bad, good restaurent, nice place to visit']
    
    tfidf = TfidfVectorizer(analyzer=lambda d: d.split(', ')).fit(docs)
    print tfidf.get_feature_names()
    

    得到的特征是:

    ['good restaurent', 'nice place to visit', 'very bad', 'very good', 'you are great']
    

    如果您真的无法将所有数据加载到内存中,这是一种解决方法:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    docs = ['doc1.txt', 'doc2.txt']
    
    def extract(filename):
        with open(filename) as f:
            features = []
            for line in f:
                features += line.strip().split(', ')
            return features
    
    tfidf = TfidfVectorizer(analyzer=extract).fit(docs)
    print tfidf.get_feature_names()
    

    它一次加载每个文档,而不是一次将所有文档都保存在内存中。

    【讨论】:

    • 我有很多文档,所以我需要加载我的txt 文件,无法手动创建列表。
    • 可以预先将文件内容加载到列表中吗?如果没有,请查看编辑。
    • 这里,它将tfidf.get_feature_names() 中的每个string 视为单个文档。如我的问题所示,我只想要 2 个文档和 5 个文本。
    • @user2481422 “5 个文本”,你指的不是文档术语矩阵的五列吗? get_feature_names() 函数返回与每一列对应的“文本”,即特征。要获得 2 x 5 稀疏矩阵,只需使用 tfidf.transform(docs)
    • @user2481422 其实这里两个文件是用来适配transformer的。请注意,传递给fit 函数的X 正是docs,包含两个文档。只是它使用了一种定制的方式来提取特征(通常是逐字提取,但这里不是),从而产生了这五个特征。我相信这实际上是您想要的;如果没有,请告诉我。
    猜你喜欢
    • 2021-06-17
    • 2016-07-25
    • 1970-01-01
    • 2012-04-23
    • 2015-04-17
    • 2017-11-14
    • 2014-04-21
    • 2018-04-27
    • 2020-05-11
    相关资源
    最近更新 更多