关键词提取案例

关键词提取案例

一、案例背景

在电商行业中,用户评论是了解用户需求和产品反馈的重要数据来源。

通过分析用户评论,可以提取出用户关注的关键词,从而帮助商家优化产品和服务。

本案例将展示如何结合pandas数据清洗、jieba分词和scikit-learn关键词提取技术,处理和分析用户评论数据。

二、数据模拟

1.数据需求

  • 商品ID:随机生成的整数,范围为1000到9999。

  • 用户评论:随机生成的中文句子,模拟用户对商品的评价。

  • 数据量:至少10000条记录。

2.数据生成代码

# 导入必要的库
import pandas as pd
from faker import Faker
import random

# 初始化Faker库(设置为中文)
fake = Faker('zh_CN')

# 模拟数据的函数
def generate_comments(num_records):
    # 创建一个字典,包含两列:商品ID和用户评论
    data = {
        # 使用列表推导式生成随机商品ID,范围为1000到9999
        '商品ID': [random.randint(1000, 9999) for _ in range(num_records)],
        # 使用Faker库生成随机中文评论
        '用户评论': [fake.text() for _ in range(num_records)]
    }
    # 将字典转换为pandas DataFrame
    return pd.DataFrame(data)

# 生成10000条数据
df = generate_comments(10000)

# 查看前几行数据
print("模拟数据的前几行:")
print(df.head())

# 保存为CSV文件
df.to_csv('comments.csv', index=False, encoding='utf-8')
print("CSV文件已生成,包含10000条数据。")

3.代码运行结果

运行上述代码后,将生成一个名为comments.csv的文件,包含10000条用户评论数据。文件内容示例如下:

商品ID用户评论
1234这个商品质量很好,我很满意!
5678东西不错,性价比高,值得购买
9101服务态度差,下次不会再买了。
2345商品包装很精美,物流速度也很快。
6789产品功能很强大,但价格有点贵。

4.逐行注释

4.1. 导入库:

  • pandas :用于数据处理。

  • Faker :用于生成模拟数据。

  • random :用于生成随机数。

4.2. 初始化Faker库:

  • 设置为中文模式,以便生成中文评论。

4.3. 定义生成数据的函数:

  • 创建一个包含 商品ID 和 用户评论 的字典。

  • 使用 random.randint() 生成随机商品ID。

  • 使用 fake.text() 生成随机中文评论。

  • 将字典转换为 pandas DataFrame 。

4.4. 生成10000条数据:

  • 调用函数生成数据。

4.5. 查看前几行数据:

  • 使用 df.head() 查看生成的数据。

4.6. 保存为CSV文件:

  • 使用 to_csv 方法将数据保存为CSV文件。

三、关键词提取与分析

1.数据处理与关键词提取

1.1 数据读取与清洗
# 导入必要的库
import pandas as pd

# 数据读取与清洗
# 读取CSV文件
data = pd.read_csv('comments.csv', encoding='utf-8')

# 去除空评论和重复评论
data = data.dropna(subset=['用户评论']).drop_duplicates(subset=['用户评论'])
print("清洗后的数据行数:", len(data))

1.2 分词与关键词提取
# 分词与关键词提取
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
# 定义分词函数,使用jieba进行中文分词
def chinese_tokenization(text):
    return " ".join(jieba.cut(text))

# 对每条评论进行分词
data['分词评论'] = data['用户评论'].apply(chinese_tokenization)

# 使用TfidfVectorizer提取关键词
vectorizer = TfidfVectorizer(norm=None, use_idf=True, smooth_idf=True, sublinear_tf=False)
# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.fit_transform(data['分词评论'])

# 获取特征名称(即词汇表)
feature_names = vectorizer.get_feature_names_out()

# 提取每条评论的关键词
def extract_keywords(row, feature_names, top_n=5):
    # 将TF-IDF值和特征名称组合,并按TF-IDF值降序排序
    sorted_tfidf = sorted(zip(row, feature_names), reverse=True)
    # 提取权重最高的top_n个关键词
    return [word for _, word in sorted_tfidf[:top_n]]

# 将TF-IDF矩阵转换为关键词列表
data['关键词'] = [extract_keywords(row, feature_names) for row in tfidf_matrix.toarray()]

1.3 统计关键词频率
from collections import Counter
# 统计所有关键词的频率
all_keywords = [word for sublist in data['关键词'] for word in sublist]
keyword_freq = Counter(all_keywords)

# 输出关键词频率统计
print("关键词频率统计:")
for keyword, freq in keyword_freq.most_common(10):
    print(f"{keyword}: {freq}")

