Я пытаюсь сгенерировать модель скрытого распределения Дирихле, используя 4999 различных текстовых сообщений. Одна часть моего кода выглядит следующим образом:
txtsPath = "/.../txt"
docs = []
for filename in os.listdir(txtsPath):
file = os.path.join(txtsPath,filename)
body = open(file, encoding="utf8").read()
docs.append(body)
#print(docs)
import nltk.data
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.tokenize import RegexpTokenizer
def docs_preprocessor(docs):
tokenizer = RegexpTokenizer(r'\w+')
#tokenizer = nltk.data.load('tokenizers/punkt/spanish.pickle')
for idx in range(len(docs)):
docs[idx] = str(docs[idx]).lower() # Convert to lowercase.
docs[idx] = tokenizer.tokenize(docs[idx]) # Split into words.
# Remove numbers, but not words that contain numbers.
docs = [[token for token in doc if not token.isdigit()] for doc in docs]
# Remove words that are only one character.
docs = [[token for token in doc if len(token) > 3] for doc in docs]
# Lemmatize all words in documents.
lemmatizer = WordNetLemmatizer()
docs = [[lemmatizer.lemmatize(token) for token in doc] for doc in docs]
return docs
docs = docs_preprocessor(docs)
#print(docs)
# Create Biagram & Trigram Models
from gensim.models import Phrases
from gensim import corpora, models
bigram = Phrases(docs, min_count=10)
trigram = Phrases(bigram[docs])
for idx in range(len(docs)):
for token in bigram[docs[idx]]:
if '_' in token:
# Token is a bigram, add to document.
docs[idx].append(token)
for token in trigram[docs[idx]]:
if '_' in token:
# Token is a bigram, add to document.
docs[idx].append(token)
dictionary = Dictionary(docs)
dictionary.filter_extremes(no_below=10, no_above=0.2)
# Create dictionary and corpus required for Topic Modeling
corpus = [dictionary.doc2bow(doc) for doc in docs]
print('Number of unique tokens: %d' % len(dictionary))
print('Number of documents: %d' % len(corpus))
#print(corpus[:1])
#temp = dictionary[0]
id2word = dictionary.id2token
model = models.ldamodel.LdaModel(corpus,num_topics=15,id2word=id2word)
print(model.print_topics(num_topics=15))
topics = (model.print_topics(num_topics=15))
with open('/.../topics.txt',"w+") as f:
f.write(str(topics))
f.close()
И это дает мне следующую ошибку:
Traceback (most recent call last):
File "/.../scriptLDA.py", line 87, in <module>
model = models.ldamodel.LdaModel(corpus,num_topics=15,id2word=id2word)
File "/.../.local/lib/python3.6/site-packages/gensim/models/ldamodel.py", line 441, in __init__
raise ValueError("cannot compute LDA over an empty collection (no terms)")
ValueError: cannot compute LDA over an empty collection (no terms)
Может кто-нибудь исправить это для меня?
И один Последний вопрос: если генерируемая модель содержит тексты на двух разных языках, существует ли простой способ удалить стоп-слова из обоих языков?
Спасибо!