Python3处理美国专利搜索标题:正则拆分短单词失败求解决方案
解决Python处理专利标题字符串的短单词剔除问题
看起来你在处理专利标题时遇到了正则表达式和字符串拆分的问题,我来帮你梳理一下问题所在,然后给出一个优雅的解决方案。
问题分析
首先你的正则表达式存在语法错误:你写的"\b\w[1:3}\b *"里,量词的写法完全错了——应该用{1,3}而不是[1:3},这直接导致正则无法匹配到短单词。其次,你先拆分标点再逐个处理子串的流程,会破坏原有的短语结构,没必要把问题复杂化。
优雅解决方案
我们可以换个思路:先统一处理整个字符串的标点和大小写,再用正确的正则把短单词(及周围空格)作为分隔符拆分,最后过滤掉空内容即可。这样既能保留长单词组成的短语,又能干净地剔除3字符及以下的单词。
完整代码实现
import re import pandas as pd def process_patent_title(title): # 1. 统一转为小写 title = title.lower() # 2. 将所有非字母数字的标点符号替换为空格,避免干扰单词匹配 title = re.sub(r'[^a-zA-Z0-9]', ' ', title) # 3. 以「1-3字符的单词 + 前后任意空格」作为分隔符拆分字符串 # \b 确保匹配完整单词,不会误拆长单词的一部分 parts = re.split(r'\s*\b\w{1,3}\b\s*', title) # 4. 过滤空字符串,同时去除短语前后的多余空格 processed_phrases = [phrase.strip() for phrase in parts if phrase.strip()] return processed_phrases # 应用到你的pandas Series df_tpdownloads['ProcessedPublicationTitles'] = df_tpdownloads['PublicationTitleSplit'].apply(process_patent_title)
测试你的示例
我们用你给出的三个测试案例验证一下:
- 输入:
" and training requirements for selected salt applications"
输出:['training requirements', 'selected salt applications']✅ - 输入:
"december 31"
输出:['december']✅ - 输入:
"experimental system for salt in an emergence research and applications in process heat"
输出:['experimental system', 'salt', 'emergence research', 'applications', 'process heat']✅
关键细节解释
- 正则表达式
r'\s*\b\w{1,3}\b\s*':\s*:匹配任意数量的空格(包括0个),确保短单词前后有没有空格都能被当成分隔符。\b:单词边界,避免把长单词的部分字符(比如system里的tem)误判为短单词。\w{1,3}:精准匹配1-3个字母/数字组成的短单词,符合你要剔除的目标。
- 先替换标点为空格:把所有标点统一换成空格,避免像逗号、括号这类符号打断单词的匹配逻辑,处理起来更统一。
- 过滤空元素:拆分后可能会出现空字符串(比如标题开头就是短单词的情况),用列表推导式过滤掉这些无效内容。
这个方案不需要嵌套循环,逻辑清晰,完全符合你要的「优雅解决方案」要求。
内容的提问来源于stack exchange,提问作者Organus
相关产品推荐
相关产品推荐

