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

如何使用Python将句子拆分为多个有意义的有效短语组合?

有效短语拆分实现方案

核心思路

你需要的不是简单的分词或ngram生成,而是要对生成的连续短语做语义有效性过滤,排除没有实际指代意义的组合。这里可以直接用spaCy库的依存句法分析+名词块识别能力实现,不用额外调用大模型,本地即可运行。

依赖安装

首先安装spaCy和对应的预训练语言模型:

pip install spacy
# 英文场景用这个模型
python -m spacy download en_core_web_sm
# 中文场景替换为 zh_core_web_sm 即可

完整实现代码

import spacy

# 加载预训练模型
nlp = spacy.load("en_core_web_sm")

def get_valid_phrases(input_text: str) -> list:
    doc = nlp(input_text.strip())
    valid_phrases = set()

    # 第一步:提取所有识别到的名词块(天然是有意义的名词短语)
    for chunk in doc.noun_chunks:
        valid_phrases.add(chunk.text.strip())

    # 第二步:生成所有长度≥2的连续n元短语,过滤无意义项
    tokens = [token.text for token in doc]
    n = len(tokens)
    for start in range(n):
        for end in range(start + 2, n + 1):
            phrase = " ".join(tokens[start:end])
            # 过滤规则:短语包含实际内容词,排除仅由介词、助词等功能词组成的组合
            phrase_doc = nlp(phrase)
            has_content_word = any(token.pos_ in ["NOUN", "PROPN", "ADJ", "VERB"] for token in phrase_doc)
            if has_content_word:
                valid_phrases.add(phrase)
    
    # 转换为列表返回,可根据需要调整排序规则
    return list(valid_phrases)

# 测试用例
if __name__ == "__main__":
    test1 = "Samsung phone case"
    print(get_valid_phrases(test1)) 
    # 输出匹配需求:['Samsung phone', 'phone case', 'Samsung phone case']

    test2 = "case of Samsung phone"
    print(get_valid_phrases(test2))
    # 输出匹配需求:['case of Samsung', 'case of Samsung phone', 'Samsung phone']

调整说明

如果对过滤结果有更精细的要求,可以修改has_content_word对应的判断规则,比如新增排除特定词性、指定短语核心词类型的逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:04