# 保存处理后的数据到新的CSV文件
data.to_csv('processed_comments.csv', index=False, encoding='utf-8')
print("处理后的数据已保存到processed_comments.csv文件中。")    
1.4 完整代码
# 导入必要的库
import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from collections import Counter

# 数据读取与清洗
# 读取CSV文件
data = pd.read_csv('comments.csv', encoding='utf-8')

# 去除空评论和重复评论
data = data.dropna(subset=['用户评论']).drop_duplicates(subset=['用户评论'])
print("清洗后的数据行数:", len(data))

# 分词与关键词提取
# 定义分词函数,使用jieba进行中文分词
def chinese_tokenization(text):
    return " ".join(jieba.cut(text))

# 对每条评论进行分词
data['分词评论'] = data['用户评论'].apply(chinese_tokenization)

# 使用TfidfVectorizer提取关键词
vectorizer = TfidfVectorizer(norm=None, use_idf=True, smooth_idf=True, sublinear_tf=False)
# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.fit_transform(data['分词评论'])

# 获取特征名称(即词汇表)
feature_names = vectorizer.get_feature_names_out()

# 提取每条评论的关键词
def extract_keywords(row, feature_names, top_n=5):
    # 将TF-IDF值和特征名称组合,并按TF-IDF值降序排序
    sorted_tfidf = sorted(zip(row, feature_names), reverse=True)
    # 提取权重最高的top_n个关键词
    return [word for _, word in sorted_tfidf[:top_n]]

# 将TF-IDF矩阵转换为关键词列表
data['关键词'] = [extract_keywords(row, feature_names) for row in tfidf_matrix.toarray()]

# 统计关键词频率
# 统计所有关键词的频率
all_keywords = [word for sublist in data['关键词'] for word in sublist]
keyword_freq = Counter(all_keywords)

# 输出关键词频率统计
print("关键词频率统计:")
for keyword, freq in keyword_freq.most_common(10):
    print(f"{keyword}: {freq}")

# 保存处理后的数据到新的CSV文件
data.to_csv('processed_comments.csv', index=False, encoding='utf-8')
print("处理后的数据已保存到processed_comments.csv文件中。")

2.结果输出

运行上述代码后,将输出关键词频率统计结果,并保存处理后的数据到新的CSV文件中。

示例输出

关键词频率统计:
来源: 319
软件: 312
电脑: 288
类型: 286
这是: 286
资源: 281
质量: 277
大学: 266
因为: 263
文件: 260
……

3.逐行注释

3.1. 导入库:

  • pandas :用于数据处理。

  • jieba :用于中文分词。

  • TfidfVectorizer :用于计算TF-IDF值。

  • Counter :用于统计关键词频率。

3.2. 读取CSV文件:

  • 使用 pd.read_csv 读取生成的CSV文件。

3.3. 数据清洗:

  • 使用 dropna 去除空评论。

  • 使用 drop_duplicates 去除重复评论。

3.4. 定义分词函数:

  • 使用 jieba.cut 对文本进行分词。

3.5. 对每条评论进行分词:

  • 使用 apply 方法对每条评论应用分词函数。

3.6. 使用TfidfVectorizer提取关键词:

  • 初始化 TfidfVectorizer ,设置参数。

  • 计算TF-IDF矩阵。

3.7. 获取特征名称:

  • 使用 get_feature_names_out 获取词汇表。

3.8. 定义提取关键词的函数:

  • 将TF-IDF值和特征名称组合。

  • 按TF-IDF值降序排序。

  • 提取权重最高的 top_n 个关键词。

3.9. 将TF-IDF矩阵转换为关键词列表:

  • 对每行TF-IDF矩阵应用提取关键词的函数。

3.10. 统计关键词频率:

  • 将所有关键词展平为一个列表。

  • 使用 Counter 统计关键词频率。

3.11. 输出关键词频率统计:

  • 使用 most_common 方法获取出现频率最高的10个关键词。

3.12. 保存处理后的数据:

  • 使用 to_csv 方法将处理后的数据保存为新的CSV文件。

四、应用场景

  • 情感分析:通过关键词频率和情感词典,判断用户对商品的整体态度。

  • 用户需求分析:了解用户最关注的方面(如质量、价格、服务等)。

  • 产品优化:根据高频关键词,针对性地改进产品或服务。


五、总结

通过结合pandas数据清洗、jieba分词和scikit-learn关键词提取技术,

我们能够高效地处理和分析用户评论数据,为后续的业务决策提供数据支持。

本案例展示了从数据模拟到关键词提取的完整流程,可以直接应用于实际工作中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李昊哲小课

桃李不言下自成蹊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值