首页 > 其他分享 >NLP(文本处理技术)在数据分析中的应用实例

NLP(文本处理技术)在数据分析中的应用实例

时间:2024-09-12 12:20:41浏览次数:12  
标签:数据分析 NLP 中文 模型 文本处理 tokens 用词 文本 分词

在Python中,你可以实现多种自然语言处理(NLP)技术。Python拥有丰富的库和框架,使得NLP任务变得更加容易和高效。接下来将列举一些NLP(文本处理技术)具体功能的Python实现。

一:文本预处理

1:英文版

# 文本预处理
# 导入所需的库
import re
from textblob import TextBlob
from gensim.parsing.preprocessing import STOPWORDS
from snowballstemmer import EnglishStemmer

# 示例句子
sentence = "The quick brown fox jumps over the lazy dog."

# 分词 - 使用正则表达式
tokens_re = re.findall(r'\b\w+\b', sentence.lower())

# 分词 - 使用TextBlob
blob = TextBlob(sentence)
tokens_textblob = blob.words

# 去除停用词 - 使用gensim的停用词列表
filtered_tokens_gensim = [word for word in tokens_re if word not in STOPWORDS]

# 词干提取 - 使用SnowballStemmer
stemmer_snowball = EnglishStemmer()
stemmed_tokens_snowball = [stemmer_snowball.stemWord(word) for word in filtered_tokens_gensim]

tokens_re, tokens_textblob, filtered_tokens_gensim, stemmed_tokens_snowball

这段代码的主要功能是对英文文本进行预处理,包括以下几个步骤:

分词(Tokenization)

使用正则表达式(re.findall)将句子分割成单词列表(tokens_re)。

使用TextBlob库对句子进行分词,得到单词列表(tokens_textblob

去除停用词(Stopwords Removal)

利用gensim库提供的停用词列表,从正则表达式分词结果中移除停用词,得到过滤后的单词列表(filtered_tokens_gensim)。

词干提取(Stemming)

使用SnowballStemmer对过滤后的单词列表进行词干提取,即将单词还原到基本形式,得到词干化后的单词列表(stemmed_tokens_snowball)。

以下是每个步骤的具体结果:

  • tokens_re:使用正则表达式分词后的单词列表。
  • tokens_textblob:使用TextBlob分词后的单词列表。
  • filtered_tokens_gensim:去除停用词后的单词列表。
  • stemmed_tokens_snowball:进行词干提取后的单词列表。

这些预处理步骤有助于后续的自然语言处理任务,如文本分类、情感分析等,因为它们可以减少文本数据的噪声,提高模型处理的效率和质量。

单词列表,过滤后的单词,词干提取后的结果分别为:

2:中文版

上述代码是用于英文文本预处理的,包括分词、去除停用词和词干提取。对于中文分词,这些步骤也是必要的,但需要使用支持中文的库和方法。以下是对中文文本进行类似处理的步骤:

中文分词

中文文本通常需要分词,因为中文词语之间没有明显的空格分隔。可以使用jieba等库进行中文分词。

去除停用词

中文也有停用词列表,可以从网上找到或使用相关库提供的停用词列表。

词干提取

中文的词干提取不同于英文,因为中文没有英文中的词形变化(如时态、复数等)。但可以进行词形还原,例如将“人们”还原为“人”。

以下是使用jieba库对中文文本进行分词和去除停用词的示例代码:

import jieba

# 示例中文句子
sentence = "小明的小狗应该是是已经送给小红了。"

# 中文分词
tokens_jieba = jieba.lcut(sentence)

# 去除停用词(需要有一个中文停用词列表)
stopwords = set(['的', '是', '了'])  # 示例停用词列表
filtered_tokens_jieba = [word for word in tokens_jieba if word not in stopwords]

# 打印结果
print("分词结果:", tokens_jieba)
print("去除停用词后的结果:", filtered_tokens_jieba)

结果如下:

二:情感分析

在Python中进行情感分析通常涉及以下步骤:

  1. 数据准备:收集并准备文本数据,可能包括清洗数据、去除停用词、标点符号等。

  2. 特征提取:将文本转换为机器学习模型可以处理的格式,通常包括词袋模型、TF-IDF或词嵌入。

  3. 模型选择:选择合适的机器学习算法或深度学习模型进行情感分析。常见的算法包括朴素贝叶斯、支持向量机、随机森林、逻辑回归等。对于深度学习方法,可以使用卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)或Transformer模型。

  4. 训练模型:使用标记好的情感数据训练模型。

  5. 评估模型:通过测试集评估模型的性能,使用准确率、召回率、F1分数等指标。

  6. 应用模型:将训练好的模型应用于新的数据进行情感分析。

