如何用Python实现单词与句子匹配并将结果导出至CSV?
Python实现单词与句子的匹配并写入CSV
核心匹配逻辑设计
- 遍历句子列表,逐个检查每个句子是否包含单词列表中的任意单词
- 用正则表达式的单词边界(
\b)确保匹配完整单词,避免部分匹配(比如避免把"cat"误匹配到"category") - 每找到一组匹配的句子与单词,就存入结果列表
- 最后将结果列表写入新的CSV文件
代码实现
基础版(使用内置csv模块)
假设你已经获取了两个列表:words_list(存储提取的单词)、sentences_list(存储提取的句子)
import csv import re # 示例导入后的列表(实际使用时替换为你的数据) words_list = ["apple", "banana", "orange"] sentences_list = ["I ate an apple today.", "Banana is my favorite fruit.", "I like drinking orange juice.", "This is a test sentence."] # 存储匹配结果 match_results = [] # 遍历所有句子和单词,完成匹配 for sentence in sentences_list: for word in words_list: # 匹配完整单词,忽略大小写;若需区分大小写,去掉flags参数 if re.search(rf"\b{re.escape(word)}\b", sentence, flags=re.IGNORECASE): match_results.append({"sentence": sentence, "matched_word": word}) # 写入CSV文件 with open("matched_results.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["sentence", "matched_word"]) writer.writeheader() writer.writerows(match_results)
高效版(使用pandas,适合大数据量)
如果处理的数据量较大,用pandas会更高效:
import pandas as pd import re # 示例导入后的列表(实际使用时替换为你的数据) words_list = ["apple", "banana", "orange"] sentences_list = ["I ate an apple today.", "Banana is my favorite fruit.", "I like drinking orange juice.", "This is a test sentence."] # 转换为DataFrame格式 df = pd.DataFrame({"sentence": sentences_list}) # 生成匹配正则模式,匹配任意目标单词的完整形式 pattern = r"\b(" + "|".join(re.escape(word) for word in words_list) + r")\b" # 提取匹配的单词 df["matched_word"] = df["sentence"].str.extract(pattern, flags=re.IGNORECASE) # 过滤无匹配的行并重置索引 matched_df = df.dropna().reset_index(drop=True) # 写入CSV文件 matched_df.to_csv("matched_results_pandas.csv", index=False, encoding="utf-8")
注意事项
- 单词匹配精度:如果不需要严格匹配完整单词(比如允许匹配"apples"中的"apple"),可以去掉正则表达式中的
\b - 大小写处理:代码默认忽略大小写,若需区分大小写,删除
re.IGNORECASE参数即可 - 特殊字符兼容:用
re.escape(word)处理单词中的正则特殊字符(如.、*),避免正则解析报错 - 多匹配场景:基础版会为一个句子中的每个匹配单词生成单独记录;若需在一条记录中显示所有匹配单词,可改用
re.findall提取所有匹配项后拼接
内容的提问来源于stack exchange,提问作者Georg Wildmoser
相关产品推荐
相关产品推荐

