大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说使用Python Gensim实现主题建模:简单有效的文本分析技术,希望您对编程的造诣更进一步.
在信息时代,大量的文本数据涌入我们的视野。如何从海量文本中提取出有用的信息,对于企业和个人都是非常重要的。而主题建模是一种有效的文本分析技术,可以帮助我们发掘文本的潜在主题,进而进行分析和挖掘。
本文将介绍如何使用Python中的Gensim模块进行主题建模,以及一些常用的预处理和参数调节方法。
一、数据预处理
在进行主题建模前,我们需要对原始文本进行一定的处理,以便让文本数据更加规范化。一般来说,我们需要完成以下几个步骤:
1、分词
分词是指将一段文本拆分成词汇的过程,也就是切分句子成单词。Gensim模块提供了简单易用的分词工具,在进行主题建模前我们需要先将原始文本进行分词。具体代码如下:
from gensim.parsing.preprocessing import preprocess_string, strip_tags, strip_punctuation, strip_multiple_whitespaces, strip_numeric,remove_stopwords #导入 Gensim 中的用于文本预处理的函数 from gensim import corpora,models,similarities #导入 Gensim 中的文本处理工具包 from gensim.utils import simple_preprocess import jieba #导入中文分词函数 #分词函数 def split_words(text): words=[word for word in jieba.cut(text)] return words #读取文本 raw_text="这是一段原始文本。" #使用 jieba 对文本进行分词 words=split_words(raw_text) print(words)
输出结果为:
['这是', '一段', '原始', '文本', '。']
2、去除停用词
去除停用词是指去除一些常用而又没有实际意义的单词,比如“的”、“是”等等。Gensim提供了一份预定义的停用词表,在进行主题建模前我们需要将文本中的停用词去掉。具体代码如下:
from gensim.parsing.preprocessing import preprocess_string, strip_tags, strip_punctuation, strip_multiple_whitespaces, strip_numeric,remove_stopwords #导入 Gensim 中的用于文本预处理的函数 from gensim import corpora,models,similarities #导入 Gensim 中的文本处理工具包 from gensim.utils import simple_preprocess import jieba #导入中文分词函数 jieba.load_userdict('./mydict.txt') #导入自定义词典 #分词函数 def split_words(text): words=[word for word in jieba.cut(text)] return words #去除停用词函数 def remove_stopwords(words): return [word for word in words if word not in stopwords] #读取停用词 stopwords=[line.strip() for line in open('./stopwords.txt',encoding='UTF-8').readlines()] #读取文本 raw_text="这是一段原始文本。" #使用 jieba 对文本进行分词 words=split_words(raw_text) #去除停用词 words=remove_stopwords(words) print(words)
输出结果为:
['一段', '原始', '文本']
二、构建文档-词频矩阵
在完成数据预处理后,我们需要将分词后的文本转换成数值矩阵,以便进行主题建模分析。具体来说,我们需要建立文档-词频矩阵,将文本中的每个单词映射到矩阵中。这个过程可以通过Gensim自带的Corpora模块完成。具体代码如下:
from gensim.parsing.preprocessing import preprocess_string, strip_tags, strip_punctuation, strip_multiple_whitespaces, strip_numeric,remove_stopwords #导入 Gensim 中的用于文本预处理的函数 from gensim import corpora,models,similarities #导入 Gensim 中的文本处理工具包 from gensim.utils import simple_preprocess import jieba #导入中文分词函数 jieba.load_userdict('./mydict.txt') #导入自定义词典 #分词函数 def split_words(text): words=[word for word in jieba.cut(text)] return words #去除停用词函数 def remove_stopwords(words): return [word for word in words if word not in stopwords] #读取停用词 stopwords=[line.strip() for line in open('./stopwords.txt',encoding='UTF-8').readlines()] #读取文本 raw_text="这是一段原始文本。" #使用 jieba 对文本进行分词 words=split_words(raw_text) #去除停用词 words=remove_stopwords(words) #建立字典 dictionary=corpora.Dictionary([words]) #将文本转换成数值矩阵 doc_vec=[dictionary.doc2bow([word]) for word in words] print(doc_vec)
输出结果为:
[(0, 1), (1, 1), (2, 1)]
三、主题建模分析
在完成文档-词频矩阵的构建后,我们可以开始进行主题建模分析了。一般来说,主题建模是通过LDA(Latent Dirichlet Allocation)模型实现的,它是一种基于概率的模型,可以帮助我们发掘文本的潜在主题。在Gensim模块中,我们可以直接调用LdaModel函数进行主题建模分析,具体代码如下:
from gensim.parsing.preprocessing import preprocess_string, strip_tags, strip_punctuation, strip_multiple_whitespaces, strip_numeric,remove_stopwords #导入 Gensim 中的用于文本预处理的函数 from gensim import corpora,models,similarities #导入 Gensim 中的文本处理工具包 from gensim.utils import simple_preprocess import jieba #导入中文分词函数 jieba.load_userdict('./mydict.txt') #导入自定义词典 #分词函数 def split_words(text): words=[word for word in jieba.cut(text)] return words #去除停用词函数 def remove_stopwords(words): return [word for word in words if word not in stopwords] #读取停用词 stopwords=[line.strip() for line in open('./stopwords.txt',encoding='UTF-8').readlines()] #读取文本 raw_text="这是一段原始文本。" #使用 jieba 对文本进行分词 words=split_words(raw_text) #去除停用词 words=remove_stopwords(words) #建立字典 dictionary=corpora.Dictionary([words]) #将文本转换成数值矩阵 doc_vec=[dictionary.doc2bow([word]) for word in words] #进行主题建模分析 lda_model=models.LdaModel(doc_vec,num_topics=10,id2word=dictionary) #输出主题 for i in range(10): print(lda_model.show_topic(i))
完整代码
代码已整理成一个完整的程序,供读者参考。
from gensim.parsing.preprocessing import preprocess_string, strip_tags, strip_punctuation, strip_multiple_whitespaces, strip_numeric,remove_stopwords #导入 Gensim 中的用于文本预处理的函数 from gensim import corpora,models,similarities #导入 Gensim 中的文本处理工具包 from gensim.utils import simple_preprocess import jieba #导入中文分词函数 jieba.load_userdict('./mydict.txt') #导入自定义词典 #分词函数 def split_words(text): words=[word for word in jieba.cut(text)] return words #去除停用词函数 def remove_stopwords(words): return [word for word in words if word not in stopwords] #主函数 def main(): #读取停用词 stopwords=[line.strip() for line in open('./stopwords.txt',encoding='UTF-8').readlines()] #读取文本 raw_text="这是一段原始文本。" #使用 jieba 对文本进行分词 words=split_words(raw_text) #去除停用词 words=remove_stopwords(words) #建立字典 dictionary=corpora.Dictionary([words]) #将文本转换成数值矩阵 doc_vec=[dictionary.doc2bow([word]) for word in words] #进行主题建模分析 lda_model=models.LdaModel(doc_vec,num_topics=10,id2word=dictionary) #输出主题 for i in range(10): print(lda_model.show_topic(i)) if __name__=='__main__': main()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/20332.html