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
相关产品推荐
相关产品推荐

