基于句子位置加权的抽取式文本摘要:核心关键词提取技术问询
嘿,针对你要做抽取式文本摘要生成核心关键词的需求,结合你想给早出现词汇更高权重的思路,我整理了一套用Python+pandas实现的具体方案,应该能帮到你:
1. 先提取每个词汇的首次出现位置
首先得从你的句子DataFrame里,按顺序(索引0是首句)记录每个词汇第一次出现的句子位置。这样才能区分“早出现”和“晚出现”的词:
import pandas as pd # 假设你的句子数据集叫sentences,其中存储文本的列名为'text' first_occurrence = {} # 按句子顺序遍历,索引就是句子的先后位置 for idx, row in sentences.iterrows(): # 这里先做基础分词,英文可以直接split,中文建议用jieba等工具 # 同时转小写避免大小写重复计数(英文场景) words_in_sentence = row['text'].lower().split() for word in words_in_sentence: # 只记录第一次出现的位置 if word not in first_occurrence: first_occurrence[word] = idx # 转成DataFrame方便后续合并 first_occurrence_df = pd.DataFrame.from_dict( first_occurrence, orient='index', columns=['first_pos'] ).reset_index().rename(columns={'index': 'words'})
2. 合并词频与首次位置数据
把你现有的词频DataFrame(words)和刚生成的首次位置数据合并,让每个词都对应上出现次数和首次位置:
# 左连接确保保留所有词频数据里的词汇 merged_df = pd.merge(words, first_occurrence_df, on='words', how='left') # 处理可能的缺失值(比如某些词在词频表里但没在句子中出现,给个靠后的默认位置) max_sent_idx = sentences.index.max() merged_df['first_pos'] = merged_df['first_pos'].fillna(max_sent_idx + 1)
3. 计算加权得分
核心逻辑来了:给早出现的词更高权重,然后结合出现次数算出最终得分。这里用**1/(首次位置+1)**作为权重(加1是避免除以0,首句位置0的词权重最高):
# 计算权重:位置越靠前,权重值越大 merged_df['weight'] = 1 / (merged_df['first_pos'] + 1) # 加权得分 = 出现次数 × 权重 merged_df['weighted_score'] = merged_df['occurrences'] * merged_df['weight']
4. 筛选核心关键词
按加权得分降序排序,取前N个就是你要的核心关键词列表:
# 按得分从高到低排序 sorted_keywords = merged_df.sort_values(by='weighted_score', ascending=False) # 比如取前10个核心关键词 top_keywords = sorted_keywords['words'].head(10).tolist() print("核心关键词列表:", top_keywords)
一些优化小建议
- 分词优化:如果是中文,一定要用专业分词工具(比如jieba),同时过滤停用词(比如“的、了、啊”这类无意义词汇);英文场景要去掉标点、停用词(比如nltk的stopwords库),避免无效词汇干扰。
- 权重调整:如果觉得首次位置的权重影响太大,可以调整公式,比如用
1/(first_pos ** 0.5 + 1),让权重衰减更平缓;或者给前3句的词额外乘1.5的权重,强化开头词汇的优先级。 - 过滤无效词汇:你的词频表里有''、'11-1'这类特殊符号/数字组合,建议提前过滤掉长度小于2的词、纯数字/符号的词,提升关键词质量。
内容的提问来源于stack exchange,提问作者spinach
相关产品推荐
相关产品推荐

