使用tf-idf

时间:2020-01-28 02:44:11

标签: python cluster-analysis document text-classification tf-idf

我在目录中有五个纯文本文档,这些文档已经根据其内容进行了聚类,并被命名为cluster1.txt,cluster2.txt等,因此它们起着我的作用。否则,它们将没有任何标签,只是这样命名。 我的任务是将一个新的文本文档与新的句子聚类,而不是将整个文档作为一个整体聚类,而是将每个句子聚类到这5个聚类或类中的一个,并用回忆性和精确度得分做一个混淆矩阵以显示句子与聚类的相似程度。

我首先尝试使用kNN,然后使用kmeans,但是我认为我的逻辑有缺陷,因为这不是聚类问题,而是分类问题,对吗? 好吧,至少我尝试对文本进行预处理(删除停用词,去词机化,小写,标记化),然后我使用countvectorizer和tf-idf来计算频次 我对此问题的逻辑有些疑问。

无论如何,这是我到目前为止尝试过的方法,但是现在我有点卡住了,感谢您的帮助

import glob
import os
file_list = glob.glob(os.path.join(os.getcwd(), 'C:/Users/ds191033/FH/Praktikum/Testdaten/Clusters', "*.txt"))
   corpus = []
for file_path in file_list:
with open(file_path, encoding="utf8") as f_input:
corpus.append(f_input.read())

stopwords = nltk.corpus.stopwords.words('german')

wpt = nltk.WordPunctTokenizer()
stop_words = nltk.corpus.stopwords.words('german')
lem = WordNetLemmatizer()

def normalize_document(doc):
    # lower case and remove special characters\whitespaces
    doc = re.sub(r'[^a-zA-Z\s]', '', doc, re.I|re.A)
    doc = doc.lower()
    tokens = wpt.tokenize(doc)
    # filter stopwords out of document
    filtered_tokens = [token for token in tokens if token not in stop_words]
    #lemmatize
    for w in filtered_tokens:
        lemmatized_tokens = [lem.lemmatize(t) for t in filtered_tokens]
    # re-create document from filtered tokens
    doc = ' '.join(lemmatized_tokens)
    return doc

normalize_corpus = np.vectorize(normalize_document)

norm_corpus = normalize_corpus(corpus)
norm_corpus

cv = CountVectorizer(min_df=0., max_df=1.)
cv_matrix = cv.fit_transform(norm_corpus)
cv_matrix = cv_matrix.toarray()
cv_matrix

# get all unique words in the corpus
vocab = cv.get_feature_names()
# show document feature vectors
pd.DataFrame(cv_matrix, columns=vocab)

from sklearn.feature_extraction.text import TfidfVectorizer

tv = TfidfVectorizer(min_df=0., max_df=1., use_idf=True)
tv_matrix = tv.fit_transform(norm_corpus)
tv_matrix = tv_matrix.toarray()

vocab = tv.get_feature_names()
pd.DataFrame(np.round(tv_matrix, 2), columns=vocab)

0 个答案:

没有答案