在此基础上,对意大利语文本(标记化、归一化)进行文本分析,以供TF技术今后使用,并在此基础上构建集群。对于预处理,我使用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应用到前面的函数中,因为它是一个对象,而不是一个字符串。所以我的问题是:
PlaintextCorpusReader())vectorizer = TfidfVectorizer()的标准学习方法)在PlaintextCorpusReader()中会是什么样子?非常感谢!
发布于 2018-06-12 14:47:57
我认为你的问题可以通过阅读来回答:这个问题,这个另一个和TfidfVectorizer文档。为了完整起见,我总结了以下的答案:
首先,您想要获取文件ids,通过第一个问题可以按如下方式获得它们:
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_words、doc_sents和doc_paras的第一个位置上,对语料库中的每个文档都有所有的单词、句子和段落(分别)。
对于tf-,您可能只想要单词。由于TfidfVectorizer.fit的方法具有可迭代性,可以生成str、unicode或文件对象,所以需要将文档(标记化的单词数组)转换为单个字符串,或者使用与这一个类似的方法。后者使用虚拟标记器直接处理单词数组。
您还可以将自己的令牌程序传递给TfidVectorizer,并使用PlaintextCorpusReader读取文件。
https://stackoverflow.com/questions/50818999
复制相似问题