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

如何在Python中自动识别无空格字符串中的单词?

拆分连写的首字母大写单词

针对你需要拆分连写单词的场景,这里提供两种实用的Python解决方案:

方法1:正则表达式(适配首字母大写连写场景)

你的输入字符串都是「每个单词首字母大写、无分隔连写」的格式,用正则匹配大写字母的前置位置插入空格,简单高效且精准适配需求。

代码示例:

import re

def split_camel_case(s):
    # 匹配大写字母的前置位置,插入空格后去除首尾可能的空格
    return re.sub(r'(?=[A-Z])', ' ', s).strip()

input_list = ["Absoluteadvantage", "Absorptioncosting", "Accreditedinvestor"]
output_list = [split_camel_case(item) for item in input_list]
print(output_list)

运行输出:

["Absolute Advantage", "Absorption Costing", "Accredited Investor"]

方法2:基于字典的最长匹配(通用连写场景)

如果后续遇到更复杂的连写情况(比如混合大小写、纯小写连写),可以用英文单词字典做最长匹配拆分,依赖nltk的单词语料库实现:

代码示例:

from nltk.corpus import words
import nltk

# 首次运行需下载单词库,注释取消即可
# nltk.download('words')
word_set = set(words.words())

def split_word(s):
    s_lower = s.lower()
    length = len(s_lower)
    # 动态规划记录拆分位置
    dp = [0] * (length + 1)
    dp[0] = 1
    
    for i in range(1, length + 1):
        for j in range(i):
            if dp[j] and s_lower[j:i] in word_set:
                dp[i] = j
                break
    
    if not dp[length]:
        return s  # 无法拆分时返回原字符串
    
    # 回溯拼接结果
    result = []
    idx = length
    while idx > 0:
        prev_idx = dp[idx]
        result.append(s_lower[prev_idx:idx].capitalize())
        idx = prev_idx
    
    return ' '.join(reversed(result))

input_list = ["Absoluteadvantage", "Absorptioncosting", "Accreditedinvestor"]
output_list = [split_word(item) for item in input_list]
print(output_list)

该方法能处理更多样的连写情况,但受限于单词库覆盖范围,专有名词可能无法精准拆分。

关于word_tokenize无效的原因

nltk.word_tokenize的作用是对**已有分隔符(空格、标点等)**的文本做分词,它无法识别连写在一起的单词,因此不适用你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:30:41