我使用python(gensim包)中的Latent Dirichlet分配(LDA)生成了yelp data组客户评论的主题。在生成令牌时,我只从评论中选择长度为> = 3的字词(使用RegexpTokenizer
):
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w{3,}')
tokens = tokenizer.tokenize(review)
这将允许我们在创建语料库文档时过滤掉长度小于3的嘈杂单词。
如何过滤掉这些词会影响LDA算法的性能?
答案 0 :(得分:0)
一般来说,对于英语,一个和两个字母的单词不会添加有关该主题的信息。如果他们没有增加价值,他们应该在预处理步骤中删除。与大多数算法一样,较少的数据会加快执行时间。
答案 1 :(得分:0)
小于3的单词被视为停用词。 LDA构建主题,因此,请想象您生成了以下主题:
[我,他,她,他们,我们和/或……]
相比:
[鲨鱼,公牛,大白鲨,锤头鲸,鲸鲨]
哪个更能说明问题?这就是为什么删除停用词很重要的原因。这是我的方法:
# Create functions to lemmatize stem, and preprocess
# turn beautiful, beautifuly, beautified into stem beauti
def lemmatize_stemming(text):
stemmer = PorterStemmer()
return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos='v'))
# parse docs into individual words ignoring words that are less than 3 letters long
# and stopwords: him, her, them, for, there, ect since "their" is not a topic.
# then append the tolkens into a list
def preprocess(text):
result = []
for token in gensim.utils.simple_preprocess(text):
newStopWords = ['your_stopword1', 'your_stopword2']
if token not in gensim.parsing.preprocessing.STOPWORDS and token not in newStopWords and len(token) > 3:
nltk.bigrams(token)
result.append(lemmatize_stemming(token))
return result