nlp入门(四)新闻分类实验

这篇具有很好参考价值的文章主要介绍了nlp入门(四)新闻分类实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com)

数据来源:

搜狗新闻语料库 由于链接失效,现在使用百度网盘分享

链接:https://pan.baidu.com/s/1RTx2k7V3Ujgg9-Rv8I8IRA?pwd=ujn3
提取码:ujn3

停用词 来源于网络

链接:https://pan.baidu.com/s/1ePrf4_gWx8_pTn6PEjTtCw?pwd=5jov
提取码:5jov

字样式文件 来源于网络

链接:https://pan.baidu.com/s/1uVreJY-MKhz1HXzAw5e4VQ?pwd=8ill
提取码:8ill

一、tf-idf简介

TF = 某词在文章中出现的次数/该文章中出现最多词出现的次数

IDF = log(文章总数/包含该词的文章数+1)

TF-IDF = TF * IDF

二、加载数据集

# 载入数据集
df_news = pd.read_table('./data/val.txt', names=['category', 'theme', 'URL', 'content'], encoding='utf-8')
df_news = df_news.dropna()
print(df_news.head())
print(df_news.shape)

nlp入门(四)新闻分类实验

 可以看到有5000行4列的数据,其中第一列可以作为新闻分类的标签,最后一列为新闻内容

三、分词

首先将数据转换为list格式

# 转换为list格式
content = df_news.content.values.tolist()
print(content[1000])

nlp入门(四)新闻分类实验

 将最后一列数据摘出来转换成了一个字符串列表,就可以进行分词操作

# 分词
content_S = []
for line in content:
    current_segment = jieba.lcut(line)
    if len(current_segment) > 1 and current_segment != '\r\n':
        content_S.append(current_segment)
print(content_S[1000])
df_content = pd.DataFrame({'content_S': content_S})
print(df_content.head())

nlp入门(四)新闻分类实验

 四、去掉停用词

可以看出上面还有许多没有价值的词作干扰,所以我们加载停用词库并且去掉停用词

# 加载停用词
stopwords = pd.read_csv('./data/stopwords.txt', index_col=False, sep='\t', quoting=3, names=['stopword'],
                        encoding='utf-8')
print(stopwords.head(20))


# 去掉停用词
def drop_stopwords(contents, stopwords):
    contents_clean = []
    all_words = []
    for line in contents:
        line_clean = []
        for word in line:
            if word in stopwords:
                continue
            line_clean.append(word)
            all_words.append(str(word))
        contents_clean.append(line_clean)
    return contents_clean, all_words


contents = df_content.content_S.values.tolist()
stopwords = stopwords.stopword.values.tolist()
contents_clean, all_words = drop_stopwords(contents, stopwords)
df_content = pd.DataFrame({'contents_clean': contents_clean})
print(df_content.head())
df_all_words = pd.DataFrame({'all_words': all_words})
print(df_all_words.head())

nlp入门(四)新闻分类实验

 文章来源地址https://www.toymoban.com/news/detail-637009.html

nlp入门(四)新闻分类实验

 五、计算词频

# 计算词频
words_count = df_all_words.groupby(by=['all_words'])['all_words'].agg(count='count')
words_count = words_count.reset_index().sort_values(by=['count'], ascending=False)
print(words_count.head())

nlp入门(四)新闻分类实验

 六、绘制词云

# 绘制词云
wordcloud = WordCloud(font_path='./data/SimHei.ttf', background_color='white', max_font_size=80)
word_frequence = {x[0]: x[1] for x in words_count.head(100).values}
wordcloud = wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
plt.show()

nlp入门(四)新闻分类实验

 七、使用tf-idf提取关键词

# tf-idf
index = 1000
print(df_news['content'][index])
content_S_str = ''.join(content_S[index])
print(' '.join(jieba.analyse.extract_tags(content_S_str, topK=5, withWeight=False)))

nlp入门(四)新闻分类实验

 八、使用主题模型提取关键词

# LDA
dictionary = corpora.Dictionary(contents_clean)
corpus = [dictionary.doc2bow(sentence) for sentence in contents_clean]
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20)
print(lda.print_topic(1, topn=5))
for topic in lda.print_topics(num_topics=20, num_words=5):
    print(topic[1])

nlp入门(四)新闻分类实验

 可以看出第一类词的成分权重

nlp入门(四)新闻分类实验

 这是所有类型的词成分权重

九、使用贝叶斯算法进行分类

# 贝叶斯算法进行分类
df_train = pd.DataFrame({'contents_clean': contents_clean, 'label': df_news['category']})
print(df_train.tail())
print(df_train.label.unique())
label_mapping = {'汽车': 1, '财经': 2, '科技': 3, '健康': 4, '体育': 5, '教育': 6, '文化': 7, '军事': 8, '娱乐': 9,
                 '时尚': 0}
df_train['label'] = df_train['label'].map(label_mapping)
print(df_train.head())
x_train, x_test, y_train, y_test = train_test_split(df_train['contents_clean'].values, df_train['label'].values)
print(x_train[0][1])

words = []
for line_index in range(len(x_train)):
    words.append(' '.join(x_train[line_index]))
