TF-IDF 的标记化和词形还原用于使用 NLTK 库的一堆 txt 文件

Tokenization and lemmatization for TF-IDF use for bunch of txt files using NLTK library

对意大利语文本进行文本分析(标记化、词法化)以供将来使用 TF-IDF 技术并在此基础上构建集群。对于预处理,我使用 NLTK,对于一个文本文件,一切正常:

import nltk
from nltk.stem.wordnet import WordNetLemmatizer

it_stop_words = nltk.corpus.stopwords.words('italian')

lmtzr = WordNetLemmatizer()

with open('3003.txt', 'r' , encoding="latin-1") as myfile:
    data=myfile.read()

word_tokenized_list = nltk.tokenize.word_tokenize(data)

word_tokenized_no_punct = [str.lower(x) for x in word_tokenized_list if x not in string.punctuation]

word_tokenized_no_punct_no_sw = [x for x in word_tokenized_no_punct if x not in it_stop_words]

word_tokenized_no_punct_no_sw_no_apostrophe = [x.split("'") for x in word_tokenized_no_punct_no_sw]
word_tokenized_no_punct_no_sw_no_apostrophe = [y for x in word_tokenized_no_punct_no_sw_no_apostrophe for y in x]

word_tokenize_list_no_punct_lc_no_stowords_lemmatized = [lmtzr.lemmatize(x) for x in word_tokenized_no_punct_no_sw_no_apostrophe]

但问题是我需要对文件夹中的一堆.txt文件执行以下操作。为此,我正在尝试使用 PlaintextCorpusReader():

的可能性
from nltk.corpus.reader.plaintext import PlaintextCorpusReader

corpusdir = 'reports/'

newcorpus = PlaintextCorpusReader(corpusdir, '.txt')

基本上我不能只将 newcorpus 应用到前面的函数中,因为它是一个对象而不是字符串。所以我的问题是:

  1. 对于文件语料库(使用 PlaintextCorpusReader())进行标记化和词形还原的函数应该是什么样子(或者我应该如何更改不同文件的现有函数)
  2. TF-IDF 方法(vectorizer = TfidfVectorizer() 的标准 sklearn 方法在 PlaintextCorpusReader()
  3. 中会是什么样子

非常感谢!

我认为您的问题可以通过阅读来回答:这个 question, this 和 [TfidfVectorizer 文档][3]。为了完整起见,我将答案包装在下面:


首先,你想得到文件的id,通过the first question你可以得到它们如下:

ids = newcorpus.fileids()

然后,根据你可以检索文档的单词、句子或段落:

doc_words = []
doc_sents = []
doc_paras = []
for id_ in ids:
    # Get words
    doc_words.append(newcorpus.words(id_))
    # Get sentences
    doc_sents.append(newcorpus.sents(id_))
    # Get paragraph
    doc_paras.append(newcorpus.paras(id_))

现在,在 doc_wordsdoc_sentsdoc_paras 的第 ith 个位置上,您拥有所有单词、句子和段落(分别)对于语料库中的每个文档。

对于 tf-idf,您可能只需要单词。自 TfidfVectorizer.fit's method gets an iterable which yields str, unicode or file objects, you need to either transform your documents (array of tokenized words) into a single string, or use a similar approach to this one。后一种解决方案使用虚拟分词器直接处理单词数组。

您也可以将自己的分词器传递给 TfidVectorizer 并使用 PlaintextCorpusReader 来读取文件。