如何在Python中拆分连写英文单词并添加下划线?
拆分连写英文单词为下划线分隔格式的可行方法
方法一:正则表达式匹配词边界
针对这类常见单词拼接的字符串,可以通过正则匹配单词间的边界规律来拆分,比如短单词前缀/后缀、辅音-元音分界等:
import re arr_list = ['startedat', 'duecheck', 'vehicleid'] # 针对示例定制匹配规则,可根据需求扩展单词组 pattern = re.compile(r'(started|due|vehicle)(at|check|id)') for word in arr_list: match = pattern.match(word) if match: print('_'.join(match.groups()))
如果需要适配更多场景,可使用通用的辅音-元音匹配模式:
import re def split_concat_word(word): # 匹配辅音结尾+元音开头的位置,拆分后转小写拼接 split_parts = re.findall(r'[bcdfghjklmnpqrstvwxz]+[aeiouy]*|[aeiouy]+', word, re.I) return '_'.join([part.lower() for part in split_parts]) arr_list = ['startedat', 'duecheck', 'vehicleid'] for word in arr_list: print(split_concat_word(word))
方法二:使用spaCy预训练分词模型
spaCy的分词器依赖预训练语言模型,对连续单词的拆分效果比word_tokenize更精准:
import spacy # 加载英文轻量模型 nlp = spacy.load("en_core_web_sm") arr_list = ['startedat', 'duecheck', 'vehicleid'] for word in arr_list: doc = nlp(word) split_parts = [token.text for token in doc] print('_'.join(split_parts).lower())
如果遇到专业术语拆分失败,可自定义添加词汇到spaCy的词汇表中。
方法三:字典贪心匹配拆分
基于英文单词字典,从左到右贪心匹配最长有效单词,完成拆分:
from nltk.corpus import words word_set = set(words.words()) def greedy_split(word): word_lower = word.lower() n = len(word_lower) dp = [False] * (n + 1) dp[0] = True split_indices = [0] * (n + 1) for i in range(1, n+1): for j in range(i): if dp[j] and word_lower[j:i] in word_set: dp[i] = True split_indices[i] = j if not dp[n]: return word parts = [] i = n while i > 0: j = split_indices[i] parts.append(word_lower[j:i]) i = j return '_'.join(reversed(parts)) arr_list = ['startedat', 'duecheck', 'vehicleid'] for word in arr_list: print(greedy_split(word))
这种方法需要确保字典覆盖目标单词,针对专业词汇可补充自定义词典。
内容的提问来源于stack exchange,提问作者Nix
相关产品推荐
相关产品推荐

