Python中英文小说词频统计与情感分析【第11篇—python词频统计】

举报
柠檬味拥抱 发表于 2023/11/29 19:20:06 2023/11/29
【摘要】 @[toc] Python中英文小说词频统计与情感分析在这篇文章中,我们将深入研究如何使用Python进行英文小说的深度文本分析,包括词频统计、情感分析以及主题建模。我们将通过引入更多案例和优化代码,提高文本分析的深度和准确性。 1. 代码优化与复盘首先,让我们回顾之前的词频统计代码,并进行一些优化,使其更加简洁高效。import operatorimport refrom nltk.cor...

@[toc]

Python中英文小说词频统计与情感分析

在这篇文章中,我们将深入研究如何使用Python进行英文小说的深度文本分析,包括词频统计、情感分析以及主题建模。我们将通过引入更多案例和优化代码,提高文本分析的深度和准确性。

1. 代码优化与复盘

首先,让我们回顾之前的词频统计代码,并进行一些优化,使其更加简洁高效。

import operator
import re
from nltk.corpus import stopwords

# 下载停用词列表
import nltk
nltk.download('stopwords')

# 1) 统计文本中单词的词频,找出最高和最低的词频单词并输出。

# 初始化结果字典
result = {}

# 主函数入口
if __name__ == "__main__":
    try:
        with open(r"文本解析器.txt", "r", encoding="UTF-8") as f:
            # 将文本转换为小写,避免单词大小写差异
            content = f.read().lower()
            # 使用正则表达式找出所有单词
            words = re.findall('[a-z]+', content)

            # 去除停用词
            stop_words = set(stopwords.words('english'))
            words = [word for word in words if word not in stop_words]

            # 使用字典推导式进行词频统计
            result = {word: result.get(word, 0) + 1 for word in words}

            # 按词频降序排序
            result = sorted(result.items(), key=operator.itemgetter(1), reverse=True)

            # 打印结果
            print(result)
    except Exception as e:
        print(f"An error occurred: {e}")

在这个版本中,我们使用NLTK库提供的停用词列表更精确地过滤文本,提高了词频统计的准确性。

2. 增加情感分析案例

除了词频统计,我们还引入了情感分析。情感分析可以帮助我们了解文本中的情感倾向,是积极的、消极的还是中性的。

from nltk.sentiment import SentimentIntensityAnalyzer

# 情感分析
def sentiment_analysis(text):
    analyzer = SentimentIntensityAnalyzer()
    sentiment_score = analyzer.polarity_scores(text)
    return sentiment_score

# 主函数入口
if __name__ == "__main__":
    try:
        with open(r"文本解析器.txt", "r", encoding="UTF-8") as f:
            content = f.read()
            sentiment_score = sentiment_analysis(content)
            print("情感分析结果:", sentiment_score)
    except Exception as e:
        print(f"An error occurred: {e}")

这个案例中,我们使用NLTK库中的情感分析工具,输出了情感得分,有助于了解小说中不同部分的情感变化。
在这里插入图片描述

3. 主题建模的引入

为了更深入地理解小说的内容,我们引入了主题建模。通过使用Scikit-Learn库中的Latent Dirichlet Allocation(LDA)技术,我们可以发现文本中隐藏的主题结构。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation

# 主题建模
def topic_modeling(texts, num_topics=5):
    vectorizer = CountVectorizer()
    X = vectorizer.fit_transform(texts)
    lda = LatentDirichletAllocation(n_components=num_topics, random_state=42)
    lda.fit(X)
    return lda

# 主函数入口
if __name__ == "__main__":
    try:
        with open(r"文本解析器.txt", "r", encoding="UTF-8") as f:
            content = f.readlines()

        # 合并成一个字符串,以便进行主题建模
        content_str = ' '.join(content)

        # 进行主题建模
        lda_model = topic_modeling([content_str])

        # 输出主题词
        feature_names = vectorizer.get_feature_names_out()
        for topic_idx, topic in enumerate(lda_model.components_):
            print(f"Topic #{topic_idx + 1}: {', '.join([feature_names[i] for i in topic.argsort()[:-10 - 1:-1]])}")
    except Exception as e:
        print(f"An error occurred: {e}")

在这个例子中,我们使用LDA对小说进行主题建模,并输出每个主题的关键词。这有助于我们发现小说中潜在的主题和内容结构。

5. 深度文本分析的进阶

在前面的部分,我们已经介绍了如何通过Python进行英文小说的词频统计、情感分析以及主题建模。接下来,让我们进一步扩展深度文本分析的领域,涵盖命名实体识别、关键词抽取以及可视化展示。

5.1 命名实体识别(NER)

命名实体识别是文本分析中的重要任务,它可以识别文本中具有特定意义的实体,如人名、地名、组织机构等。我们将使用spaCy库进行NER。

import spacy

def named_entity_recognition(text):
    nlp = spacy.load("en_core_web_sm")
    doc = nlp(text)
    entities = [(ent.text, ent.label_) for ent in doc.ents]
    return entities

# 调用函数
ner_result = named_entity_recognition(content)
print("命名实体识别结果:", ner_result)

在这个例子中,我们使用spaCy进行NER,并输出识别到的命名实体及其类型。
在这里插入图片描述

5.2 关键词抽取

关键词抽取可以帮助我们更好地理解文本的主题和内容。我们将使用TF-IDF(Term Frequency-Inverse Document Frequency)方法进行关键词抽取。

from sklearn.feature_extraction.text import TfidfVectorizer

def extract_keywords(text):
    vectorizer = TfidfVectorizer(max_features=10)
    X = vectorizer.fit_transform([text])
    feature_names = vectorizer.get_feature_names_out()
    keywords = [feature_names[i] for i in X.indices]
    return keywords

# 调用函数
keywords_result = extract_keywords(content_str)
print("关键词抽取结果:", keywords_result)

这个例子中,我们使用TF-IDF方法提取文本中的关键词,帮助我们更全面地了解小说的主题。

5.3 可视化展示

文本分析的结果可以通过可视化手段更直观地展示。我们将使用Matplotlib和WordCloud库进行可视化。

import matplotlib.pyplot as plt
from wordcloud import WordCloud

# 可视化词云
def visualize_wordcloud(text):
    wordcloud = WordCloud(width=800, height=400, random_state=42, background_color='white').generate(text)
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()

# 调用函数
visualize_wordcloud(content_str)

通过词云图,我们可以直观地看到文本中高频出现的词汇,从而洞察小说的关键主题。
在这里插入图片描述

6. 总结与展望

通过本文,我们深入研究了使用Python进行英文小说的深度文本分析。从词频统计、情感分析到主题建模,再到命名实体识别、关键词抽取和可视化展示,我们覆盖了文本分析的多个方面。

未来,随着自然语言处理领域的不断发展,我们可以期待更多先进技术的应用,提高文本分析的准确性和深度。同时,对于不同类型的文本,我们可以根据具体需求选择合适的技术和工具,以更好地挖掘文本信息。

希望本文能为对深度文本分析感兴趣的读者提供一些实用的方法和思路。让我们一同迎接文本分析领域更广阔的未来!

结语

通过这篇文章,我们深入研究了Python中对英文小说的文本分析。从词频统计到情感分析再到主题建模,我们展示了如何利用强大的工具和库对文本进行深度挖掘。这种文本分析的方法不仅可以用于小说,还可以应用于新闻、社交媒体等各种文本数据,为我们更好地理解和利用文本信息提供了有力支持。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。