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
应用到前面的函数中,因为它是一个对象而不是字符串。所以我的问题是:
- 对于文件语料库(使用
PlaintextCorpusReader()
)进行标记化和词形还原的函数应该是什么样子(或者我应该如何更改不同文件的现有函数)
- TF-IDF 方法(
vectorizer = TfidfVectorizer()
的标准 sklearn 方法在 PlaintextCorpusReader()
中会是什么样子
非常感谢!
我认为您的问题可以通过阅读来回答:这个 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_words
、doc_sents
和 doc_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 来读取文件。
对意大利语文本进行文本分析(标记化、词法化)以供将来使用 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
应用到前面的函数中,因为它是一个对象而不是字符串。所以我的问题是:
- 对于文件语料库(使用
PlaintextCorpusReader()
)进行标记化和词形还原的函数应该是什么样子(或者我应该如何更改不同文件的现有函数) - TF-IDF 方法(
vectorizer = TfidfVectorizer()
的标准 sklearn 方法在PlaintextCorpusReader()
中会是什么样子
非常感谢!
我认为您的问题可以通过阅读来回答:这个 question, this
首先,你想得到文件的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_words
、doc_sents
和 doc_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 来读取文件。