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

如何修复TextRank结合Scattertext可视化中的词形还原问题?

修复TextRank+Scattertext词形还原问题的方案

问题根源

你遇到的问题核心在于:st.PyTextRankPhrases默认提取原始文本短语,即便spaCy完成了词形还原,PyTextRank输出的短语仍保留原始词汇形式;直接传入词形列表会破坏PyTextRank依赖的spaCy Doc结构,引发报错。

可行修复代码

以下方案会让Scattertext使用基于词形的短语特征,同时保留PyTextRank的短语提取逻辑:

import pytextrank
import spacy
import scattertext as st

# 加载spaCy模型并添加TextRank管道
nlp = spacy.load('en_core_web_sm')
nlp.add_pipe("textrank", last=True)

# 处理文本,生成带词形还原的spaCy Doc对象
convention_df = textrank_df.assign(
    parse=lambda df: df['Combined'].apply(nlp),
)

# 自定义特征提取函数:从PyTextRank短语中提取词形组合
def get_lemmatized_phrases(doc):
    # 获取PyTextRank生成的短语
    phrases = doc._.phrases
    lemmatized_phrases = []
    for phrase in phrases:
        # 对短语中的每个token取词形,再拼接成短语
        lemma_phrase = " ".join([token.lemma_ for token in phrase.chunks[0]])
        lemmatized_phrases.append(lemma_phrase)
    # 返回词形短语集合,去重
    return set(lemmatized_phrases)

# 构建语料库,使用自定义的词形短语提取函数
corpus = st.CorpusFromParsedDocuments(
    convention_df,
    category_col='Response Variable',
    parsed_col='parse',
    feats_from_spacy_doc=lambda doc: get_lemmatized_phrases(doc)
).build()

方案说明

  1. 保留spaCy Doc结构:依旧用nlp()处理文本生成Doc对象,确保PyTextRank能正常提取短语。
  2. 自定义短语转换:遍历PyTextRank生成的每个短语,将短语内的每个token替换为对应的词形,再组合成词形短语。
  3. 去重处理:用set()去除重复的词形短语,避免特征冗余。

额外验证步骤

如果词形还原仍不生效,可先单独验证spaCy的词形还原功能是否正常:

test_doc = nlp("running runs ran")
for token in test_doc:
    print(f"原始词: {token.text} | 词形: {token.lemma_}")

正常输出应显示所有形式的"run"都被还原为"run",若未达标,检查spaCy模型是否正确加载(比如en_core_web_sm的lemmatizer组件是否正常工作)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:58