print(words[0])
print(len(words))
# 计算词频构造向量
vec = CountVectorizer(analyzer='word', max_features=4000, lowercase=False)
vec.fit(words)
classifier = MultinomialNB()
classifier.fit(vec.transform(words), y_train)
test_words = []
for line_index in range(len(x_test)):
    test_words.append(' '.join(x_test[line_index]))
print(test_words[0])
print(len(test_words))
print(classifier.score(vec.transform(test_words), y_test))
# tf-idf构造词向量
vec2 = TfidfVectorizer(analyzer='word', max_features=4000, lowercase=False)
vec2.fit(words)
classifier = MultinomialNB()
classifier.fit(vec2.transform(words), y_train)
print(classifier.score(vec2.transform(test_words), y_test))
# 词频构造多维向量形式构造词向量
vec3 = CountVectorizer(analyzer='word', max_features=4000, lowercase=False, ngram_range=(1, 2))
vec3.fit(words)
classifier = MultinomialNB()
classifier.fit(vec3.transform(words), y_train)
print(classifier.score(vec3.transform(test_words), y_test))
# tfidf构造多维向量形式构造词向量
vec4 = TfidfVectorizer(analyzer='word', max_features=4000, lowercase=False, ngram_range=(1, 2))
vec4.fit(words)
classifier = MultinomialNB()
classifier.fit(vec4.transform(words), y_train)
print(classifier.score(vec4.transform(test_words), y_test))

nlp入门(四)新闻分类实验

nlp入门(四)新闻分类实验

nlp入门(四)新闻分类实验

nlp入门(四)新闻分类实验

nlp入门(四)新闻分类实验

nlp入门(四)新闻分类实验

 可以看出不同方法构成词向量对结果产生了影响,使用tf-idf方法构建词向量比单纯使用词频构建词向量准确率高一些,将词向量扩充多维比不扩充准确率稍微高一些

 

到了这里,关于nlp入门(四)新闻分类实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Chatgpt4 教学】 NLP(自然语言处理)第九课 朴素贝叶斯分类器的工作原理 机器学习算法

    我在起,点更新NLP自然语言处理==》《 王老师带我成为救世主 》 为啥为它单独开章,因为它值得,它成功的让我断了一更,让我实践了自上而下找能够理解的知识点,然后自下而上的学习给自己的知识升级,将自己提升到能够解决当前遇到的问题的水平。 (1)--------------

    2023年04月15日
    浏览(49)
  • 【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取

       语言 是一种使用具有共同处理规则的沟通指令的广义概念,这些指令可以通过视觉、声音或触觉等方式传递。语言可以分为自然语言、动物语言和计算机语言。    自然语言 是人类发展过程中形成的一种信息交流方式,它包括口语和书面语,并且反映了人类的思想。

    2024年03月12日
    浏览(142)
  • 基于Bert+Attention+LSTM智能校园知识图谱问答推荐系统——NLP自然语言处理算法应用(含Python全部工程源码及训练模型)+数据集

    这个项目充分利用了Google的Bert模型,这是一种基于Attention的大规模语料预训练模型,以及LSTM命名实体识别网络。项目的目标是设计一套通用的问答系统处理逻辑,以实现智能问答任务。 首先,我们采用了Bert模型,这是一种在自然语言处理领域非常强大的预训练模型。它具备

    2024年02月09日
    浏览(63)
  • 自然语言处理NLP介绍——NLP简介

    2024年02月15日
    浏览(71)
  • 自然语言处理NLP:一文了解NLP自然语言处理技术,NLP在生活中的应用,图导加深了解,NLP语料库,NLP开源工具

    目录 1.自然语言处理NLP 1.1 NLP中英对照(双份) 1.2 相关文章  2.NLP语料库

    2024年02月09日
    浏览(61)
  • 自然语言处理-NLP

    目录 自然语言处理-NLP 致命密码:一场关于语言的较量 自然语言处理的发展历程 兴起时期 符号主义时期 连接主义时期 深度学习时期 自然语言处理技术面临的挑战 语言学角度 同义词问题 情感倾向问题 歧义性问题 对话/篇章等长文本处理问题 探索自然语言理解的本质问题

    2024年02月11日
    浏览(78)
  • NLP(自然语言处理)

     一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究

    2024年02月02日
    浏览(66)
  • NLP自然语言介绍

    自然语言处理(Natural Language Processing, NLP)是人工智能领域中研究和处理人类语言的一项技术。它涉及将人类语言转化为计算机可理解和处理的形式,以便计算机能够理解、分析、生成和回复自然语言。 NLP技术的目标是使计算机能够像人类一样理解和处理语言。它包括以下几

    2024年01月24日
    浏览(43)
  • 自然语言处理(NLP)

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月08日
    浏览(50)
  • NLP自然语言处理介绍

    自然语言处理(NLP,Natural Language Processing)是一门涉及计算机与人类语言之间交互的学科。它的目标是使计算机能够理解和生成人类语言,从而更好地处理和解析大量的文本数据。NLP不仅是人工智能领域中一个重要的分支,也是当今社会应用广泛的领域之一。 在NLP中,一个基

    2024年01月21日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包