作为一名关注全球化与城市研究的css的学生,我常在香港的中环通过天桥见到周日聚会的外籍家庭佣工。她们是这座“全球城市”不可或缺的血液,但在本地的舆论场中,她们究竟是被视为“家庭的一份子”,还是仅仅是“劳动力”?

带着这个社会学疑问,我决定利用 Python 的文本挖掘技术,对自己采集的社交媒体评论进行一次“微观体检”。本文将介绍如何使用 Jieba(分词)WordCloud(词云)SnowNLP(情感分析) 来解构关于外籍劳工的文本数据。

1. 为什么选择计算方法?(Why Computational?)

传统的社会科学研究往往依赖访谈或问卷,这能提供深度的个案细节。但在大数据时代,面对成千上万条网络评论,我们需要一种能快速捕捉“总体舆论图景”的工具。

计算社会科学(CSS)为我们提供了两把利器:

  1. 词云 (Word Cloud):帮我们看见“显性议题”(大家都在讨论什么?)。

  2. 情感分析 (Sentiment Analysis):帮我们看见“隐性情绪”(大家是支持还是排斥?)。

本篇博客将作为我的入门级(Introductory)技术尝试,带大家跑通这一流程。

2. 工具箱准备

我们需要用到以下 Python 库:

下一步计划: 为了解决“语境缺失”的问题,我的下一篇 进阶博客 将尝试使用 LDA 主题模型 (Latent Dirichlet Allocation) ,去挖掘文本背后更深层的叙事结构,看看媒体是如何构建“外籍劳工”的立体形象的。

  • Jieba: 也就是“结巴”分词。中文句子不像英文有空格,计算机看不懂“我爱香港”,需要切分成“我/爱/香港”。

  • WordCloud: 将高频词汇可视化。

  • SnowNLP: 专门针对中文的情感分析库,能给句子打分(0-1分)。

    # 在 Jupyter Notebook 中安装
    !pip install jieba wordcloud matplotlib snownlp

    3. 实战演练

    第一步:数据准备与预处理

    为了演示,我选取了一组模拟的关于香港外籍家政工(FDWs)的网络评论数据(包含支持、抱怨、政策讨论等)。

  • import jieba
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    # 模拟数据集(在实际研究中,这里通常是读取爬虫抓取的 txt/csv 文件)
    text_data = """
    香港的外籍家庭佣工是这座城市不可或缺的一部分。非常感谢她们照顾老人和孩子。
    然而,外佣在假期时常常面临空间不足的问题,中环和维多利亚公园变得非常拥挤。
    虽然她们为香港经济做出了巨大贡献,但有时也会遭遇雇主的苛待和社会排斥。
    政府的政策应当更好地保障外籍劳工的权益,包括最低工资和居住环境。
    有些外佣的工作态度很差,不仅偷懒还借钱不还,让人很头疼。
    周日到处都是人,阻街而且非常吵闹,影响市容。
    这是一个关乎全球公平的问题,我们需要反思全球照护链背后的剥削。
    离乡背井来工作真的不容易,值得尊重。
    """
    
    # 文本清洗:去除无意义的停用词(Stopwords)
    # 我们不希望词云里出现大量的“的”、“了”、“是”
    stopwords = {'的', '了', '是', '在', '和', '更', '但', '也', '这', '为', '与', '很', '人'}
    
    print("数据准备就绪。")
  • 第二步:中文分词与词云生成

    这是最直观的一步。我们看看计算机“读”出了什么核心词。

  • # 1. 使用 Jieba 进行分词
    # cut_all=False 开启精确模式
    seg_list = jieba.cut(text_data, cut_all=False)
    text_split = " ".join(seg_list)
    
    # 2. 设置词云参数
    # 【关键点】Windows 需指定 simhei.ttf,Mac 需指定 PingFang.ttc,否则中文会显示乱码
    font_path = 'C:/Windows/Fonts/simhei.ttf' # 请根据你的系统修改路径
    
    wc = WordCloud(
        font_path=font_path,
        background_color="white",
        width=1000,
        height=600,
        stopwords=stopwords,
        collocations=False # 避免重复词语
    )
    
    # 3. 生成并显示
    wc.generate(text_split)
    
    plt.figure(figsize=(10, 6))
    plt.imshow(wc, interpolation='bilinear')
    plt.axis("off")
    plt.title("Keyword Analysis of FDW Discourse", fontsize=15)
    plt.show()

  • 📊 结果解读: 生成的词云图中,我们可能会看到**“权益”“空间”“拥挤”“贡献”**占据显著位置。这印证了 Henri Lefebvre 的“空间生产”理论——外籍劳工议题的核心矛盾,往往集中在城市公共空间的使用权与经济贡献之间的张力。

  • 4. 技术反思与总结 (Reflection)

    通过这不到 50 行代码,我们完成了从文本到洞察的转化。但作为研究者,我们也需要保持 Technical Imagination(技术想象力) 的审慎:

  • 算法偏见SnowNLP 是基于电商评论训练的,它可能将“拥挤”理解为负面,但在城市研究中,“拥挤”也可能代表活力。直接套用商业模型分析社会议题需要小心。

  • 语境缺失:词云切断了词与词的联系(Context)。“不/喜欢”和“不喜欢”在简单的词袋模型中可能被误读。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