在Python中如何将双列CSV文件转换为Bigrams?
将CSV文件转换为Bigrams的实现方法
下面提供两种Python实现方案,帮你把给定的CSV文本列转换为二元组(Bigrams),同时保留对应的类别信息:
方案一:使用NLTK+Pandas(专业分词处理)
适合需要准确处理标点、特殊字符的场景,步骤如下:
- 先安装依赖库(未安装的话执行):
pip install pandas nltk
- 运行处理代码:
import pandas as pd from nltk.util import bigrams from nltk.tokenize import word_tokenize # 首次运行需下载分词模型,取消注释以下两行 # import nltk # nltk.download('punkt') # 读取制表符分隔的CSV文件 df = pd.read_csv('demo.csv', sep='\t') def generate_bigrams(text): # 分词并转小写统一格式 tokens = word_tokenize(text.lower()) # 过滤标点符号(可选,按需调整) tokens = [tok for tok in tokens if tok.isalnum()] # 生成bigram并转为字符串格式 return [' '.join(bigram) for bigram in bigrams(tokens)] # 为每行文本生成bigrams df['bigrams'] = df['words'].apply(generate_bigrams) # 查看结果 print(df[['class', 'bigrams']]) # 保存结果到新CSV df.to_csv('demo_bigrams.csv', sep='\t', index=False)
方案二:纯Python实现(无额外依赖)
适合快速处理、不想安装第三方库的场景:
import pandas as pd def generate_bigrams_simple(text): # 按空格分割文本并转小写 raw_tokens = text.lower().split() # 去除每个token首尾的标点 tokens = [tok.strip(',.?') for tok in raw_tokens if tok.strip(',.?')] # 生成相邻二元组 return [f"{tokens[i]} {tokens[i+1]}" for i in range(len(tokens)-1)] # 读取CSV df = pd.read_csv('demo.csv', sep='\t') # 生成bigrams列 df['bigrams'] = df['words'].apply(generate_bigrams_simple) # 输出结果 print(df[['class', 'bigrams']])
示例输出(以第一行为例)
原文本:hi my name is Jeff.
生成的Bigrams:['hi my', 'my name', 'name is', 'is jeff']
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

