Python_LDA实现方法详解

Python_LDA实现方法详解

什么是LDA

LDA(Latent Dirichlet Allocation)是一种主题模型,它可以将每个文档视为多个主题的组合,而每个主题又是多个单词的组合。通过使用LDA模型,我们可以发现给定一个含有很多单词的文档集合,这些文档集合的主题分布以及每个文档的主题分布。

Python中的LDA实现

Python中有多个LDA库可供选择, 如 gensimldasklearn 等,本文将以gensim库为例进行介绍。

安装gensim

使用以下指令安装gensim库:

pip install gensim

数据预处理

在开始使用LDA模型之前,我们需要进行数据预处理。以下是对文本进行预处理的示例代码:

import re
import nltk
from nltk.corpus import stopwords

nltk.download('stopwords')
stop_words = stopwords.words('english')
stop_words.extend(['from', 'subject', 're', 'edu', 'use'])

def preprocess(text):
    text = text.lower()
    text = re.sub(r'\d+', '', text)
    text = ' '.join([word for word in text.split() if word not in stop_words])
    return text

构建文本词袋模型

在LDA算法中,我们需要将文档转换成词袋模型。以下是使用gensim库构建文本词袋模型的示例代码:

from gensim import corpora

# 将文本列表转换成词袋模型
corpus = [dictionary.doc2bow(text.split()) for text in texts]

LDA模型训练

使用gensim训练LDA模型,需要指定主题数、迭代轮数、词袋模型等参数,以下是示例代码:

from gensim.models.ldamodel import LdaModel

# 训练LDA模型
lda_model = LdaModel(corpus=corpus,
                     id2word=dictionary,
                     num_topics=20,
                     random_state=100,
                     update_every=1,
                     chunksize=100,
                     passes=10,
                     alpha='auto',
                     per_word_topics=True)

示例1:对新闻数据进行主题提取

以下示例展示如何使用gensim库对新闻数据集进行主题提取。

首先,我们需要下载20 Newsgroups数据集并解压缩。然后,我们使用以下代码对每个文件进行预处理,构建词袋模型,训练LDA模型,提取主题。

import os
import glob

from nltk.corpus import stopwords
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer

from gensim import corpora, models

tokenizer = RegexpTokenizer(r'\b\w+\b')
en_stop = set(stopwords.words('english'))
p_stemmer = PorterStemmer()

def preprocess(text):
    tokens = tokenizer.tokenize(text)
    stopped_tokens = [token.lower() for token in tokens if token.lower() not in en_stop]
    stemmed_tokens = [p_stemmer.stem(token) for token in stopped_tokens]
    return stemmed_tokens

path = '20_newsgroups/*/*'
files = glob.glob(path)
texts = []

for file in files:
    with open(file) as f:
        text = f.read()
        tokens = preprocess(text)
        texts.append(tokens)

dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]

num_topics = 5
num_words = 5

ldamodel = models.ldamodel.LdaModel(corpus, num_topics=num_topics,
                                           id2word=dictionary,
                                           passes=20)

for i, topic in enumerate(ldamodel.print_topics(num_topics=num_topics, num_words=num_words)):
    print("Topic {}: {}".format(i, topic))

上面的代码将输出每个主题的前五个单词(num_words=5)。

示例2:使用LDA模型对新闻文章进行分类

我们可以使用训练好的LDA模型对新闻文章进行分类。以下是一个简单的示例代码:

import os
import glob

import pandas as pd

from nltk.corpus import stopwords
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer

from gensim import corpora, models

tokenizer = RegexpTokenizer(r'\b\w+\b')
en_stop = set(stopwords.words('english'))
p_stemmer = PorterStemmer()

def preprocess(text):
    tokens = tokenizer.tokenize(text)
    stopped_tokens = [token.lower() for token in tokens if token.lower() not in en_stop]
    stemmed_tokens = [p_stemmer.stem(token) for token in stopped_tokens]
    return stemmed_tokens

# 训练LDA模型
df = pd.read_csv('news_dataset.csv')
texts = [preprocess(text) for text in df['text'].values]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
ldamodel = models.ldamodel.LdaModel(corpus, num_topics=5,
                                           id2word=dictionary,
                                           passes=20)