1:不需训练模型的情感分析

(1)英文版

以下是使用Python进行情感分析的一个简单示例,使用TextBlob库,它是一个简单的NLP库,提供了开箱即用的情感分析功能:

# 情感分析
from textblob import TextBlob

# 示例文本
text = "I love this product! It's absolutely fantastic."

# 创建TextBlob对象
blob = TextBlob(text)

# 情感分析
sentiment = blob.sentiment

# polarity: 极性,范围从-1(非常负面)到1(非常正面)
print(f"Polarity: {sentiment.polarity}")

# subjectivity: 主观性,范围从0(非常客观)到1(非常主观)
print(f"Subjectivity: {sentiment.subjectivity}")

极性与主观性如下:

(2)中文版

要进行中文情感分析,我们可以使用Python的文本分析库,如SnowNLP。这个库对中文文本进行处理时,可以较好地识别情感倾向。我们将使用SnowNLP库来分析一个中文句子,并输出其情感评分。情感评分越接近1,表示情感越正面;越接近0,表示情感越负面。下面举一个具体实例:

from snownlp import SnowNLP

def analyze_sentiment_chinese(text):
    s = SnowNLP(text)
    sentiment_score = s.sentiments
    if sentiment_score > 0.5:
        return "positive"
    elif sentiment_score < 0.5:
        return "negative"
    else:
        return "neutral"

text = "这个产品非常好用,我很满意。"
sentiment = analyze_sentiment_chinese(text)
print(f"The sentiment of the text is: {sentiment}")

2:需要训练模型的情感分析

对于更复杂的情感分析任务,可能需要使用scikit-learnTensorFlowPyTorch等库来构建和训练更复杂的模型。以下是一个使用scikit-learn的朴素贝叶斯分类器进行情感分析的简单示例:

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics

# 假设我们有一些标记好的情感数据
data = ["I love this product", "I hate this product", "This is the best purchase I've made", "I'm disappointed with this product"]
labels = [1, 0, 1, 0]  # 1 表示正面,0 表示负面

# 特征提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(data)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.25, random_state=42)

# 使用朴素贝叶斯分类器
model = MultinomialNB()
model.fit(X_train, y_train)

# 预测
predictions = model.predict(X_test)

# 评估
print(metrics.accuracy_score(y_test, predictions))

由于提供的训练数据较少,所以评估模型的质量可能不会达到理想水平。
 

三:主题建模

主题建模是一种用于发现文本数据中隐藏主题的统计模型。一个常见的案例是使用LDA(Latent Dirichlet Allocation)模型对新闻文章或社交媒体帖子进行主题分析。以下是实现主题建模的一般步骤:

  1. 数据收集:收集用于分析的文本数据,例如新闻文章或社交媒体帖子。
  2. 文本预处理:包括分词、去除停用词、词干提取或词形还原等步骤。
  3. 构建词袋模型:将文本数据转换为词袋模型,这是一种表示文本中单词出现频率的数学模型。
  4. 应用LDA模型:使用LDA模型对词袋模型进行分析,以发现文本中的主题。
  5. 解释和评估结果:分析LDA模型输出的主题,并评估其质量。

为了演示,我将使用一个简化的示例,其中包含一些假想的新闻文章标题,并应用LDA模型来识别潜在的主题。

1:英文版

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

