Python_LDA实现方法详解

yizhihongxing

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, 3, 5, 7],我们可以将它拆分成[(1, 3), (5, 7)]两组,然后相加得到[4, 12],即新的数组。 Python如何实现数组元素两两相加? Python中可以通过列表推导…

    python 2023年5月14日
    00
  • Python json转字典字符方法实例解析

    Python json转字典字符方法实例解析 什么是json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。JSON格式采用了类似于JavaScript对象的语法标准,因此是一种文本格式,可以方便地在网络中传输。 json转字典的方法 Python内置了json模块,通过json模块可以实现…

    python 2023年5月13日
    00
  • Python pip替换为阿里源的方法步骤

    下面是详细的Python pip替换为阿里源的方法步骤: 1. 打开pip配置文件 在命令行中输入以下命令: cd ~ nano .pip/pip.conf 如果没有pip.conf文件,则新建该文件: cd ~ mkdir .pip cd .pip touch pip.conf nano pip.conf 2. 添加阿里源 在pip.conf文件中添加如下…

    python 2023年5月14日
    00
  • 如何从 gensim 打印 LDA 主题模型? Python

    【问题标题】:How to print the LDA topics models from gensim? Python如何从 gensim 打印 LDA 主题模型? Python 【发布时间】:2023-04-06 01:05:02 【问题描述】: 使用gensim,我能够从 LSA 中的一组文档中提取主题,但是如何访问从 LDA 模型生成的主题? 打印…

    Python开发 2023年4月6日
    00
  • Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)

    Windows下的Python3.6.1的下载与安装图文详解(适合32位和64位) 下载Python3.6.1安装包 首先,从Python官网下载Windows安装包。在页面http://www.python.org/downloads/windows/可以找到可供下载的Python版本。在该页面,可以看到所有的Python版本以及相应的安装包。 选择需要的…

    python 2023年5月13日
    00
  • 运用Python3实现Two-Pass算法检测区域连通性

    以下是关于“运用Python3实现Two-Pass算法检测区域连通性”的完整攻略: 简介 Two-Pass算法是一种用于检测区域连通性的图像处理算法,它可以将图像中的像素分为不同的连通区域,并为每个连通区域分配一个唯一的标识符。在本教程中,我们将介绍如何使用Python3实现Two-Pass算法,并提供两个示例说明。 实现Two-Pass算法 以下是使用Py…

    python 2023年5月14日
    00
  • Python常用的正则表达式处理函数详解

    Python常用的正则表达式处理函数详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理,如数据清洗、文本分、信息提取等。在Python中,我们使用模块提供的函数来操作正则表达式。本攻略将详细讲解Python常用的正则表达式处理函数,包括re.match()、re.search()、re.findall()、re.sub()、re.split()等…

    python 2023年5月14日
    00
  • Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]

    下面是“Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]”的完整实例教程。 问题描述 在使用MySQL数据库时,我们经常会遇到中文乱码的问题,在查询和导出数据时也有可能会出现问题。具体表现为: 插入中文数据后,读取出来出现乱码; 查询中文数据时,查询结果中出现乱码; 导出数据为sql语句或Excel文件时,文件中出现乱码。 本教程将详细…

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