使用SciKit的kMeans来集中自己的文档

时间:2013-05-17 18:19:40

标签: scikit-learn

SciKit网站提供this k-means demo,我想尽可能多地使用它来集中我自己的一些文档,因为我是机器学习和SciKit的新手。问题是让我的文档以适合他们演示的形式出现。

以下是SciKit示例中的“问题区域”:

dataset = fetch_20newsgroups(subset='all', categories=categories, shuffle=True, random_state=42)
labels = dataset.target
true_k = np.unique(labels).shape[0]

可以看出,在这个例子中,作者使用/“获取”一个名为“20newsgroups”的数据集,对其进行调用(根据this page;参见7.7的第二段)“返回一个可以提供给文本特征提取器的原始文本文件列表。“我不依赖于“文本文件”列表 - 可以在下面的代码中看到 - 但我可以将我的“文档”放在任何必要的形式中。

有人可以解释我如何使用SciKit示例而不必将我的“文档”放在文本文件中吗?或者,标准做法是仅从文本文件而不是文档所在的数据库中聚类文档?从示例/文档中可以清楚地看出示例中的内容是完全多余的,使用b / c它使作者的生活更轻松,而不是。或者至少我不清楚。感谢您的帮助 - 特别感谢SciKit的家伙(他们正在做上帝的工作!)。

if cursor.rowcount > 0: #don't bother doing anything if we don't get anything from the database
data = cursor.fetchall()    
for row in data:
    temp_string = row[0]+" "+row[1]+" "+row[3]+" "+row[4] # currently skipping the event_url: row[2]
    page        = BeautifulSoup((''.join(temp_string)))  
    pagetwo     = str(page)
    clean_text  = nltk.clean_html(pagetwo)
    tokens      = nltk.word_tokenize(clean_text)
    fin_doc     = "" + "\n"
    for word in tokens:
        fin_word = stemmer.stem(word).lower()
        if fin_word not in stopwords and len(fin_word) > 2:
            fin_doc += fin_word + " "

    documents.append(fin_doc)

1 个答案:

答案 0 :(得分:3)

文档只是一个字符串列表,每个文档都有一个字符串,即iirc。 文档在这一点上有点不清楚。 fetch_20newsgroups将数据集作为文件下载,但代码中的表示形式是文件的内容,而不是文件本身。