如何在Pandas中用isin统计拆分句子词频并计算句子价值
解决句子词汇分值求和问题
嘿,我来帮你搞定这个文本分析里的句子价值量化需求!针对你的问题,我会结合isin方法来实现,同时也给你一个更简洁的替代方案。
核心思路
我们需要把每个句子拆分成单词,筛选出在词汇分值表(df_w)里的词汇,然后把它们对应的分值加起来。这里用isin可以准确判断哪些单词是我们需要统计的。
步骤1:预处理词汇表
先把df_w转换成字典,这样查找词汇对应的分值会更高效:
word_value_map = df_w.set_index('word')['value'].to_dict()
步骤2:用isin实现分值求和
我们可以写一个函数,专门处理单句的分值计算,其中用isin来筛选有效词汇:
def calculate_sentence_value(sentence): # 拆分句子为单词列表 words = sentence.split() # 用isin生成布尔数组,标记哪些单词在词汇表里 is_valid_word = pd.Series(words).isin(df_w['word']) # 遍历单词和对应的标记,累加有效词汇的分值 total_score = 0 for word, valid in zip(words, is_valid_word): if valid: total_score += word_value_map[word] return total_score
步骤3:应用到句子表生成新列
把函数应用到df_s的sentence列,生成新的total_value列:
df_s['total_value'] = df_s['sentence'].apply(calculate_sentence_value)
更简洁的替代写法
如果觉得上面的函数有点繁琐,也可以用lambda表达式结合字典的get方法(默认返回0,相当于自动忽略不在词汇表的单词),这样不用显式调用isin也能实现需求:
df_s['total_value'] = df_s['sentence'].apply( lambda x: sum(word_value_map.get(word, 0) for word in x.split()) )
最终结果
运行代码后,df_s会变成这样:
sentence total_value 0 hello life if good 12 1 i sell this at a high price 77 2 i sell or you sell 90
完美覆盖了你的需求:重复词汇(比如第三个句子里的两次sell)也会被正确累加分值,每个句子的总分计算准确。
内容的提问来源于stack exchange,提问作者Ben.T
相关产品推荐
相关产品推荐