# 示例数据:一些假想的新闻文章标题
documents = [
    "Local Government Increases Taxes",
    "Sports Team Wins Championship",
    "New Medical Breakthrough Announced",
    "Economic Growth Slows Down",
    "Celebrity Divorce Shocks Fans",
    "Tech Company Launches New Product",
    "Environmental Protest Draws Thousands",
    "Ancient Artifact Discovered"
]

# 文本预处理:分词和构建词袋模型
vectorizer = CountVectorizer(stop_words='english')
dtm = vectorizer.fit_transform(documents)

# 应用LDA模型
lda_model = LatentDirichletAllocation(n_components=3, random_state=42)
lda_dtm = lda_model.fit_transform(dtm)

# 获取主题关键词
def get_topics_terms(lda_model, vectorizer, n_terms):
    terms = vectorizer.get_feature_names_out()
    topics = []
    for topic_idx, topic in enumerate(lda_model.components_):
        top_features_ind = topic.argsort()[:-n_terms - 1:-1]
        top_features = [terms[i] for i in top_features_ind]
        topics.append(top_features)
    return topics

topics = get_topics_terms(lda_model, vectorizer, 5)
topics

结果如下:

我已经使用LDA模型对一组假想的新闻文章标题进行了主题建模。以下是识别出的三个主题及其相关关键词:

  1. 主题1:与科技和体育相关的词汇,如“tech”, “product”, “launches”, “company”, “sports”。
  2. 主题2:与政府和税收相关的词汇,如“new”, “increases”, “government”, “taxes”, “local”。
  3. 主题3:与环境和社会运动相关的词汇,如“thousands”, “protest”, “environmental”, “draws”, “slows”。

这个简化的例子展示了如何使用LDA模型从文本数据中提取主题。

2:中文版

LDA主题建模同样可以应用于中文文本数据。但是,处理中文文本时需要特别注意以下几点:

  1. 分词:中文文本不像英文那样自然分隔,因此需要使用分词工具(如jieba分词)来正确地将文本分割成单词。
  2. 停用词:中文有自己的一套常见词和停用词,需要使用专门的中文停用词表。
  3. 词性标注和筛选:在某些情况下,可能需要根据词性(如名词、动词)来筛选单词,以改善主题建模的结果。

为了演示如何在中文文本上应用LDA主题建模,我将使用一个简化的中文文本数据集,并应用jieba分词和LDA模型来识别潜在的主题。

import jieba

# 示例中文数据:一些假想的新闻文章标题
chinese_documents = [
    "中国政府增加税收",
    "体育队赢得冠军",
    "新的医学突破宣布",
    "经济增长放缓",
    "名人离婚震惊粉丝",
    "科技公司推出新产品",
    "环保抗议吸引数千人",
    "古代文物被发现"
]

# 中文文本预处理:分词
segmented_docs = [" ".join(jieba.cut(doc)) for doc in chinese_documents]

# 使用CountVectorizer构建词袋模型
chinese_vectorizer = CountVectorizer()
chinese_dtm = chinese_vectorizer.fit_transform(segmented_docs)

# 应用LDA模型
chinese_lda_model = LatentDirichletAllocation(n_components=3, random_state=42)
chinese_lda_dtm = chinese_lda_model.fit_transform(chinese_dtm)

# 获取中文主题关键词
chinese_topics = get_topics_terms(chinese_lda_model, chinese_vectorizer, 5)
chinese_topics

结果如下:

我已经使用LDA模型对一组假想的中文新闻文章标题进行了主题建模。以下是识别出的三个主题及其相关关键词:

  1. 主题1:与体育和经济相关的词汇,如“冠军”, “体育”, “赢得”, “增长”, “放缓”。
  2. 主题2:与名人和文化相关的词汇,如“震惊”, “离婚”, “粉丝”, “名人”, “文物”。
  3. 主题3:与科技和社会运动相关的词汇,如“科技”, “产品”, “推出”, “公司”, “抗议”。

