如何在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
相关产品推荐
相关产品推荐