def classify(text):
    tokens = preprocess(text)
    bow = dictionary.doc2bow(tokens)
    topics = ldamodel.get_document_topics(bow)
    return max(topics,key=lambda x:x[1])[0]

# 对新闻文章进行分类
results = []
with open('news_samples.txt') as f:
    for line in f:
        line = line.strip()
        category = classify(line)
        results.append((line, category))

# 输出分类结果
for result in results:
    print(result)

上面的代码将输出新闻文章及其对应的主题类别。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python_LDA实现方法详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Python数据分析与处理(一)–北京高考分数线统计分析

    下面我将详细讲解以下这篇文章的内容: Python数据分析与处理(一)–北京高考分数线统计分析 1. 引言 本教程主要介绍如何使用 Python 进行数据处理与分析,以北京市高考分数线为例子,介绍 Python 中 Pandas、Matplotlib 等常用数据分析工具的使用,通过实例展示如何对数据进行统计分析、可视化呈现。同时,本教程也是一个完整的实例教…

    python 2023年5月14日
    00
  • Python 列表约定列表

    【问题标题】:Python list of lists conventionPython 列表约定列表 【发布时间】:2023-04-03 16:17:01 【问题描述】: 我有一个类似下面的列表(y)。现在,我想做的是删除对象[n,m]。如果n 匹配某个值。我因此思考列表列表(m 将在运行时多次更改,而n 是静态的)是否是解决此问题的方法?如果有更清洁的方…

    Python开发 2023年4月8日
    00
  • openCV入门学习基础教程第一篇

    下面我详细讲解一下“openCV入门学习基础教程第一篇”的完整攻略。 一、概述 OpenCV(全称为Open Source Computer Vision Library)是一个跨平台的开源计算机视觉库。它可以帮助我们高效、优雅地编写计算机视觉相关代码。本教程旨在帮助大家了解OpenCV,并学习一些基础操作。 二、安装OpenCV 安装OpenCV有两种方法…

    python 2023年5月19日
    00
  • python Pexpect模块的使用

    Pexpect是Python编程语言的一个第三方模块,用于自动化与交互式命令行程序的交互。它可以帮助我们编写自动化脚本从而节省时间和减少错误。以下是使用Pexpect模块的完整攻略以及两个示例说明。 安装 在终端运行以下命令来安装Pexpect模块: pip install pexpect 如需更多信息,请参阅Pexpect官方网站。 使用Pexpect 使…

    python 2023年5月13日
    00
  • Python网络爬虫信息提取mooc代码实例

    Python网络爬虫信息提取mooc代码实例攻略 本篇攻略主要介绍Python网络爬虫信息提取MOOC课程的代码实现过程。涉及到的工具和模块包括Requests、BeautifulSoup、正则表达式等。该攻略的目标是爬取公开的MOOC课程列表信息。 1. 准备工作 在开始进行爬虫操作之前,我们需要先安装好所需的Python模块及相关IDE,比如Anacon…

    python 2023年5月14日
    00
  • Python字符串中删除特定字符的方法

    以下是Python字符串中删除特定字符的方法的完整攻略: 方法1:使用replace()函数 使用Python的replace()函数可以很方便地删除字符串中的特定字符。以下是一个示例代码: string = "Hello, World!" new_string = string.replace(",", "…

    python 2023年5月14日
    00
  • 详解Python 生成器表达式

    生成器表达式是Python编程语言中用于创建迭代器的一种方法,使用它可以避免在内存中存储所有生成的值而是逐个生成值。这种方法可以大大减少内存使用。 生成器表达式的语法格式 生成器表达式的语法格式类似于列表推导式,但使用圆括号括起来代替方括号。具体语法格式如下: (表达式 for 变量 in 可迭代对象 [if 判断语句]) 使用方法 使用生成器表达式需要以下…

    python-answer 2023年3月25日
    00
  • 浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头

    下面是“浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头”的完整攻略: 1. Matplotlib简介 Matplotlib是一个数据可视化库,它能够帮助Python开发者更便捷地创建各种图表。它可以处理各种图表类型,例如线图、柱状图、散点图等等。Matplotlib的核心是pyplot模块,我们通过import matplotlib.…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部