这个例子展示了如何使用LDA模型从中文文本数据中提取主题。在实际应用中,中文文本的处理可能更加复杂,需要考虑更多的语言特性和上下文信息。

四:每日股票行情数据

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

标签:数据分析,NLP,中文,模型,文本处理,tokens,用词,文本,分词
From: https://blog.csdn.net/2301_80651329/article/details/142151082

相关文章

  • 【数据分析】利用Python+AI+工作流实现自动化数据分析-全流程讲解
    文章目录一、为什么要用AI进行自动化分析?二、AI自动化分析场景三、编写Python脚本示例1、用flask实现让AI分析数据内容使用说明:示例2、用定时任务的方式,定时处理AI数据......
  • 高校毕业生就业大数据分析系统的设计与实现毕业设计源码
    博主介绍:✌专注于VUE,小程序,安卓,Java,python,物联网专业,有17年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。目录研究目的研究意义国外研究现状分析国内研究现状分析研究内容需求分析可行性分析......
  • 机械学习—零基础学习日志(Python做数据分析04)
    列表与元组对比,列表的长度可变、内容可以被修改。你可以用方括号定义,或用list函数:操作列表:增添:append方法,insert方法,list.extend(list)删除:del方法,pop方法,remove方法判断元素是否在列表内:in方法排序:sorted(list),list.sort()。二分搜索和维护已排序的列表bisect模块支......
  • [AI/NLP] 大语言模型排行榜 | 2024.06
    0引言通过排行榜,能快速了解各模型/产品的技术竞争力、综合竞争力。1通用-总排行榜闭源+开源排名模型机构总分理科得分文科得分Hard得分使用方式国内/国外备注1GPT-4oOpenAI81817685API国外2Claude-3.5-Sonnet-200kAnthropic77757284A......
  • 数据分析用r还是python
    R和Python两者谁更适合数据分析领域?在某些特定情况下谁会更有优势?还是一个天生在各方面都比另一个更好?当我们想要选择一种编程语言进行数据分析时,相信大多数人都会想到R和Python——但是从这两个非常强大、灵活的数据分析语言中二选一是非常困难的。我承认我还没能从这两个......
  • AIAutoPrediction足球数据分析软件工具安装教程(附带操作截图)
    文章目录前言一、AIAutoPrediction是什么?二、AIAutoPrediction能做什么?即时大小球预测即时亚盘预测大小球、亚盘初盘分析三、安装教程1、软件下载2、打开安装包,进行软件安装3、选择安装目录4、执行安装5、安装完成6、开始使用总结前言在绿茵场上,每一脚传球、每一......
  • 大模型岗位招聘数据分析及可视化
    数据入口:大模型相关岗位招聘数据集-Heywhale.com一:数据介绍首先预览提供的数据,数据文件为CSV格式文件,约有5000条招聘信息,共10个字段,岗位名称,工作地点,岗位薪资,经验要求,学历要求,岗位标签,企业名称,企业行业,企业规模,融资状况。可以分别对每个字段进行数据分析。数据大致如下:首......
  • 为数据仓库构建Zero-ETL无缝集成数据分析方案(上篇)
    对于从事数据分析的小伙伴们来说,最头疼的莫过于数据处理的阶段。在我们将数据源的原始数据导入数据仓储进行分析之前,我们通常需要进行ETL流程对数据格式进行统一转换,这个流程需要分配专业数据工程师基于业务情况完成,整个过程十分耗时耗力,而且往往不能获取实时的最新数据。在本......
  • 基于Python的黑龙江旅游景点数据分析系统 基于Flask的旅游景点爬虫可视化平台(程序+LW+
    ......
  • Python数据分析及可视化教程--商城订单为例-适用电商相关进行数据分析---亲测可用!!!!
    前言:Python是进行数据分析和可视化的强大工具,常用的库包括Pandas、NumPy、Matplotlib和Seaborn。以下是一个基本的教程概述,介绍了如何使用这些库来进行数据分析和可视化:Python数据分析及可视化教程1、环境准备2、数据准备3、开始数据分析3.1、导入库3.2、加......