You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python分析法语文章词频时如何排除词汇?能否用get_stop_words('fr')?

如何在法语文章词频统计中排除停用词?

问题描述

我有一个DataFrame df,其中“Content”列存储了从互联网抓取的法语文章列表。已编写代码生成包含词汇、词频的统计结果,但希望在分析中排除连词等特定词汇,请问需在现有代码中添加什么内容?另外,是否可以使用get_stop_words('fr')来更高效地实现该需求?

原代码

import csv
from collections import Counter
from collections import defaultdict

import pandas as pd


df = pd.read_excel('C:/.../df_clean.xlsx', 
                            sheet_name='Articles Scraping')
df = df[df['Content'].notnull()]
d1 = dict()

for line in df[df.columns[6]]:
    words = line.split()
    # print(words)
    for word in words:
        if word in d1:
            d1[word] += 1
        else:
            d1[word] = 1

sort_words = sorted(d1.items(), key=lambda x: x[1], reverse=True)

解决方案

方法1:手动定义停用词列表

如果你只需排除特定连词或少量停用词,可以手动创建一个停用词集合,统计时跳过这些词即可:

import csv
from collections import Counter
import pandas as pd

# 手动定义需排除的法语停用词(可按需补充)
french_stopwords = {'et', 'ou', 'mais', 'donc', 'or', 'ni', 'car', 'que', 'qui', 'dans', 'sur'}

df = pd.read_excel('C:/.../df_clean.xlsx', sheet_name='Articles Scraping')
df = df[df['Content'].notnull()]
word_counts = Counter()

# 直接用列名替代索引,避免列顺序变动导致错误
for line in df['Content']:
    words = line.split()
    for word in words:
        # 统一转小写,避免大小写重复统计(如"Et"和"et")
        lower_word = word.lower()
        if lower_word not in french_stopwords:
            word_counts[lower_word] += 1

sort_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)

方法2:用预定义停用词库高效实现

当然可以用get_stop_words('fr')这类预定义的法语停用词集合,比手动定义更全面高效。不同库的实现方式略有不同,下面给出两种常用方案:

方案A:使用Gensim库

Gensim直接提供get_stop_words('fr')方法:

# 先安装依赖
pip install gensim
import csv
from collections import Counter
import pandas as pd
from gensim.parsing.preprocessing import get_stop_words

# 获取预定义法语停用词集合
french_stopwords = set(get_stop_words('fr'))

df = pd.read_excel('C:/.../df_clean.xlsx', sheet_name='Articles Scraping')
df = df[df['Content'].notnull()]
word_counts = Counter()

for line in df['Content']:
    words = line.split()
    for word in words:
        lower_word = word.lower()
        if lower_word not in french_stopwords:
            word_counts[lower_word] += 1

sort_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)

方案B:使用NLTK库

NLTK也包含多语言停用词库:

# 安装依赖并下载停用词数据
pip install nltk
python -m nltk.downloader stopwords
import csv
from collections import Counter
import pandas as pd
from nltk.corpus import stopwords

# 获取预定义法语停用词集合
french_stopwords = set(stopwords.words('french'))

df = pd.read_excel('C:/.../df_clean.xlsx', sheet_name='Articles Scraping')
df = df[df['Content'].notnull()]
word_counts = Counter()

for line in df['Content']:
    words = line.split()
    for word in words:
        lower_word = word.lower()
        if lower_word not in french_stopwords:
            word_counts[lower_word] += 1

sort_words = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)

额外优化提示

  • 用collections.Counter替代手动维护字典,代码更简洁高效
  • 直接使用列名df['Content']而非df[df.columns[6]],提升代码可读性,避免列顺序变动引发错误
  • 统一将词汇转为小写,避免同一词汇因大小写差异被重复统计

内容的提问来源于stack exchange,提问作者Nico Larrea Avila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:10:29