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

如何配置TF-IDF vectorizer参数实现按逗号切分的自定义分词

问题根源

TfidfVectorizer默认配置面向自然语言长文本设计,自带的分词逻辑以空白为分隔边界,还会默认执行词干提取、停用词过滤规则,无法识别数据中以逗号作为术语边界的结构化格式,因此会出现跨术语拼接、重复词提取的异常结果。

解决方案

核心是替换默认分词逻辑,直接以逗号为分隔符提取独立术语,具体操作如下:

  • 编写专用分词函数:单条文本传入后,直接按逗号拆分,对每个拆分片段做首尾空白清理,过滤空值后直接作为分词结果,跳过默认的词干提取、正则匹配分词步骤。
  • 初始化向量器时传入自定义分词规则:必须同步将token_pattern设为None,否则默认的正则分词规则会覆盖自定义逻辑,导致配置失效。

完整可运行代码示例:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import pandas as pd

# 自定义逗号分隔术语分词器
def comma_tokenizer(text):
    # 如需兼容全角逗号,可打开下一行注释
    # text = text.replace(',', ',')
    raw_tokens = text.split(',')
    # 清理术语首尾空白,过滤空片段
    cleaned_tokens = [t.strip() for t in raw_tokens if t.strip()]
    return cleaned_tokens

# 初始化TF-IDF向量器
tfidf_vectorizer = TfidfVectorizer(
    tokenizer=comma_tokenizer,
    token_pattern=None,
    lowercase=True  # 术语对大小写敏感时设为False
)

# 拟合转换,假设你的术语存在DataFrame的terms列
# tfidf_matrix = tfidf_vectorizer.fit_transform(df['terms'])

# 后续KMeans聚类按常规逻辑编写即可
# kmeans = KMeans(n_clusters=设置为你需要的簇数量, random_state=42)
# cluster_res = kmeans.fit_predict(tfidf_matrix)

# 测试验证(可删除)
sample_texts = [
    "machine learning, data, ia, segmentation, analysis",
    "big data, data lake, data visualisation, marketing, seo"
]
test_matrix = tfidf_vectorizer.fit_transform(sample_texts)
# 输出的术语列表为['analysis' 'big data' 'data' 'data lake' 'data visualisation' 'ia' 'machine learning' 'marketing' 'segmentation' 'seo'],完全符合预期
print(tfidf_vectorizer.get_feature_names_out())
注意事项
  • 该配置完全跳过了默认的文本预处理规则,不会对术语做词干提取、词形还原,如果需要这类处理,可以在自定义分词函数里对每个清理后的术语单独加处理逻辑。
  • 向量拟合完成后,可直接通过tfidf_vectorizer.get_feature_names_out()拿到所有独立术语,匹配KMeans的聚类中心权重,就能快速提取每个簇的代表术语,不会再出现乱拼接的无效词项。
  • 如果你的术语中本身包含逗号(极少见场景),需要提前对术语内的逗号做转义处理,避免被误识别为分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:31:03