You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现含负向术语的词袋(BOW)模型?

问题

现有一份包含科学术语的文本数据集,部分术语带有-前缀。使用Python的CountVectorizer实现词袋(BOW)模型时,带-的术语会被当作独立特征。需求是将带-的术语计数设为负值,并与无-的同术语合并,例如文本Q207KL41 -Q207KL41 -Q207KL41对应的Q207KL41特征值为-1。

原BOW实现代码如下:

def BOW(df):
  CountVec = CountVectorizer() # to use only  bigrams ngram_range=(2,2)
  Count_data = CountVec.fit_transform(df)
  Count_data = Count_data.astype(np.uint8)
  cv_dataframe=pd.DataFrame(Count_data.toarray(), columns=CountVec.get_feature_names_out(), index=df.index)  # <- HERE
  return cv_dataframe.astype(np.uint8)

df_reps = pd.read_csv("c:\file.csv")
df = BOW(df_reps["Txt"])
解决方案

可以通过以下步骤修改代码实现需求:

  1. 替换数据类型:放弃使用无法存储负数的np.uint8,改用支持正负值的np.int32;
  2. 合并正负术语:遍历所有特征列,识别带-前缀的术语,将其计数取负后合并到对应的无前缀术语列;
  3. 清理冗余列:删除所有带-前缀的原始特征列。

修改后的完整代码:

import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

def BOW(df):
    CountVec = CountVectorizer()
    Count_data = CountVec.fit_transform(df)
    # 改用支持负数的整数类型存储
    Count_data = Count_data.astype(np.int32)
    cv_dataframe = pd.DataFrame(Count_data.toarray(), columns=CountVec.get_feature_names_out(), index=df.index)
    
    # 处理带'-'前缀的术语
    processed_terms = set()
    for col in cv_dataframe.columns:
        if col.startswith('-'):
            base_term = col[1:]
            if base_term in cv_dataframe.columns:
                # 将带'-'的计数取负,累加到基础术语列
                cv_dataframe[base_term] -= cv_dataframe[col]
            else:
                # 若基础术语不存在,直接将负数作为该术语的初始值
                cv_dataframe[base_term] = -cv_dataframe[col]
            processed_terms.add(col)
    
    # 删除所有带'-'前缀的冗余列
    cv_dataframe.drop(columns=processed_terms, inplace=True)
    
    return cv_dataframe

df_reps = pd.read_csv("c:\file.csv")
df = BOW(df_reps["Txt"])

代码说明

  • 类型适配:np.int32支持正负整数,满足负数计数的存储需求;
  • 合并逻辑:对于每个带-的术语,提取其基础术语后,将当前列的计数取负合并到基础术语列,确保正负计数抵消;
  • 冗余清理:删除带-的原始列,最终只保留合并后的基础术语特征。

测试示例:输入文本Q207KL41 -Q207KL41 -Q207KL41,处理后Q207KL41的特征值为1 - 2 = -1,完全符合需求。

内容的提问来源于stack exchange,提问作者asmgx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:30:59